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
19var 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
1new 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
1static 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
1static 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
2static ECKey BlsKey.recover(Buffer data,
Buffer sig) async;
Aufrufparameter:
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
2static 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
2static 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
1static 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
1String BlsKey.bbs_suite;
curve
String, gibt den Namen der elliptischen Kurve des aktuellen Algorithmus zurück
1readonly String BlsKey.curve;
name
String, gibt den aktuellen Algorithmusnamen zurück
1readonly String BlsKey.name;
keySize
Ganzzahl, gibt die aktuelle Passwortlänge des Algorithmus in Bits zurück
1readonly Integer BlsKey.keySize;
alg
String, gibt den aktuellen Objektsignaturalgorithmus zurück und legt ihn fest
1readonly String BlsKey.alg;
publicKey
PKey, gibt den öffentlichen Schlüssel des aktuellen Schlüssels zurück
1readonly 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
2Buffer 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
3Boolean 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
4Buffer 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
4Boolean 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
1Buffer 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
1Boolean BlsKey.isPrivate();
Rückgabeergebnisse:
- Boolean, ist True und stellt den privaten Schlüssel dar
clone
Aktuellen Schlüssel kopieren
1PKey BlsKey.clone();
Rückgabeergebnisse:
- PKey, das Kopierobjekt des aktuellen Schlüssels
pem
Gibt die PEM-Formatkodierung des aktuellen Schlüssels zurück
1String BlsKey.pem();
Rückgabeergebnisse:
- String, PEM-Formatkodierung des aktuellen Schlüssels
der
Gibt die DER-Formatkodierung des aktuellen Schlüssels zurück
1Buffer BlsKey.der();
Rückgabeergebnisse:
- Buffer, die DER-Formatkodierung des aktuellen Schlüssels
json
Gibt die JWT-Formatkodierung des aktuellen Schlüssels zurück
1Object 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
1Boolean 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
1Buffer 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
1Buffer 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
2Buffer 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
3Boolean 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.
1String 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.
1Value BlsKey.toJSON(String key = "");
Aufrufparameter:
- key: Zeichenfolge, nicht verwendet
Rückgabeergebnisse:
- Value, gibt einen Wert zurück, der JSON serialisierbar enthält