本文へスキップ
ecdsa.com

ecrecover

アドレス 0x01 にある Ethereum のプリコンパイル済みコントラクト(および Solidity の ecrecover 関数)で、32 バイトのハッシュ値と secp256k1 上の ECDSA 署名 (v, r, s) から署名者のアドレスを復元します。
別表記ecrecoverECRECOVER precompile0x01 precompile

消費ガスは 3,000 で、復元した公開鍵の 20 バイトのアドレスを返します。v が 27 でも 28 でもない、r や s が範囲外であるといった無効な入力に対しては、長さ 0 のバイト列(Solidity ではゼロアドレス)を返します。low-S を強制しないため、署名を一意な識別子として使うコントラクトは、n/2 を超える s を自分で拒否しなければなりません(EIP-2 がこの規則を適用したのはトランザクションだけです)。

安全に使うには、結果を想定する署名者と必ず比較してゼロアドレスを拒否し、署名されたデータに含まれる nonce や期限を確認してリプレイを防ぎ、生の値ではなく EIP-191 や EIP-712 のデータをハッシュし、スマートコントラクトのアカウントには ERC-1271 を使ってください。OpenZeppelin の ECDSA.recover と SignatureChecker は、これらのチェックをまとめて提供しています。

規格と参考文献

すべての用語