交易延展性攻擊原理

買賣虛擬貨幣


數字世界攻防是最有意思的事情,通讀了延展性攻擊原理後,任何使用類似演算法和簽名結構的數字貨幣都會面臨這個攻擊風險,雖然這個攻擊不會實質性改變交易,但是足夠影響一些心急的傳送者,這就是攻防的魅力,永遠接受挑戰,越戰越強

交易延展性

交易的延展性,也被稱作為是可鍛性,即同樣一個東西,它的本質和質量都沒有改變,但是它的形狀改變了。而這個可鍛性,會造成交易id——txid的不一致,從而導致使用者找不到傳送的交易。

現在比特幣的交易資料格式中,將交易簽名部分也納入了整體交易中,最後對整體交易做雜湊,而交易簽名又可以有多種寫法,攻擊者篡改了它們,它們作用上是一樣的,但是位元組發生了變化,導致這個簽名不一樣了,前段時間甚至有一個礦池挖出了一個包含所有交易都是延展攻擊了的,給一些應用帶來了麻煩。

txid發生變化可能會導致一些應用在查詢txid時找不到,從而影響一些錢包充值或提現的狀態,給運營者和使用者帶來麻煩,隔離見證是為了解決這個問題而提出的,將交易資料和簽名資料分開,這樣一筆交易的txid一定唯一。

攻擊原理

延展性攻擊者偵聽比特幣p2p網路中的交易,利用交易簽名演算法的特徵修改原交易中的input 簽名, 生成擁有一樣input和output的新交易,然後廣播到網路中形成雙花,這樣原來的交易將有一定的概率不能被確認,造成不可預料的後果。

此攻擊的原理在於,ecdsa演算法生成兩個大整數r和s並組合起來作為簽名, 可以用來驗證交易。而r和bn-s 也同樣可以作為簽名來驗證交易(bn=0xffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141). 這樣,攻擊者拿到一個交易,將其中inputsig 的r, s 提取出來, 使用 r, bn-s 生成新的inputsig, 然後組成新的交易,擁有同樣的input和output,但是不同的txid. 攻擊者能在不掌握私鑰的情況下幾乎無成本地成功地生成了合法的交易。

延展性攻擊並不能阻止實際交易的傳送,該到的還是會到,但被網路確認的不一定是原來預想的那個txid, 因此會對比特幣網路的活動產生一些影響。例如alice透過線上錢包給bob傳送了一筆交易,並把txid傳送給bob說,看我給你發了多少比特幣,但是這個交易被延展性攻擊並最終也沒有確認,bob透過此txid卻沒有發現這比交易,bob就說,”alice, 你這個騙子”。

受影響更大的是交易所, 銀行之類的離線錢包網站,如果沒有好好程式設計實現,甚至會直接搞亂離線錢包的帳目,引起惡劣的影響。比如通常離線錢包為了方便使用者並不等待六個確認才實際充值而是一個確認就實際充值,但是有可能原始交易和攻擊的交易都在不同的block中出現在離線錢包的後臺錢包中(這些block可能成為orphan但是畢竟曾經出現過),這樣就會給某些賬戶衝幣兩次或多次, 並給惡意攻擊者提現留出時間。應對方法是賬戶充值需要等待2或者以上的個確認。

充值的後果可以被管理員手動改回,更大的影響發生在提現過程中,提現後的txid會被記錄下來,用來隨後查詢blockchain 跟蹤狀態,如果被延展性攻擊的交易搶先得到確認, 則提現的txid一直不能被確認,時間久了會被認為失敗,如果策略是失敗後重發提現就悲劇了,相信每家交易所銀行都有聯絡客戶低聲下氣索回因失誤而發出賬款的經歷。這種情況下的解決方法是,遇到交易無法確認就停止,報錯誤並等待手動處理,或者,我們可以自己生成一個延展性交易,然後獲取新的txid, 查詢是否傳送成功。能生成的txid數量有多少呢?一共有exp(2, input數量)個,因為每個input都有改簽名或者不改兩種可能, 通常不是一個大數目。

免責聲明:

  1. 本文版權歸原作者所有,僅代表作者本人觀點,不代表鏈報觀點或立場。
  2. 如發現文章、圖片等侵權行爲,侵權責任將由作者本人承擔。
  3. 鏈報僅提供相關項目信息,不構成任何投資建議

推荐阅读

;