由亚洲
DACA
区块链协会牵头,清华大学iCenter
区块链技术公开课一期学员以及亦来云技术开发团队,于今日在清华大学
iCenter
召开了关于“防重放攻击”的研讨会议,通过此会议我们进一步提出了关于“防重放攻击”的具体实施方案及建议,供社区同仁参考并指证,希望大家一起推进区块链行业的共同发展。
防重放攻击研讨会现场
具体方案如下:
一、什么是重放攻击
重放攻击是说在比特币硬分叉后,两个链上都有继承自原链的
utxo(
未花费交易
)
,我们假定分叉后的链一个叫做原链
,
一个叫做新链,如果在原链上发生一笔由
Alice
到
Bob
的转账,交易中的
vin(
输入交易
)
用的是继承自分叉前的
utxo
,那么这笔交易如果被发送到新链上面,新链的节点会验证通过这笔交易,交易也会被挖到区块的节点打包到区块中,并且被其他节点验证通过,造成的结果就是
Alice
在两条链上的代币资产都会减少。此过程反过来从新链到原链发起攻击也成立。
二、
DACA
的防重放攻击方案
之所以重放会成功,是因为重放交易满足了以下两个必要条件:
1.
被花费的
utxo
都继承自分叉前,并且在两条链上都还没有被花费。
2.
两条链的交易签名验证方式相同
对于第一个条件,可以通过分叉后将自己的所有比特币资产(也就是所有
utxo
)全部转移到自己新的比特币地址的方式来避免被攻击,当然这会损失一定的手续费,而且需要用户自己操作。
我们的防重放方案是想办法让第二个条件不成立,就是说修改交易的签名和验证逻辑,让分叉后的两个链的的交易签名互相不认,来达到防重放的目的。
代码修改说明:
1
、修改
unit256.h
,为
class base_blob
增加
negate
方法,此方法用于将
base_blob
类型实例中存储的内容按
bit
取反,比如
01001
取反后变为
10110