该提案(RSKIP-179)旨在增强RSK网络的安全性,通过要求RSK区块的时间戳与相应的比特币区块时间戳保持在5分钟的误差范围内,从而防止恶意矿工利用过旧的RSK区块和当前的比特币算力进行双花攻击。实施该提案后,攻击者必须放弃比特币挖矿的收益,并创建无效的比特币区块才能进行欺骗,从而提高攻击的成本。
RSKIP | 179 |
---|---|
标题 | BTC-RSK 时间戳链接 |
创建时间 | 2020年10月 |
作者 | SDL |
目的 | 安全 |
层 | 核心 |
复杂度 | 1 |
状态 | 草案 |
讨论 | https://research.rsk.dev/t/rskip-179-btc-rsk-timestamp-linking/44 |
强分叉感知联合挖矿 (SFAMM) 协议提出了一种适用于联合挖矿区块链的新安全模型。如果区块链实现了 SFAMM 协议,并且满足模型的假设,则该模型可确保防止大型双花攻击,通过使攻击可见、可归因,需要至少 51% 的比特币矿工合谋,更重要的是,需要一个有界的时间,其中界限取决于攻击者的哈希率,但 заранее 已知。
此 RSKIP 代表对 RSK 共识的一项小更改,这是在 SFAMM 模型下实现安全性所必需的。
此 RSKIP 旨在防止联合挖矿攻击者使用当前的比特币哈希率来挖掘旧的 RSK 区块。RSKIP 建议防止比特币区块时间戳与 RSK 时间戳相差太远。由于比特币时间戳对于少数矿工而言是部分可延展的,通常最多可追溯到过去 1 小时,因此该预防措施仅适用于跨越至少几个小时的大时间尺度范围的回滚攻击。
RSK 区块头是以下元素的列表:
parentHash, unclesHash, coinbase,stateRoot, txTrieRoot, receiptTrieRoot, logsBloom, difficulty, number, gasLimit, gasUsed, timestamp, extraData, paidFees, minimumGasPrice, uncleCount, ummRoot [, mergeMiningFields ]
mergeMiningFields 如下:
bitcoinMergedMiningHeader,
bitcoinMergedMiningMerkleProof,
bitcoinMergedMiningCoinbaseTransaction
比特币区块头包含以下字段:
字段 | 目的 | 大小 (字节) |
---|---|---|
版本 | 区块版本号 | 4 |
hashPrevBlock | 前一个区块头的 256 位哈希值 | 32 |
hashMerkleRoot | 基于区块中所有交易的 256 位哈希值 | 32 |
时间戳 | 自 1970-01-01T00:00 UTC 以来的当前 区块时间戳,以秒为单位 | 4 |
bits | 紧凑格式的当前 目标 | 4 |
nonce | 32 位数字 | 4 |
主链中的每个区块以及引用的每个叔块都必须验证以下规则:
abs( bitcoinMergedMiningHeader.timestamp - rskBlockHeader.timestamp) < 300
Abs() 函数返回绝对值。数值以秒表示。
我们假设经济节点在收到付款时会等待一定数量的区块进行确认。区块的数量可以是固定的,也可以取决于付款的金额,但这与累积难度无关。根据攻击时间,双花攻击有两种变体:一种是受害者确认交易后开始的攻击,另一种是在受害者确认交易之前开始的攻击。前者称为确认后回滚 (RAC),后者称为确认期间回滚 (RDC)。区分这一点至关重要。RSK 已经有工具可以检测和避免 RDC 攻击。Armadillo 系统监控比特币区块链并警告并行分叉。此外,节点可以监控总活动哈希率并检测突发下降。SFAMM 共识变更(本 RSKIP 中未讨论)还提供了一种防止 RDC 攻击的新方法。但是,在 RAC 攻击中,攻击是在攻击者已经兑现了第一笔花费之后才开始的,并且只剩下第二笔(双重)花费。要在兑现后回滚区块链,攻击者需要挖掘过去时间戳的区块或在区块之间留下较大的时间间隔。很容易惩罚包含时间戳差距的分叉,正如 SFAMM 提出的那样,因此攻击者所需的累积工作量要高得多。攻击者剩下的唯一选择是挖掘过去时间戳的区块。
RSK 可以访问加密经济时间戳系统,比特币区块的时间戳需要大致准确才能被比特币共识接受,但 RSK 目前尚未使用此功能。在此 RSKIP 中,我们建议强制 RSK 时间戳与比特币时间戳匹配,误差范围为 5 分钟。如果联合矿工想要作弊,它必须放弃从比特币挖矿中获得的利润并创建无效的比特币区块。
矿工通常至少每分钟更新一次其时间戳,因此 5 分钟是一个宽松的容差。由于通常比特币时间戳是由矿工选择的,而 RSK 时间戳是由矿池服务器选择的,因此 RSK 不应施加更低的容差。
此更改是硬分叉,因此必须更新所有完整节点。不需要更新 SPV 轻客户端和区块浏览器。
bitcoinMergedMiningHeader.timestamp = 1300 且 rskBlockHeader.timestamp = 1000 验证失败
bitcoinMergedMiningHeader.timestamp = 1300 且 rskBlockHeader.timestamp = 1001 通过验证
bitcoinMergedMiningHeader.timestamp = 1001 且 rskBlockHeader.timestamp = 1300 通过验证
需要修改 rskj 代码以添加此规则。可以将此规则添加为单独的类或修改 BlockTimeStampValidationRule 类。
此 RSKIP 通过强制攻击者在交易的受害者首次确认之前挖掘私有分叉来保护 RSK 网络免受一组减少的双花攻击,并且仅当受害者等待的确认区块数高于 120 时才有效。
双花攻击的其他变体仍然需要进行额外的更改才能防止。SFAMM 模型要求的这些其他更改将在其他 RSKIP 中指定。
通过 CC0 放弃版权和相关权利。
- 原文链接: github.com/rsksmart/RSKI...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!