Basic Study EIP-155: Simple replay attack protection
web3Auth という 認証libraryの 初期化時に指定する EIP155というNamespaceについて
this.web3Auth = new Web3Auth({
chainConfig: {
chainNamespace: "eip155",
chainId,
},
良くわかっていなかったので 基本的なところですが自分のために内容を要約します。
要約
EIP-155は、シンプルなリプレイ攻撃保護を提供するEthereum Improvement Proposalです。Vitalik Buterinが作成し、2016年10月に発表されました。このEIPは、トランザクションの署名時にハッシュ化する要素にchainidを追加することで、EthereumとETCやMordenテストネットなどの他のチェーンでのトランザクションを区別できるようにします。
EIP-155の実装によって、ブロック番号がFORK_BLKNUM以上である場合、署名用のトランザクションハッシュを計算する際に、従来の6つのRLPエンコードされた要素(nonce、gasprice、startgas、to、value、data)だけでなく、9つのRLPエンコードされた要素(nonce、gasprice、startgas、to、value、data、chainid、0、0)をハッシュ化することが推奨されます。これを行うと、署名のv値は、secp256k1署名プロセスでrがx値である曲線上の点のy値のパリティである{0,1} + CHAIN_ID * 2 + 35に設定されます。
(もし 従来の6つのRLPであれば vは 従来どおり {0,1} + 27です)
また、ブロック番号がFORK_BLKNUM以上であり、v = CHAIN_ID * 2 + 35またはv = CHAIN_ID * 2 + 36である場合、リカバリ用のトランザクションハッシュを計算する際に、先述の9つのRLPエンコードされた要素をハッシュ化します。これにより、v = 27およびv = 28を使用した既存の署名スキームは、従来と同じルールで有効なままです。
EIP-155は、Ethereumのメインネットやテストネット、プライベートチェーンなど、異なるチェーンにおいてリプレイ攻撃を防ぐための重要な対策となっています。各チェーンは独自のCHAIN_IDを持ち、chainid.networkやethereum-lists/chainsでCHAIN_IDの一覧を見つけることができます。
以上EIP自体は短い文章ですがきちんと理解するには数学、暗号にたいする深い知識が必要になるということがよく分かりました。 頭の良い人が考えたルールの上で我々は守られながら、遊ばせてもらっているんですね。
Discussion