level 9
vatten2013
楼主
出现这次事故的根源在于交易数据的签名和签名完成以后的哈希值(也就是交易编号TXID)完全是两回事
打个简单的比方,交易的操作是:“从地址A转10个币到地址B”
签名就是把“从地址A转10个币到地址B”这个操作用地址A的私钥签名,得到一个签名SIGN
然后这个签名和交易的操作合并,形成“从地址A转10个币到地址B SIGN”,进行哈希运算,就得到TXID,然后向网络广播
而我只需要在这串字符中添个别的字符,比如说“0 从地址A转10个币到地址B SIGN”再做哈希运算,就可以得到一个不同的TXID2
这个TXID2虽和TXID不同,里面包含的交易却是相同的,如果抢先被发送到网络,就有可能被写入新的区块,从而导致TXID2成功发送,而TXID再被发送时就无效了,因为币已经被发送了。交易所发现TXID没有成功发送,就会反复发送,久而久之就堆积起大量无法确认的交易
因为所有数据一旦写入区块后就不可再更改,所以这个问题发生在数据写入区块之前也就是两个区块间的9分钟
这个情况的解决也简单,就是TXID在确认之前不可以被认为是可靠的系统交易编号,查询交易时必须通过地址来查询。但通过地址查询,如果出现连续100笔全都是一样金额的支付,就很难区分到底哪笔才是刚才发送的,所以也可以利用已经确认的交易的TXID,那些是不可篡改的
今天的消息证明,几乎所有的交易所都存在这个问题。自昨天信息被披露后,马上有黑客利用TXID可修改的特性大量修改来自交易所发布的交易制造混乱,但这种混乱并不会对任何账户中的资金造成实质性影响,只是交易所核对交易时出现了困难,所以交易所暂时停止比特币转账,对私人用户的转账来说影响不大
这和去年三月份的分叉事件一样,属于比较严重的事故,再次证明交易所是整个比特币生态系统中最薄弱的环节,这个事故对于私人用户之间转账来说几乎没有影响
2014年02月12日 00点02分
1
打个简单的比方,交易的操作是:“从地址A转10个币到地址B”
签名就是把“从地址A转10个币到地址B”这个操作用地址A的私钥签名,得到一个签名SIGN
然后这个签名和交易的操作合并,形成“从地址A转10个币到地址B SIGN”,进行哈希运算,就得到TXID,然后向网络广播
而我只需要在这串字符中添个别的字符,比如说“0 从地址A转10个币到地址B SIGN”再做哈希运算,就可以得到一个不同的TXID2
这个TXID2虽和TXID不同,里面包含的交易却是相同的,如果抢先被发送到网络,就有可能被写入新的区块,从而导致TXID2成功发送,而TXID再被发送时就无效了,因为币已经被发送了。交易所发现TXID没有成功发送,就会反复发送,久而久之就堆积起大量无法确认的交易
因为所有数据一旦写入区块后就不可再更改,所以这个问题发生在数据写入区块之前也就是两个区块间的9分钟
这个情况的解决也简单,就是TXID在确认之前不可以被认为是可靠的系统交易编号,查询交易时必须通过地址来查询。但通过地址查询,如果出现连续100笔全都是一样金额的支付,就很难区分到底哪笔才是刚才发送的,所以也可以利用已经确认的交易的TXID,那些是不可篡改的
今天的消息证明,几乎所有的交易所都存在这个问题。自昨天信息被披露后,马上有黑客利用TXID可修改的特性大量修改来自交易所发布的交易制造混乱,但这种混乱并不会对任何账户中的资金造成实质性影响,只是交易所核对交易时出现了困难,所以交易所暂时停止比特币转账,对私人用户的转账来说影响不大
这和去年三月份的分叉事件一样,属于比较严重的事故,再次证明交易所是整个比特币生态系统中最薄弱的环节,这个事故对于私人用户之间转账来说几乎没有影响