【幣圈不定期更新的日常】聊一聊比特幣為什么要部署隔離驗(yàn)證

簡(jiǎn)介

之前的文章,為大家介紹了閃電網(wǎng)絡(luò)的原理,并且特別強(qiáng)調(diào)了閃電網(wǎng)絡(luò)的應(yīng)用,一定要基于隔離驗(yàn)證的部署。今天就來(lái)講講,隔離驗(yàn)證的技術(shù)原理、解決的問(wèn)題、隔離驗(yàn)證帶來(lái)的好處等等。

隔離驗(yàn)證技術(shù)原理

我們先為大家展示一下比特幣交易的區(qū)塊結(jié)構(gòu),如下圖所示:

實(shí)施隔離驗(yàn)證前的區(qū)塊數(shù)據(jù)結(jié)構(gòu)

我們拋去其他字段,重點(diǎn)看下Transactions字段,Transactions字段包含該區(qū)塊的多筆交易,每筆交易的數(shù)據(jù)結(jié)構(gòu)如下圖:

實(shí)施隔離驗(yàn)證前的交易數(shù)據(jù)結(jié)構(gòu)

我們順便抓取一筆的交易實(shí)例看看(未實(shí)施隔離驗(yàn)證):

{??????????

? ? "version":?1,??????????

? ? "locktime":?0,??????????

? ? #交易輸入(input)部分??????

? ? "vin":?[???????????????????

? ? ? ? ? ? ? ? ? {??????????????

? ? ? ? ? ? ? ? ? ? ? ? #輸入引用的交易(transaction)HASH? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ?"txid":?"7957a35fe64f80d234d76d83a2a8f1a0d8149a41d8......",?

? ? ? ? ? ? ? ? ? ? ? ? ?#引用交易中的UTXO索引? ??

? ? ? ? ? ? ? ? ? ? ? ? ?"vout":?0,???????????????????????????????????????????????????????

? ? ? ? ? ? ? ? ? ? ? ? ? #解鎖腳本,用于解鎖UTXO的腳本(這是可以花費(fèi)這筆UTXO的關(guān)鍵信息)

? ? ? ? ? ? ? ? ? ? ? ? ?"scriptSig":?"3045022100884d142d86652a3f47ba4746ec71....",? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ?"sequence":?4294967295????????????????????

? ? ? ? ? ? ? ? ? ? ?}??????????

? ? ? ? ?],??????????

? ? ? ? ?#交易輸出(output)部分??????

? ? ? ? ?"vout":?[?????????????????

? ? ? ? ? ? ? ? ? ? ? ? {??????????????

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #第一個(gè)輸出的比特幣數(shù)量??????????

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "value":?0.01500000,??????????????????????

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #鎖定腳本,后續(xù)的交易如要使用該輸出,必須解鎖鎖定腳本? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "scriptPubKey":?"OP_DUP?OP_HASH160?ab68025513c3dbd2f7.."? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?},? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ? ?{??????????????

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? #第二個(gè)輸出的比特幣數(shù)量??????????

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "value":?0.08450000,??????????????????????

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?"scriptPubKey":?"OP_DUP?OP_HASH160?7f9b1a7fb68d60c536c2...",? ? ??

? ? ? ? ? ? ? ? ? ? ? ? ?}??????????

? ? ? ? ? ? ?]? ? ? ?

}

其中,scriptSig解鎖腳本就是我們今天的主角,解鎖腳本是tx input引用上一筆output的合法性憑據(jù),是私鑰簽名的結(jié)果。交易hash在計(jì)算時(shí),需要包含scriptSig解鎖腳本的內(nèi)容。然而,比特幣的橢圓曲線簽名算法(ECDSA)具有對(duì)稱性,簽名s和簽名s'都可以用來(lái)驗(yàn)證交易的合法性,但是由此產(chǎn)生的交易hash卻不同。交易hash的不一致就會(huì)產(chǎn)生安全問(wèn)題,下節(jié)講的延展性攻擊就是最大的問(wèn)題之一。為了解決由于簽名改變引起的交易hash改變的問(wèn)題,隔離驗(yàn)證技術(shù)應(yīng)運(yùn)而生。

首先,我們來(lái)看看,升級(jí)了隔離驗(yàn)證的交易數(shù)據(jù)結(jié)構(gòu)有哪些變化?如下圖所示,增加了flag、witnesses等字段。Tx In的scriptSig解鎖腳本被放入了witnesses字段中,在計(jì)算交易hash時(shí),無(wú)論解鎖腳本的內(nèi)容如何變更,都不會(huì)影響交易hash的結(jié)果。要驗(yàn)證交易合法性,就去查找witnesses里面的內(nèi)容即可。

實(shí)施隔離驗(yàn)證后的交易數(shù)據(jù)結(jié)構(gòu)

延展性攻擊

攻擊原理

攻擊者監(jiān)聽(tīng)比特幣網(wǎng)絡(luò)中的交易,發(fā)現(xiàn)攻擊目標(biāo)交易,則利用橢圓曲線的對(duì)稱性更改交易input中的簽名,生成有相同input和output但交易hash不同的新交易,并廣播到網(wǎng)絡(luò)中,實(shí)行雙花攻擊。

攻擊影響

延展性攻擊并不會(huì)影響交易的最終確認(rèn)結(jié)果,但是很可能對(duì)錢包和交易所造成雙花攻擊。

1)充幣:黑客發(fā)起兩筆不同hash的相同轉(zhuǎn)賬A和B,A和B可能先后會(huì)出現(xiàn)在不同的區(qū)塊中(其中,某個(gè)區(qū)塊最后會(huì)成為孤塊并廢棄),而錢包和交易所如果區(qū)塊的確認(rèn)上賬次數(shù)設(shè)置的不夠大,在區(qū)塊回滾前就確認(rèn)上賬,就會(huì)讀到這兩筆充值交易,為用戶上兩次賬,造成雙花。

2)提幣:黑客發(fā)起提幣交易,交易所構(gòu)造完成提幣交易A并廣播。黑客抓取廣播后的交易A,更改簽名后生成不同hash的相同交易B。如果交易B率先被確認(rèn),黑客就能夠拿著交易A的hash找交易所,說(shuō)沒(méi)收到提幣。交易所如果確認(rèn)機(jī)制做的不好,就會(huì)再次提幣,造成雙花。

隔離驗(yàn)證的好處

1)杜絕延展性攻擊。隔離驗(yàn)證部署后,一筆交易有相同的input和output,則hash是唯一確認(rèn)的,就不存在延展性攻擊的可能。

2)支持閃電網(wǎng)絡(luò)架構(gòu)。上文提到,閃電網(wǎng)絡(luò)是一系列未上鏈交易組成的轉(zhuǎn)賬記錄,延展性攻擊會(huì)嚴(yán)重破壞閃電網(wǎng)絡(luò)的安全性。而隔離驗(yàn)證的部署,則為閃電網(wǎng)絡(luò)的大規(guī)模應(yīng)用提供了安全的基礎(chǔ)環(huán)境。

3)區(qū)塊容納更多的交易。因?yàn)楦綦x驗(yàn)證的部署,每個(gè)區(qū)塊能容納的交易,實(shí)際上得到了翻倍的增加,區(qū)塊的大小由原來(lái)的1M提升到3M,對(duì)比特幣交易處理能力有顯著的提升。

參考文獻(xiàn)

隔離驗(yàn)證前后交易數(shù)據(jù)結(jié)構(gòu)的變更:https://bitcoin.stackexchange.com/questions/83683/how-does-the-structure-of-a-segwit-block-differ-from-a-non-segwit-block

比特幣交易數(shù)據(jù)結(jié)構(gòu):https://en.bitcoin.it/wiki/Transaction#General_format_.28inside_a_block.29_of_each_input_of_a_transaction_-_Txin

比太公開(kāi)課講隔離驗(yàn)證:https://www.8btc.com/article/79496

延展性攻擊原理:https://blog.csdn.net/m3o3n3/article/details/72901642

延展性攻擊—門頭溝倒閉的罪魁禍?zhǔn)祝?a target="_blank" rel="nofollow">https://blog.csdn.net/chunlongyu/article/details/80417356

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容