Da Kryptosysteme mit elliptischer Kurve die Eigenschaft haben, Schlüssel hinzuzufügen, warum nicht einfach?
Ich habe dies versucht, mit der elliptic
module für node.js, installieren Sie es einfach mit npm und dann versuchen, die folgende
var EC = require('elliptic').ec;
// we use the same preset of bitcoin, but should work with the other ones too
var ec = new EC('secp256k1');
// generate two (or more) starting keypairs
var key1 = ec.genKeyPair();
var key2 = ec.genKeyPair();
// sum the public...
var sum = key1.getPublic().add(key2.getPublic());
// ...and private keys
var psum = key1.getPrivate().add(key2.getPrivate());
Da die öffentlichen Schlüssel sind Point
Objekte und private Schlüssel sind BigNumber
Objekte, können Sie einfach Rufen Sie die Funktion add()
bei beiden an. An diesem Punkt, sum
und psum
halten Sie Ihre kombinierten Schlüssel, aber bevor Sie sie zum Signieren einer Nachricht verwenden, müssen Sie ein KeyPair
-Objekt (Teil des elliptischen Moduls) erstellen.
// generate two new random keypairs
var privateKeySum = ec.genKeyPair();
var publicKeySum = ec.genKeyPair();
// we don't care about their values
// so just import the sum of keys into them
privateKeySum._importPrivate(psum);
publicKeySum._importPublic(sum);
Wie Sie können, finden Sie eine neue Schlüsselpaar erstellen ich neue zufällige diejenigen machen einfach und verwenden Sie dann die _importPrivate()
und _importPublic()
Funktionen der kombinierten Schlüssel zu laden.
Es ist ein bisschen hacky, ich weiß, aber es funktioniert.
Eine bessere Lösung wäre, das KeyPair-Objekt einfach aus dem Modul zu exportieren und neue mit ihrem Konstruktor zu erstellen.
Danach, genauso normal weitergehen, wie in dem von der Modul readme bereitgestellt Beispiel:
var msg = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
// Sign the message with our new combined private key
var signature = privateKeySum.sign(msg);
// Export DER encoded signature in Array
var derSign = signature.toDER();
// Verify signature using the combined public key, should return true
console.log(publicKeySum.verify(msg, derSign));
dieser Verwendung, nach der ersten Generation, können Sie für die zwei (oder mehr) öffentlichen Schlüssel fragen erforderlich um eine Nachrichtensignatur zu überprüfen. Wenn Sie die öffentlichen Schlüssel als "Kennwörter" behandeln, können Sie eine Signatur anhand einer beliebigen Nachricht überprüfen, um sicherzustellen, dass es sich bei den beiden öffentlichen Schlüsseln um die ursprünglichen handelt.
Auch dies sollte mit mehreren Schlüsseln funktionieren, aber es wird immer alle von ihnen, um erfolgreich zu sein.
So etwas wie folgt: https://github.com/wanderer/secp256k1-node aber komplett in JS ohne C? –
Versuchen Sie, es im Browser oder mit Knoten zu tun? – Breedly
Der Versuch, es in Knoten zu tun. –