Aller au contenu
ecdsa.com

EIP-191 (standard des données signées)

La convention Ethereum selon laquelle les messages signés commencent par l’octet 0x19 et un octet de version, si bien qu’ils ne peuvent jamais être des transactions valides ; la version 0x45 est le format personal_sign utilisé par la plupart des portefeuilles.
Autres graphiesEIP-191ERC-191Ethereum signed message\x19Ethereum Signed Message

Les données signées sont 0x19 ‖ version ‖ version-specific data ‖ data. Versions : 0x00 (données avec l’adresse d’un validateur désigné), 0x01 (données structurées, c’est-à-dire EIP-712) et 0x45, la lettre E, pour personal_sign : 0x19 suivi de Ethereum Signed Message: et d’un saut de ligne, puis de la longueur du message en ASCII décimal et du message. Les transactions encodées en RLP ne peuvent pas commencer par 0x19 : c’est tout l’intérêt du préfixe.

Le portefeuille hache le résultat avec Keccak-256 et signe avec secp256k1 ; la signature fait 65 octets, r ‖ s ‖ v, avec un v de 27 ou 28. Pour le message hello, le condensat est 0x50b2c43fd39106bafbba0da34fc430e1f91e3c96ea2acee2bc34119f92b37750. Les vérificateurs récupèrent l’adresse avec ecrecover (ou le verifyMessage d’une bibliothèque) et la comparent ; les comptes intelligents nécessitent ERC-1271 à la place.

personal_sign montre aux utilisateurs un texte opaque et n’offre aucune liaison au domaine ni à la chaîne : les applications devraient donc les inclure dans le message (comme le fait Sign-In with Ethereum) ou préférer EIP-712 pour tout ce qui a une structure ou une valeur.

Normes et références

Tous les termes