什麼是延展性(Malleability,可鍛性)

原文:http://8btc.com/forum.php?mod=viewthread&tid=23878&page=1#pid270878php

 

1. 什麼是延展性(Malleability,可鍛性):「延展性」指的是「在材質自己無損的前提下,能夠經過外力改變爲特定形狀」的性質。
<ignore_js_op>網絡



顯而易見,黃金是具備延展性的。因爲真實性比較容易驗證,於是不管形狀如何改變,只要驗證了含金量相同,那麼能夠認爲其價值相同。

比特幣的交易(TXID)也具備延展性:比特幣系統經過數字簽名來認證全部者的權益,從而模擬了黃金的某些特性(幾乎沒法僞造)。只要保護好私鑰,簽名了交易後,其餘人沒法僞造或篡改交易的實質內容(好比,收款地址和收款金額)。可是,交易的標識(TXID)——含有數字簽名腳本的交易的哈希值——有方法能夠改變。

嚴格來講,並非比特幣的交易具備延展性,而是模擬黃金屬性的」數字簽名「具備延展性——能夠改變」數字簽名「的外觀,而不影響數字簽名的效力。這是如何實現的呢?

」數字簽名「實質上是一個比較複雜數學計算——有限域下的加法和數乘運算。輸入和輸出實際上都是一些很是大的整數。在數學計算中,整數最高位前面的」0「是能夠忽略的,好比 「100」 和 「0100」等價,然而這兩種表示形式的哈希值不同。另外,有限域下涉及到模運算,不如模爲7的有限域下,4和11是等價的,但顯然這兩個數的哈希值也不一樣。
也就是說,具備在數學運算上等價的數字簽名,能夠存在多種輸出格式,這就使得「數字簽名」具備了延展性。

因爲生成比特幣的交易標識(TXID)的哈希運算中包含了數字簽名腳本,因此比特幣的交易也一樣就具備了延展性。


2. 交易延展性攻擊:
交易延展性攻擊的對象通常是交易所(有人工客服)。由於延展性攻擊沒法篡改交易的實質內容,只要交易廣播出去了,由於簽名有效,最終仍是會被確認的,於是黑客沒法直接靠交易延展性攻擊來獲利。可是經過策劃,能夠有這樣一種方式:
先了解某一交易所外聯的節點主要有那些,DDOS癱瘓掉它們並僞造出一些節點和交易所的節點進行通信。同時向交易所發起提幣請求。當本身的節點偵測到交易所轉給本身的交易(此時拿到了交易所的數字簽名了)時,先扣留這些交易不對外廣播,或是利用交易可鍛性修改TXID,而後向人工客服投訴,聲稱款項未到賬。若是交易所在技術實現上存在漏洞,僅根據TXID來檢索對應交易,此時可能會誤覺得發送失敗,可能經過人工方式又重發一遍(極可能使用了其餘UTXO)。黑客在受到第二份交易數據後,把兩筆交易向全網廣播,這樣就收到兩份錢。


3. 防範:
一是當使用TXID查找不到對應的交易時,須要用TXIN_OUTPOINT再查一下;
二是若是確實須要重發,引用的UTXO必定要與原來保持一致,把這種麻煩事兒交給比特幣網絡來處,系統規則確保了最終只會確認其中的一個(不會出現雙花)。對象

相關文章
相關標籤/搜索