什么是延展性(Malleability,可鍛性)
原文:http://8btc.com/forum.php?mod=viewthread&tid=23878&page=1#pid270878
1. 什么是延展性(Malleability,可鍛性):“延展性”指的是“在材質(zhì)本身無損的前提下,可以通過外力改變?yōu)樘囟ㄐ螤?rdquo;的性質(zhì)。
<ignore_js_op>
顯而易見,黃金是具有延展性的。由于真實性比較容易驗證,因而無論形狀如何改變,只要驗證了含金量相同,那么可以認為其價值相同。
比特幣的交易(TXID)也具有延展性:比特幣系統(tǒng)通過數(shù)字簽名來認證所有者的權(quán)益,從而模擬了黃金的某些特性(幾乎無法偽造)。只要保護好私鑰,簽名了交易后,其他人無法偽造或篡改交易的實質(zhì)內(nèi)容(比如,收款地址和收款金額)。但是,交易的標識(TXID)——含有數(shù)字簽名腳本的交易的哈希值——有方法可以改變。
嚴格來說,并不是比特幣的交易具有延展性,而是模擬黃金屬性的”數(shù)字簽名“具有延展性——可以改變”數(shù)字簽名“的外觀,而不影響數(shù)字簽名的效力。這是如何實現(xiàn)的呢?
”數(shù)字簽名“實質(zhì)上是一個比較復(fù)雜數(shù)學(xué)計算——有限域下的加法和數(shù)乘運算。輸入和輸出實際上都是一些非常大的整數(shù)。在數(shù)學(xué)計算中,整數(shù)最高位前面的”0“是可以忽略的,比如 “100” 和 “0100”等價,然而這兩種表示形式的哈希值不一樣。另外,有限域下涉及到模運算,不如模為7的有限域下,4和11是等價的,但顯然這兩個數(shù)的哈希值也不同。
也就是說,具有在數(shù)學(xué)運算上等價的數(shù)字簽名,可以存在多種輸出格式,這就使得“數(shù)字簽名”具有了延展性。
由于生成比特幣的交易標識(TXID)的哈希運算中包含了數(shù)字簽名腳本,所以比特幣的交易也同樣就具有了延展性。
2. 交易延展性攻擊:
交易延展性攻擊的對象一般是交易所(有人工客服)。因為延展性攻擊無法篡改交易的實質(zhì)內(nèi)容,只要交易廣播出去了,因為簽名有效,最終還是會被確認的,因而黑客無法直接靠交易延展性攻擊來獲利。但是通過策劃,可以有這樣一種方式:
先了解某一交易所外聯(lián)的節(jié)點主要有那些,DDOS癱瘓掉它們并偽造出一些節(jié)點和交易所的節(jié)點進行通訊。同時向交易所發(fā)起提幣請求。當自己的節(jié)點偵測到交易所轉(zhuǎn)給自己的交易(此時拿到了交易所的數(shù)字簽名了)時,先扣留這些交易不對外廣播,或是利用交易可鍛性修改TXID,然后向人工客服投訴,聲稱款項未到帳。如果交易所在技術(shù)實現(xiàn)上存在漏洞,僅根據(jù)TXID來檢索對應(yīng)交易,此時可能會誤以為發(fā)送失敗,可能通過人工方式又重發(fā)一遍(很可能使用了其他UTXO)。黑客在受到第二份交易數(shù)據(jù)后,把兩筆交易向全網(wǎng)廣播,這樣就收到兩份錢。
3. 防范:
一是當使用TXID查找不到對應(yīng)的交易時,需要用TXIN_OUTPOINT再查一下;
二是如果確實需要重發(fā),引用的UTXO一定要與原來保持一致,把這種麻煩事兒交給比特幣網(wǎng)絡(luò)來處,系統(tǒng)規(guī)則確保了最終只會確認其中的一個(不會出現(xiàn)雙花)。
總結(jié)
以上是生活随笔為你收集整理的什么是延展性(Malleability,可鍛性)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FullCalendar日历控件使用小结
- 下一篇: 古典密码-维吉尼亚密码Vigenere