Objekt integriertes Objekt

ObjectBlsKey

Objekt des Verschlüsselungsalgorithmus für elliptische Kurven

Das BlsKey-Objekt ist ein Objekt, das in fibjs zur Darstellung eines BLS-Schlüssels verwendet wird. Es kann zum Erstellen, Importieren, Exportieren und Bearbeiten von BLS-Schlüsseln verwendet werden. Der BLS-Schlüssel ist eine Verschlüsselungsmethode mit öffentlichem Schlüssel, die üblicherweise zur Authentifizierung und Datensignatur verwendet wird und die Eigenschaften einer hohen Ausführungsgeschwindigkeit bei gleichzeitiger Gewährleistung der Sicherheit aufweist.

Das BlsKey-Objekt stellt verschiedene Konstruktormethoden zum Laden von Schlüsseln aus verschiedenen Schlüsselformaten bereit. Es bietet auch einige öffentliche Eigenschaften und Methoden wie toString(), clone(), name, publicKey() usw. sowie einige statische Methoden wie from() usw. Mit diesen Methoden können Sie BlsKey-Objekte bearbeiten.

Darüber hinaus verfügt das BlsKey-Objekt über Mitgliedsattribute wie isPrivate() und toJSON(key=""), mit denen abgefragt werden kann, ob der Schlüssel ein privater Schlüssel ist, und die JSON-Formatdarstellung des Objekts exportiert werden kann.

Das BlsKey-Objekt bietet eine Reihe flexibler und leistungsstarker APIs zur einfachen Verwaltung von BLS-Schlüsseln und zur Implementierung von Sicherheitsanforderungen wie Authentifizierung und Datensignierung.

Im Folgenden demonstrieren wir anhand eines einfachen Beispiels, wie das BlsKey-Objekt zum Signieren und Verifizieren verwendet wird:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
var crypto = require('crypto'); // create a private key var privateKey = new crypto.BlsKey({ 'kty': 'EC', 'crv': 'BLS12-381-G1', 'x': 'TPk62yDxSISkoSBRPYkpO%tJmm0tZd4tJeLuCKVFv4UmBPfOQ2aDWrCifANam2wj', 'd': 'zE-pf24p-l0IT_lMcrX0gStTcsx_k1f7DnJmrN8V7ZU', }); // sign a message var message = '这是一条需要签名的消息'; var signature = privateKey.sign(message); // verify the signature var publicKey = privateKey.publicKey; var verify = publicKey.verify(message, signature); console.log('verification result:', verify);

Erbschaftsverhältnis

Konstrukteur

BlsKey

Konstruieren Sie BlsKey aus einem Schlüssel im JSON-Format

1
new BlsKey(Object jsonKey);

Aufrufparameter:

  • jsonKey: Objekt, Schlüssel im JSON-Format

Das Format von jsonKey unterstützt die folgenden zwei Arten privater Schlüssel:

1 2 3 4 5 6
{ "kty": "EC", "crv": "BLS12381_G1", "x": "tCgCNuUYQotPEsrljWi-lIRIPpzhqsnJV1NPnE7je6glUb-FJm9IYkuv2hbHw22i", "d": "TXNvJBBG3h23H5hFJcnRZmYd_j1TqpwtJOllYGU3yyw" }

Bls öffentlicher Schlüssel:

1 2 3 4 5
{ "kty": "EC", "crv": "BLS12381_G1", "x": "tCgCNuUYQotPEsrljWi-lIRIPpzhqsnJV1NPnE7je6glUb-FJm9IYkuv2hbHw22i" }

statische Funktion

aggregateSignature

Führen Sie eine Reihe von Signaturen zu einer einzigen Signatur zusammen

1
static Buffer BlsKey.aggregateSignature(Array sigs);

Aufrufparameter:

  • sigs: Array, ein Satz zusammenzuführender Signaturen

Rückgabeergebnisse:

  • Buffer, gibt die zusammengeführte Einzelsignatur zurück

aggregatePublicKey

Führen Sie einen Satz öffentlicher Schlüssel zu einem einzigen öffentlichen Schlüssel zusammen

1
static BlsKey BlsKey.aggregatePublicKey(Array keys);

Aufrufparameter:

  • keys: Array, ein Satz öffentlicher Schlüssel, die zusammengeführt werden sollen

Rückgabeergebnisse:

  • BlsKey, gibt den zusammengeführten einzelnen öffentlichen Schlüssel zurück

recover

Öffentlichen Schlüssel aus wiederherstellbarer Signatur wiederherstellen, unterstützt nur secp256k1

1 2
static ECKey BlsKey.recover(Buffer data, Buffer sig) async;

Aufrufparameter:

  • data:Buffer, die Originaldaten der Signatur
  • sig:Buffer, wiederherstellbare Signatur

Rückgabeergebnisse:

  • ECKey, gibt ein Objekt zurück, das den öffentlichen Schlüssel enthält

from

Laden Sie einen Schlüssel im DER-Format

1 2
static PKey BlsKey.from(Buffer DerKey, String password = "");

Aufrufparameter:

  • DerKey:Buffer, Schlüssel im DER-Format
  • password: Zeichenfolge, Entschlüsselungskennwort

Rückgabeergebnisse:

  • PKey, gibt ein Objekt zurück, das den Schlüssel enthält

Laden Sie einen Schlüssel im PEM-Format

1 2
static PKey BlsKey.from(String pemKey, String password = "");

Aufrufparameter:

  • pemKey: String, Schlüssel im PEM-Format
  • password: Zeichenfolge, Entschlüsselungskennwort

Rückgabeergebnisse:

  • PKey, gibt ein Objekt zurück, das den Schlüssel enthält

Laden Sie einen Schlüssel im JSON-Format

1
static PKey BlsKey.from(Object jsonKey);

Aufrufparameter:

  • jsonKey: Objekt, Schlüssel im JSON-Format

Rückgabeergebnisse:

  • PKey, gibt ein Objekt zurück, das den Schlüssel enthält

Das Format von jsonKey unterstützt die folgenden vier Arten von privaten RSA-Schlüsseln:

1 2 3 4 5 6 7 8 9 10 11
{ "kty": "RSA", "n": "0m5lvKpWqy9JS7tV2HIPqHCYHLquSuxIC3F8strIQLJKO3rZmTT96KTnhsOfBO7Y1bI7mnT0PB3_vcHd9ekWMEoZJQw7MuB8KeM_Wn54-elJr5DNLk5bMppSGxX7ZnumiXGG51_X3Yp-_EbGtDG80GxXXix7Mucyo7K25uE0uW8=", "e": "AQAB", "d": "agN2O9NxMHL1MTMi75WfL9Pxvl-KWXKqZSF6mjzAsF9iKI8euyHIXYFepzU8kual1RsjDhCnzvWqFvZplW8lXqrHf_P-rS_9Y4gBUw6pjnI_DnFIRwWHRvrUHHSCfWOdTCIKdOTkgLZuGFuhEY3RMIW0WSYejjLtftwy0RVxAzk=", "p": "6a4G1qmfwWmn1biigN7IVFlkbLf9oVe6g7rOmHxI-hn1GRxKDSVuAUrmR1IhuAnca9M0y7SD-7TUs6wjOxWxaw==", "q": "5ofkxFKdPBD0CQHMb9q13AMHUVe0rJ-hSjqqIBrmqApUOneyAcMV76M0QyIQnI2p3POa4Qu_7XChDwRVl7LlDQ==", "dp": "2mXGiGwCHl8j-FBWuID-1C6z-BRB3MBEVoeKPOOzxOPruatB3mWEGXsqG7A8SWgV9URxTI2K6P3J6Z7RUpBkvw==", "dq": "oagn5vfb5NQqnOpS9xkSsD67cfIj821ZSFlNFYhnuOzNVda7z_qCtnHm4zDPH0lEFXoKYMfBhfqWJpaugttjPQ==", "qi": "dqEQgxNmOVFrF4s776hTqeC6oEDila8EvpVb2F2ZvwAOLjCQ66OiAZK1BiYGHqUy0NeqNmtlsLSuBEZQZvqZwg==" }

Öffentlicher RSA-Schlüssel:

1 2 3 4 5
{ "kty": "RSA", "n": "0m5lvKpWqy9JS7tV2HIPqHCYHLquSuxIC3F8strIQLJKO3rZmTT96KTnhsOfBO7Y1bI7mnT0PB3_vcHd9ekWMEoZJQw7MuB8KeM_Wn54-elJr5DNLk5bMppSGxX7ZnumiXGG51_X3Yp-_EbGtDG80GxXXix7Mucyo7K25uE0uW8=", "e": "AQAB" }

Privater EC-Schlüssel:

1 2 3 4 5 6 7
{ "kty": "EC", "crv": "P-521", "x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL", "y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU", "d": "AfkIbUHXfW41njdpoKuqqKludcoLJS8D_oMEwkj-GVaXFNKccIoF5iKGu2c69kNDjo83R_7wyGlfRczsklkik1ST" }

Öffentlicher EC-Schlüssel:

1 2 3 4 5 6
{ "kty": "EC", "crv": "P-521", "x": "ATfNNFuuvlGxrTGoXgyfSAGgRNNDnO3rN3k74urKJdVS14RYhdnSwm91Bm-F1l-T1XKlAY2yRnzG9w1Ukvo8c0wL", "y": "ASBHqrruB6kdkEUB3vlW3-UIkk4HtKdUeTwN-7m3j2rgZvYR1ffRAapDvWqKGiBjomqWafxokBkbDI0c95f6f4XU" }

Mitgliedereigenschaften

bbs_suite

Zeichenfolge, von BBS signierte Verschlüsselungssuite, Standard ist Bls12381Sha256, kann in Bls12381Shake256 geändert werden, unterstützt nur die BLS12-381-G2-Kurve

1
String BlsKey.bbs_suite;

curve

String, gibt den Namen der elliptischen Kurve des aktuellen Algorithmus zurück

1
readonly String BlsKey.curve;

name

String, gibt den aktuellen Algorithmusnamen zurück

1
readonly String BlsKey.name;

keySize

Ganzzahl, gibt die aktuelle Passwortlänge des Algorithmus in Bits zurück

1
readonly Integer BlsKey.keySize;

alg

String, gibt den aktuellen Objektsignaturalgorithmus zurück und legt ihn fest

1
readonly String BlsKey.alg;

publicKey

PKey, gibt den öffentlichen Schlüssel des aktuellen Schlüssels zurück

1
readonly PKey BlsKey.publicKey;

Rückgabeergebnisse:

  • der öffentliche Schlüssel des aktuellen Schlüssels

Mitgliedsfunktion

bbsSign

Signieren Sie eine Reihe von Nachrichten mit dem aktuellen privaten Schlüssel, der nur die BLS12-381-G2-Kurve unterstützt

1 2
Buffer BlsKey.bbsSign(Array messages, Object opts = {}) async;

Aufrufparameter:

  • messages: Array, gibt das zu signierende Nachrichtenarray an
  • opts: Objekt, Signaturoptionen angeben

Rückgabeergebnisse:

  • Buffer, gibt die signierte Nachricht zurück

opts unterstützt die folgenden Parameter:

1 2 3
{ header: Buffer | string // specified header for signature, default is empty }

bbsVerify

Überprüfen Sie die Signatur mit dem aktuellen öffentlichen Schlüssel. Unterstützt nur die BLS12-381-G2-Kurve

1 2 3
Boolean BlsKey.bbsVerify(Array messages, Buffer sig, Object opts = {}) async;

Aufrufparameter:

  • messages: Array, gibt das komplette Nachrichtenarray an
  • sig:BufferGeben Sie die zu überprüfende Signatur an
  • opts: Objekt, Überprüfungsoptionen angeben

Rückgabeergebnisse:

  • Boolean, gibt das verifizierte Ergebnis zurück

opts unterstützt die folgenden Parameter:

1 2 3
{ header: Buffer | string // specified header for signature, default is empty }

proofGen

Generieren Sie ein Zertifikat mit dem aktuellen öffentlichen Schlüssel und der aktuellen Signatur. Unterstützt nur die BLS12-381-G2-Kurve

1 2 3 4
Buffer BlsKey.proofGen(Buffer sig, Array messages, Array idx, Object opts = {}) async;

Aufrufparameter:

  • sig:Buffer, gibt die Signatur an, die beim Generieren des Zertifikats verwendet wird
  • messages: Array, gibt das komplette Nachrichtenarray an
  • idx: Array, gibt den Nachrichtenindex an, der beim Generieren von Beweisen verwendet wird. Der Index basiert auf 1
  • opts: Objekt, Beweisoptionen angeben

Rückgabeergebnisse:

  • Buffer, gibt den generierten Beweis zurück

opts unterstützt die folgenden Parameter:

1 2 3 4
{ header: Buffer | string, // specified header for signature, default is empty proof_header: Buffer | string // specified header for proof, default is empty }

proofVerify

Verwenden Sie zur Überprüfung des Zertifikats den aktuellen öffentlichen Schlüssel, der nur die Kurve BLS12-381-G2 unterstützt

1 2 3 4
Boolean BlsKey.proofVerify(Array messages, Array idx, Buffer proof, Object opts = {}) async;

Aufrufparameter:

  • messages: Array, gibt ein Array von Nachrichten an, die basierend auf dem Index gefiltert werden
  • idx: Array, gibt den im Beweis verwendeten Nachrichtenindex an, der Index basiert auf 1
  • proof:BufferGeben Sie den generierten Beweis an
  • opts: Objekt, Beweisoptionen angeben

Rückgabeergebnisse:

  • Boolean, gibt das verifizierte Ergebnis zurück

opts unterstützt die folgenden Parameter:

1 2 3 4
{ header: Buffer | string, // specified header for signature, default is empty proof_header: Buffer | string // specified header for proof, default is empty }

computeSecret

Berechnen Sie den gemeinsamen Elliptic Curve Diffie-Hellman (ECDH)-Schlüssel mit dem aktuellen Algorithmus

1
Buffer BlsKey.computeSecret(ECKey publicKey) async;

Aufrufparameter:

  • publicKey:ECKeyGeben Sie den öffentlichen Schlüssel der anderen Partei an

Rückgabeergebnisse:

  • Buffer, gibt den berechneten gemeinsamen geheimen Schlüssel zurück

isPrivate

Fragen Sie ab, ob der aktuelle Schlüssel ein privater Schlüssel ist

1
Boolean BlsKey.isPrivate();

Rückgabeergebnisse:

  • Boolean, ist True und stellt den privaten Schlüssel dar

clone

Aktuellen Schlüssel kopieren

1
PKey BlsKey.clone();

Rückgabeergebnisse:

  • PKey, das Kopierobjekt des aktuellen Schlüssels

pem

Gibt die PEM-Formatkodierung des aktuellen Schlüssels zurück

1
String BlsKey.pem();

Rückgabeergebnisse:

  • String, PEM-Formatkodierung des aktuellen Schlüssels

der

Gibt die DER-Formatkodierung des aktuellen Schlüssels zurück

1
Buffer BlsKey.der();

Rückgabeergebnisse:

  • Buffer, die DER-Formatkodierung des aktuellen Schlüssels

json

Gibt die JWT-Formatkodierung des aktuellen Schlüssels zurück

1
Object BlsKey.json(Object opts = {});

Aufrufparameter:

  • opts: Objekt, Exportoptionen angeben

Rückgabeergebnisse:

  • Object, die JWT-Formatkodierung des aktuellen Schlüssels

opts unterstützt die folgenden Parameter:

1 2 3
{ compress: false // specify whether to output public key in compressed form }

Kurven, die die Komprimierung unterstützen, sind: secp192r1, secp192k1, secp256r1, secp256k1, brainpoolP256r1, secp384r1, brainpoolP384r1, brainpoolP512r1, secp521r1, sm2


equals

Vergleichen Sie zwei öffentliche/private Schlüssel, um festzustellen, ob sie identisch sind

1
Boolean BlsKey.equals(object key);

Aufrufparameter:

  • key:objectGeben Sie den öffentlichen/privaten Schlüssel der anderen Partei an

Rückgabeergebnisse:

  • Boolean, wenn sie gleich sind, geben Sie true zurück

encrypt

Verschlüsseln Sie Daten mit dem öffentlichen Verschlüsselungsschlüssel des aktuellen Algorithmus

1
Buffer BlsKey.encrypt(Buffer data) async;

Aufrufparameter:

  • data:BufferGeben Sie die zu verschlüsselnden Daten an

Rückgabeergebnisse:

  • Buffer, gibt die verschlüsselten Daten zurück

decrypt

Entschlüsseln Sie Daten mit dem privaten Schlüssel des aktuellen Algorithmus-Passworts

1
Buffer BlsKey.decrypt(Buffer data) async;

Aufrufparameter:

  • data:BufferGeben Sie die zu entschlüsselnden Daten an

Rückgabeergebnisse:

  • Buffer, gibt die entschlüsselten Daten zurück

sign

Signieren Sie Daten mit dem kryptografischen privaten Schlüssel des aktuellen Algorithmus

1 2
Buffer BlsKey.sign(Buffer data, Object opts = {}) async;

Aufrufparameter:

  • data:BufferGeben Sie die zu signierenden Daten an. Wenn der Algorithmus RSA ist, muss der Eingabeparameter mit dem durch alg angegebenen Algorithmus ausgeführt werden.hash
  • opts: Objekt, Signaturoptionen angeben

Rückgabeergebnisse:

  • Buffer, geben Sie die signierten Daten zurück

opts unterstützt die folgenden Parameter:

1 2 3 4 5
{ alg: 0, // specify the hash algorithm for signing, only valid for RSA, default is 0. Supported algorithms: 0=NONE,1=MD5,2=SHA1,3=SHA224,4=SHA256,5=SHA384,6=SHA512,7=RIPEMD160 format: "der", // specify the signature format, default is der, supported formats: der, raw recoverable: false // specify whether to return a recoverable signature, only valid for secp256k1 }

verify

Überprüfen Sie die Daten mithilfe des kryptografischen öffentlichen Schlüssels des aktuellen Algorithmus

1 2 3
Boolean BlsKey.verify(Buffer data, Buffer sign, Object opts = {}) async;

Aufrufparameter:

  • data:BufferGeben Sie die zu überprüfenden Daten an
  • sign:BufferGeben Sie die zu überprüfende Signatur an
  • opts: Objekt, Überprüfungsoptionen angeben

Rückgabeergebnisse:

  • Boolean, gibt das verifizierte Ergebnis zurück

opts unterstützt die folgenden Parameter:

1 2 3 4
{ alg: 0, // specify the hash algorithm for signing, only valid for RSA, default is 0. Supported algorithms: 0=NONE,1=MD5,2=SHA1,3=SHA224,4=SHA256,5=SHA384,6=SHA512,7=RIPEMD160 format: "der" // specify the signature format, default is der, supported formats: der, raw }

toString

Gibt die Zeichenfolgendarstellung des Objekts zurück. Im Allgemeinen wird „[Native Object]“ zurückgegeben. Das Objekt kann gemäß seinen eigenen Eigenschaften neu implementiert werden.

1
String BlsKey.toString();

Rückgabeergebnisse:

  • String, gibt die Zeichenfolgendarstellung des Objekts zurück

toJSON

Gibt eine Darstellung des Objekts im JSON-Format zurück und gibt im Allgemeinen eine Sammlung lesbarer Eigenschaften zurück, die vom Objekt definiert werden.

1
Value BlsKey.toJSON(String key = "");

Aufrufparameter:

  • key: Zeichenfolge, nicht verwendet

Rückgabeergebnisse:

  • Value, gibt einen Wert zurück, der JSON serialisierbar enthält