Ethereum Yellow Paper: Siehe Gleichung 220 und 221.
In Gleichung 220 erhalten wir die Transaktion, die an das Netzwerk gesendet werden kann und durch eine 256-Bit-Transaktions-ID verfolgt wird. Seine ganz rechten 160 Bits sind gleich S(T) , was als Senderfunktion S der Transaktion definiert ist.
Meine Frage bezieht sich auf Gleichung 221, die eine Aussage über Folgendes ist:
Die Behauptung, dass der Absender einer signierten Transaktion gleich der Adresse des Unterzeichners ist, sollte selbstverständlich sein
[F] Warum und wie ist der Absender einer signierten Transaktion ( S(T) on the eq. 220
) gleich der Adresse des Unterzeichners ( A(pr)
) ? Gibt es eine gut erklärte Dokumentation zu diesem Thema?
Könnten wir die folgende Aussage abschließen:
B96...255(KEC(ECDSARECOVER(h(T),Tw,Tr,Ts))) == B96...255((KEC(ECDSAPUBKEY(pr)))
Vielen Dank für Ihre wertvolle Zeit und Hilfe.
Dies ist als Trick zur Wiederherstellung öffentlicher Schlüssel von ECDSA bekannt, siehe https://crypto.stackexchange.com/questions/18105/how-does-recovering-the-public-key-from-an-ecdsa-signature-work how elliptic curve Mathe funktioniert.
Eine Ethereum-Signatur hat drei Parameter r
, s
und v
. Wenn Sie r
, s
und die ECDSA-Gleichung verwenden, haben Sie zwei Kandidaten für den öffentlichen Schlüssel. Wenn Sie dann verwenden v
, können Sie disambiguieren und genau wissen, welcher der öffentliche Schlüssel des Unterzeichners ist.
Sobald Sie den öffentlichen Schlüssel haben, können Sie die Adresse mit den letzten 20 Bytes von berechnen keccak256(publicKey)
.
Alper
S(T)
steht, ist es die Ethereum-Adresse des Absenders, was eigentlich die 160-Bit sind, die wir in Gl. 215 erhalten?KEC( ECDSARECOVER(h(T),Tw,Tr,Ts)) == KEC(ECDSAPUBKEY(pr))
Sie konnten also auf meiner aktualisierten Frage sehen?@IsmaelIsmael
Alper
ECDSARECOVER(h(T),Tw,Tr,Ts))
ist der öffentliche Schlüssel des Unterzeichners und daraus können wir die 160-Bit-Ethereum-Adresse des Unterzeichners erhalten, richtig? @Ismael.Ismael
Alper
KEC(somePublicKey)
für jeden öffentlichen Schlüssel ein eindeutiger Wert generiert werden? @IsmaelAlper
KEC(somePublicKey
kann einen eindeutigen Wert generieren, aber die 160 Bit ganz rechts könnten gleich sein, was zu derselben Adresse führt. Insgesamt sollte das richtig seinB96...255(KEC(ECDSARECOVER(h(T),Tw,Tr,Ts))) == B96...255((KEC(ECDSAPUBKEY(pr)))
, oder? @IsmaelIsmael
Alper
Ismael
Alper