名词解释:比特币“交易可锻性”(Transaction Malleability)

名词解释:比特币“交易可锻性”(Transaction Malleability) 

       比特币世界很多名词都是比喻,如挖矿,矿机,矿工等,这里的“可锻性”也是个比喻,

  在讨论“交易可铸锻性”前,我们先看看“金币的可铸锻性”,一个金币在使用中,被人用锤子砸了几下,凹了几处,变得不是很圆。这个金币的本质含金量没变,只是外观看上去与标准的金币有些不同,这个金币依旧是一个被认可的金币。这就是“金币的可锻性”。

 

  “交易可锻性”指的是,比特币支付交易发出后、确认前可被修改(准确说是被伪造复制),用户签名过的信息不能更改。

  原因是:用户签名的内容不是整个交易的信息,只是交易信息中的核心重要信息,如发送方,接受方,金额等。在不改变用户签名内容的前提下,对交易信息做些微调,可产生一个全新的交易字符串,由此产生新的交易HASH值,也就是交易ID Transaction ID, 由于签名内容没有更改,修改过的“交易”可通过挖矿程序确认写入块链(block chain)。

 

  对交易信息的微调有两种方式,

  第一,修改签名字符串本身。首先,多数挖矿程序是用openssl 库校验用户签名,而openssl兼容多种编码格式,还有,就是椭圆曲线数字签名算法(ECDSA)本身,签名(r,s) 和 签名(r,-s(mod n))都是有效的。所以,对签名字符串本身的表现方式做些调整,依旧是有效签名。

  第二,修改交易信息中的scriptSig的值,scriptSig中含有签名字符串,scriptSig本身不含在签名内容里。scriptSig做些适当的修改,也不影响交易信息的验证。

 

  注意,以上两种调整,都不会改变签名的核心内容,但是却产生一个新的交易字符串,由此产生新的交易HASH值。交易的本质内容(发方、收方、金额)没变,外观看上去确变了。

 

  从交易信息发出到最终确认通常有约10分钟的时间,时间上,伪造的交易信息产生于正品交易信息之后。由于挖矿程序的确认过程是一个随机的过程,后产生的伪造的交易信息可能首先通过确认,这时正品交易信息反而被认为是重复支付被丢弃。发送方看到自己发的正品交易没通过校验,误以为支付失败(其实已成功支付),再次发送交易,支付方就支付了多余的币。

 

 

 请参考:
讨论:MT GOX,Bitstamp 暂停比特币提款事件分析 
文章:

Bitstamp 因遭受"拒接服务攻击"暂停比特币提现分析
Mt.Gox 暂停比特币提款事件分析

猜你喜欢

转载自hongqing.iteye.com/blog/2017504
今日推荐