Transaction-Malleability

交易延展性“攻擊”矢量圖

  • June 17, 2015

以下任何交易延展性“攻擊”向量目前是否可行?

從以下位置更改腳本:

OP_PUSHDATA <sig> OP_PUSHDATA <pubkey>

到以下之一:

1) OP_1 OP_SHA1 OP_DROP OP_PUSHDATA <sig> OP_PUSHDATA <pubkey>
2) OP_PUSHDATA <sig> OP_PUSHDATA <pubkey> OP_1 OP_SHA1 OP_DROP
3) OP_PUSHDATA <sig> OP_PUSHDATA <pubkey> OP_NOP

這樣相應的 scriptpubkey 仍然評估為 true:

OP_DUP OP_HASH160 OP_PUSHDATA <address> OP_EQUALVERIFY OP_CHECKSIG

我不知道這是否由bip 62中的第 6 點處理:

  1. 多餘的 scriptSig 操作在腳本的開頭添加額外的數據推送,這些數據不會被相應的 scriptPubKey 消耗,也是延展性的來源。

從程式碼來看,它看起來已經被處理過了,但是我的 C++ 知識不是很好……

第(6)點並沒有消除這種延展性的來源。相反,BIP62 的第 (2) 點不允許您建議的所有三個修改。BIP62 描述了這個問題:

scriptSig 中的非推送操作scriptSig 中導致預期數據推送但不僅僅是該數據推送的任何腳本操作序列都會導致具有相同有效性的替代交易。

以及建議的解決方案:

scriptSig 中的非推送操作 scriptSig 中只允許數據推送。評估任何其他操作會使腳本評估為假。請參閱參考:推送運算符。

引用自:https://bitcoin.stackexchange.com/questions/37980