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