ECKey.ECDSASignaturerstellung

Ich habe meine ECKey key. Um ein ECDSASignatureObjekt mit BitcoinJ zu erstellen, müssen wir aufrufen ECDSASignature mySignature = key.sign(Sha256Hash input).

Ist das Sha256Hash inputmeine Nachricht? Oder ist es das Ergebnis von Sha256(byte[] myArray)?

Was ist, wenn ich keine Nachricht zum Signieren habe? Ist es akzeptabel, die zu signieren, key.getPrivKeyBytes()um eine zu erstellen ECDSASignature, oder ist es nicht akzeptabel, weil es Informationen preisgibt, einschließlich in getPrivKeyBytes()und als Ergebnis meinen privaten Schlüssel?

Und wenn es nicht akzeptabel ist, was muss meine Botschaft sein? Kann ich unterschreiben, was ich will, um meine zu erstellen ECDSASignature?

Versuchen Sie, eine Transaktion zu unterzeichnen? Es gibt bessere Möglichkeiten, dies in Bitcoinj zu tun. Was versuchst du zu unterschreiben?
Sagen wir das zuerst: Ich versuche, eine Transaktion zu signieren, und als zweites Szenario, dass ich eine Nachricht in Form einer String-Variablen signieren werde. Welches sind diese besseren Möglichkeiten? Danke.
Danke. Ich werde tatsächlich eher eine Nachricht (als String-Variable) als eine ganze Transaktion erstellen, und schließlich werde ich diese Nachricht signieren, um die Funktionalitätswünsche meines Programms zu erfüllen.
@Top Wenn Sie versuchen, eine Transaktion zu signieren, sollten Sie verwenden. Wallet.signTransaction(Wallet.SendRequest.forTx(transaction));Wenn Sie versuchen, eine Nachricht zu signieren, sollten Sie die Nachricht zuerst mit SHA256 hashen.

Antworten (1)

Das Signieren der Bytes des privaten Schlüssels von ECKey keyist nicht akzeptabel, da Sie angreifbar sind, wenn Sie Informationen über Ihren privaten Schlüssel freigeben.

Beim Signieren einer Nachricht (als String) müssen Sie abschätzen:

 byte[] result= sha256(message)

Das Ergebnis ist ein byte[] und dieses Array wird schließlich in Folgendes eingefügt:

 Sha256Hash input= new Sha256Hash(result);

Dann ist das Verfahren einfach, um die ECDSASignature zu erzeugen . Sie müssen Folgendes tun:

ECDSASignature signature= key.sign(input);

und schließlich, um Ihre Unterschrift zu validieren, müssen Sie Folgendes überprüfen:

key.verify(input, signature)