Zum Inhalt springen
ecdsa.com

ECDSA-Public-Key-Recovery

Das Berechnen des öffentlichen Schlüssels des Signierers aus einer ECDSA-Signatur und dem Hash der Nachricht (SEC 1 §4.1.6); Ethereum und Bitcoin nutzen es beim Signieren von Nachrichten, statt den Schlüssel zu übertragen.
Auch geschrieben alskey recoveryrecovery idrecid

Aus r rekonstruiert der Verifizierer die Kandidatenpunkte R mit der x-Koordinate r (zwei y-Werte, selten auch r + n) und berechnet Q = r⁻¹·(s·R − z·G). Eine Recovery-ID wählt den Kandidaten aus, meist 0 oder 1 für die Parität der y-Koordinate von R. Ethereum legt sie in v ab: 27 oder 28 bei personal_sign und Legacy-Nachrichten, chainId × 2 + 35 oder + 36 bei EIP-155-Transaktionen und 0 oder 1 bei typisierten Transaktionen. Das Format für signierte Bitcoin-Nachrichten legt sie in einem Header-Byte ab (27–42 je nach Adresstyp, BIP-137).

Das Precompile ecrecover an der Adresse 0x01 liefert die 20-Byte-Adresse des wiederhergestellten Schlüssels; so prüfen Contracts Signaturen von personal_sign, EIP-712 und permit, ohne öffentliche Schlüssel zu speichern. Für eine wohlgeformte Signatur liefert die Wiederherstellung immer irgendeinen Schlüssel, sie beweist also nichts, solange das Ergebnis nicht mit der erwarteten Adresse verglichen ist; bei einem Fehler gibt ecrecover die Nulladresse zurück, die Contracts ablehnen müssen.

Die Wiederherstellung funktioniert für ECDSA auf jeder Kurve, auch auf P-256. Schnorr-Signaturen (BIP-340) und EdDSA lassen sie nicht zu, weil der öffentliche Schlüssel in ihren Challenge-Hash eingeht.

Standards und Quellen

Alle Begriffe