简单的重放攻击保护

该文本详细阐述了以太坊 Spurious Dragon 硬分叉(EIP-607)引入的交易签名和恢复机制的变更。为防止跨链重放攻击,引入了 CHAIN_ID,并规定当 block.number 达到特定高度时,交易哈希将包含九个RLP编码元素,且签名中的 v 值将根据 CHAIN_ID 进行调整,同时兼容旧的签名方案。

Hard fork

Spurious Dragon

Parameters

  • FORK_BLKNUM: 2,675,000
  • CHAIN_ID: 1 (主网)

Specification

如果 $block.number \ge FORK\_BLKNUM$CHAIN_ID 可用,那么在为签名目的计算交易哈希时,你应该哈希九个 RLP 编码元素 (nonce, gasprice, startgas, to, value, data, chainid, 0, 0),而不是仅哈希六个 RLP 编码元素 (nonce, gasprice, startgas, to, value, data)。如果你这样做,则签名的 $v$ 必须设置为 $\{0,1\} + CHAIN\_ID * 2 + 35$,其中 $\{0,1\}$ 是 secp256k1 签名过程中曲线点 $y$ 值的奇偶性,对于该曲线点,$r$$x$-value。如果你选择只哈希 6 个值,那么 $v$ 将继续像以前一样设置为 $\{0,1\} + 27$

如果 $block.number \ge FORK\_BLKNUM$$v = CHAIN\_ID * 2 + 35$$v = CHAIN\_ID * 2 + 36$,那么在为恢复目的计算交易哈希时,哈希九个 RLP 编码元素 (nonce, gasprice, startgas, to, value, data, chainid, 0, 0),而不是哈希六个 RLP 编码元素 (nonce, gasprice, startgas, to, value, data)。当前使用 $v = 27$$v = 28$ 的签名方案仍然有效,并继续按照以前的规则运行。

Example

考虑一笔交易,其中 $nonce = 9$$gasprice = 20 \times 10^9$$startgas = 21000$to = 0x3535353535353535353535353535353535353535$value = 10^{18}$data='' (空)。

“签名数据”变为:

0xec098504a817c800825208943535353535353535353535353535353535353535880de0b6b3a764000080018080

“签名哈希”变为:

0xdaf5a779ae972f972197303d7b574746c7ef83eadac0f2791ad23db92e4c8e53

如果交易使用私钥 0x4646464646464646464646464646464646464646464646464646464646464646 进行签名,则 $v, r, s$ 值变为:

(37, 18515461264373351373200002665853028612451056578545711640558177340181847433846, 46948507304638947509940763649030358759909902576025900602547168820602576006531)

注意使用 37 而不是 27。签名的交易将变为:

0xf86c098504a817c800825208943535353535353535353535353535353535353535880de0b6b3a76400008025a028ef61340bd939bc2195fe537567866003e1a15d3c71ff63e1590620aa636276a067cbe9d8997f761aecb703304b3800ccf555c9f3dc64214b297fb1966a3b6d83

Rationale

这将提供一种在 Ethereum 上工作但不在 ETC 或 Morden 测试网上工作的交易发送方式。鼓励 ETC 采用此 EIP,但将 CHAIN_ID 替换为不同的值;同时,鼓励所有未来的测试网、联盟链和 alt-etherea 采用此 EIP,并将 CHAIN_ID 替换为唯一值。

List of Chain ID's:

CHAIN_ID
1 Ethereum 主网
2 Morden (已废弃), Expanse 主网
3 Ropsten
4 Rinkeby
5 Goerli
42 Kovan
1337 Geth 私有链 (默认)

chainid.network 上查找更多 Chain ID,并为 ethereum-lists/chains 做出贡献。

  • 原文链接: github.com/nerolation/EI...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Nerolation
Nerolation
江湖只有他的大名,没有他的介绍。