Eine Nachricht kann signiert und ihr signierender öffentlicher Schlüssel wiederhergestellt werden, wenn die Signatur und der Nachrichten-Hash gegeben sind ...
signature = web3.personal.sign(<account>,<message hash>)
pubKey = web3.personal.ecRecover(<message hash>, <signature>)
Gibt es eine Möglichkeit, den Nachrichten-Hash mit Signatur und öffentlichem Schlüssel wiederherzustellen?
Nein, Sie können den Nachrichten-Hash nicht aus einer ECDSA-Signatur wiederherstellen. Die Signatur wird durch Generieren berechnet, (x, y) = kG
wobei k
die geheime Nonce G
ist und der Generator für die Kurve ist. Dann r = x
und s = k^(-1)(z + rd)
wo z
ist die Nachricht und d
ist der private Schlüssel. Wir können den öffentlichen Schlüssel abrufen dG
, indem wir das sehen r^(-1) (kGs - zG) = dG
. Aber der Versuch , dasselbe zu tun , z
wird immer nur dazu führen zG
, da wir es nicht wissen k
, nur kG
. z
Der gegebene Befund zG
ist genau der DLP auf der elliptischen Kurve und kann nicht berechnet werden.
Bearbeiten 2: Es sollte beachtet werden, dass es während der Berechnung des Nachrichten-Hashes nicht möglich ist, Vermutungen zu überprüfen, wenn die Nachricht vor dem Hashing nicht gesalzen wurde (was normalerweise nicht der Fall ist). Wenn die Nachricht also aus einer kleinen Menge von Möglichkeiten stammt, kann sie wiederhergestellt werden.
Bearbeiten: Links zum Weiterlesen
https://en.m.wikipedia.org/wiki/Elliptic_Curve_Digital_Signature_Algorithm
Malone