2014年,Mt. Gox(门头沟交易所)因为黑客的攻击导致公司破产的结局。而这种攻击最终被证实为是“交易延展性攻击”。
本期《晓说区块链》,陈晓东先生(维基链首席技术官)将围绕“交易延展性攻击”的原理和相应的解决技术,为大家详细解读。
网友:比特币中数字签名本身不具有完整性,容易导致可伸缩性攻击,是什么意思啊?
大体的是知道区块中的签名被修改之后,可以被编码成和以前一样的,然后仍然能被以前签名对应的公钥验证,但是想不通,就只是修改下签名,又没有修改交易内容,攻击者可以从中获取什么利益呢?
陈晓东:为什么交易发出后,可能被篡改呢,不是有签名吗?
其中一个原因就是多数挖矿程序是用openssl库校验用户签名,然而openssl兼容多种编码格式。
还有,就是椭圆曲线数字签名算法(ECDSA)本身,签名(r,s) 和 签名(r,-s(mod n))都是有效的。所以,对签名字符串本身的表现方式做些调整,依旧是有效签名。
我们知道,每个交易都有一个对应的Transaction ID,也就是对整个交易计算出来的一个Hash,也是该Transaction的唯一标识。现在你对签名做了微调,签名还是有效签名,但是Transaction ID却因此改变了!!!
而黑客就是利用了这个特性,对交易所实施了攻击,下面就来看一下这个攻击过程是怎样的:
Step1> 黑客自己有1个账号,在交易所开了1个账号,并把自己的bitcoin转进去;
Step2> 黑客申请提现(withdraw),交易所发起1笔转账交易Transaction;
Step3> 这笔交易被广播到网络上。但是在还未打包进区块链之前,黑客收到这笔Transaction,并且稍微更改了scriptSig的格式,生成1笔新的交易广播出去,此时TxID已经变了;
Step4> 黑客的这笔新交易被区块链接收了, 然后向交易所投诉,说它没收到钱。交易所根据自己生成的Transaction ID查询该笔交易,发现在网络上查询不到, 会再次转账给黑客,也就是double withdraw! 同1笔钱,被黑客提现了2次,甚至多次! 导致交易所蒙受巨大损失。
Mt. Gox(门头沟交易所)在2014年因这种欺诈交易攻击导致了公司倒闭的悲惨结局!!!不过大部分的交易所因此也学到了教训,不会轻易根据用户提供的TxID来判断是否交易已经失败或者成功,而是需要根据交易的发送地址和接收地址的余额变化来判断交易是否真实发生。
总结:
交易延展性攻击之所以会发生,是因为TxID会变(而这是1个Transaction的唯一标识)。而TxID之所以会变,是因为里面的scriptSig可以被调整。
如果有办法保证TxID在整个交易过程中,都不可能被改变,那也就解决了这个问题,而这就是后来的"隔离见证" (SegWit)技术解决了这个问题。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。