導讀
數字貨幣本質上是一串特殊的字符串,可以無限復制。如果一名礦工短暫控制了超過50%的算力,向交易所發起轉賬,同時把同一筆數字貨幣轉賬給自己。因為手頭有足夠的算力,所以兩筆交易都被寫進區塊,成為合法交易,這就是“雙花攻擊”。
比特幣網絡自誕生以來并穩健運行至今,已證明:在沒有結算中心的對等網絡,點對點交易也能拒絕雙花攻擊。所有的比特幣交易記錄都被保存在區塊鏈上,2008年在中本聰描述比特幣原型的論文里提到,他使用了一種名為梅克爾樹(Merkle Tree,縮寫MT)的數據結構對每一個區塊里的所有交易做一次簡略記錄,梅克爾樹能夠用較少的字節去表達極大量的信息。
梅克爾樹的結構是個滿二叉樹,因此要求交易數量必須是2n。中本聰通過引入“無效卻必要的”多余信息來解決這個問題,所付出代價是此多余信息可能會被攻擊者利用,實施雙花攻擊。
本文先介紹梅克爾樹的基本結構,生成節點的規則,然后用一個例子來說明如何為比特幣交易構造梅克爾樹,最后解釋了比特幣如何通過UTXO的唯一編號來避免因梅克爾樹可能引起的雙花威脅。
庫里因推廣“無聊猿”BAYC遭投資者起訴:12月13日消息,NBA金州勇士隊球星史蒂芬·庫里又因為推廣NFT系列“無聊猿”Bored Ape Yacht Club面臨新的加密訴訟。據悉,兩名購買ApeCoin的投資者在洛杉磯聯邦法院起訴了“無聊猿”BAYC NFT系列母公司Yuga Labs以及公司高管、董事會成員、以及史蒂芬·庫里、麥當娜、帕麗斯·希爾頓、塞雷娜·威廉姆斯、賈斯汀·比伯、吉米·法倫等一眾名人。
據悉,由于FTX Ventures是Yuga Labs的投資方,作為Ape DAO董事會成員的Amy Wu利用她在加密貨幣交易平臺FTX的關系招募史蒂芬·庫里以推動BAYC的銷售,這些所謂的“名人代言”均未“披露相關的潛在經濟利益和關系”。[2022/12/13 21:41:06]
知識點1:
哈希函數是由數學家或者密碼學家精心設計的一種數學運算規則,它可以輸入任意長度的數據,而輸出結果(即哈希值)的長度保持不變,并且滿足:
1)單向運算:只能計算輸入得到輸出,不能逆向計算輸出得到輸入;
動態 | 朝陽區今日上線“無訟朝陽”在線平臺 利用區塊鏈技術處理房產糾紛:據北京日報消息,11月13日上午,朝陽法院法官遠程對一起房產分割案在線進行了“一站式”司法確認,整個過程都是通過一個名為“無訟朝陽”的在線平臺實現的。“無訟朝陽”是一款一站式多元解紛在線平臺,相關系統由朝陽區法院負責研發,調解組織網絡體系由朝陽區司法局負責支撐。該平臺今日上線,標志著全市首個應用區塊鏈技術的矛盾糾紛源頭治理在線平臺正式啟用。[2019/11/13]
2)沖突避免:無法找到兩個不一樣的輸入,而它們的哈希值卻相同。
哈希函數可以說是區塊鏈最最核心的技術之一,另外一個是非對稱加密。正是這二個性質確保了比特幣像黃金一樣難以獲得,經過大量的運算才能得到某個正確的哈希值,使得該哈希值比其它字符串更加珍貴,從而獲得價值屬性。這是哈希函數在比特幣挖礦中的應用,但這并不是本文的重點。
知識點2:
梅克爾樹又被稱作哈希樹,因為在這種樹狀數據結構中,每個節點的標簽(或稱作值)都是一串哈希值。按照從左向右的順序,將所有子節點的哈希串聯成一個新的長字符串,結果作為哈希函數的輸入,經計算得到父節點的標簽。
動態 | 永恒之藍下載器木馬再次更新,以“無文件”方式進行門羅幣挖礦:4月17日,騰訊御見發文稱,騰訊安全御見威脅情報中心檢測到永恒之藍下載器木馬在4月16日再次更新。更新后啟用了新的C2域名,在感染計算機上安裝計劃任務后門持續拉取惡意代碼執行,并通過新的域名下載Powershell攻擊模塊進行橫向移動,上傳攻擊成功的目標信息到服務器,同時下載挖礦模塊以“無文件”方式進行門羅幣挖礦。最新版本病感染后,會在機器上安裝兩個計劃任務后門,用于持續從服務器拉取惡意代碼執行。[2019/4/17]
哈希樹的概念得名于 Ralph Merkle,他在1979年9月5號提交文件申請注冊了該項專利。當然,等到中本聰使用梅克爾樹作為比特幣的底層數據結構時,此專利保護期已經結束了。不然的話,中本聰得向梅克爾先生支付專利授權費,這樣做也許他的身份就被曝光,而整個區塊鏈行業都需要繳納一筆不菲的費用。
另外多說一句,比特幣并沒有憑空創造任何新型技術,而是巧妙地使用了若干個已有的密碼學工具,組合之后便是區塊鏈這種從未見過的系統。這種創新需要極強的系統性思維,往往獨自一人很難擁有這般思考的深度和廣度,也就有人推測中本聰其人背后其實并不是某一個人,有可能是一群密碼學專家。
V神:“無幣區塊鏈”只能用在私有鏈上:V神今晚在王峰十問表達了其對于關于“無幣區塊鏈”的看法。V神稱:“對于無幣區塊鏈我并不樂觀,首先,‘無幣區塊鏈’只能用在私有鏈上,只要你是一個公有鏈,就肯定需要激勵。不管是在中國還是其他地方,我都看到了一些私有鏈項目,有些私有鏈項目聲稱已經投產了。實際上,這些私有鏈往往只有7個節點左右,而且所有這些節點都由同一家公司控制,所以基本上根本不是多中心化(分權)。”[2018/6/22]
梅克爾樹的基本結構
言歸正傳,梅克爾樹是一棵滿二叉樹,其結構如圖所示。
每個葉子節點的標簽都是其所記錄內容的哈希值,而將兩個兄弟節點的標簽串聯起來,作為哈希函數的輸入,經過計算得到父節點的哈希,如此重復直到最后只剩下一個節點,即根節點,又稱作梅克爾樹根。
中本聰設計了一種區塊結構,其區塊頭的某個字段就是梅克爾樹根。梅克爾樹根源自區塊里記錄的每一筆交易,交易可以理解成轉賬,例如類似「A轉給B某某數額的比特幣」的格式。將有著固定格式的一筆轉賬記錄做序列化之后,就能作為輸入tx,交由哈希函數運算,得到的結果就是葉子節點的標簽 L。
Coinbase再遭第二次集體訴訟 涉嫌違反“無主認領法”:近日Coinbase再次陷入集體訴訟,被指控違反了加州的“無主財物法”(Unclaimed Property Law),實施非法和不公平的商業行為。據悉,Coinbase允許用戶發送BTC、ETH、LTC和BCH到外部郵箱地址,并附帶一個鏈接,接收者可點擊鏈接創建Coinbase賬戶,從而認領發送的數字貨幣。然而并不是每一封郵件里的數字貨幣都會被認領。用戶質疑Coinbase如何處理這些“無主財務”,認為其在未通知原發送人的情況下非法占用無人認領的數字貨幣。[2018/3/4]
L = Hash(tx)
而每二個葉子節點的哈希,便可以串聯起來作為輸入,得到父節點的哈希P。
P = Hash(L0+L1) ?// '+' means concatenation
區塊可以記錄的交易內容長度有限,在中本聰的設計里,嚴格限制了一個區塊內所有交易的總長不超過1MB。而交易的長度又隨交易的復雜度而變化,可以簡單理解成越復雜的交易,其內容越長。為了有效利用區塊,掙更多的手續費,礦工們總是希望盡可能往區塊里面記錄更多的交易。
觀察梅克爾樹的結構,可以發現其總是一棵滿二叉樹,這意味著葉子節點的數量總為2n 。當待記錄的交易數量不足 2n,又或者等于2n?時所有交易的總長度超過1MB限制,此時區塊能夠記錄的交易數量不能恰好等于一棵滿二叉樹的葉子數量。這種情況出現時,該怎么計算梅克爾樹根呢?
中本聰如何為比特幣交易構造梅克爾樹?
以一個簡單的例子來說明這個問題。
假設某區塊里面記錄了一共5筆交易,那么其初始葉子節點僅有5個。每2個葉子節點生成1個父節點,在產生父節點的過程中,卻遇到了最后1個葉子節點沒有兄弟節點的情況,這時候需要構造出來另外一個節點與其匹配。中本聰的做法是:直接重復該節點本身作為其兄弟節點,然后再按照前述方法得到父節點。這個重復的節點,就是原始交易記錄里沒有但是梅克爾樹上卻存在的多余信息。
此時,在梅克爾樹結構里面出現了3個父節點,然后再依據這3個節點繼續往上構造父節點。同樣的問題又出現了,這一層僅有3個節點,最后1個節點必須重復自身以滿足兄弟節點成對出現的要求,這樣又出現了新的多余信息。最后,再高一層又出現了2個父節點,繼續合并,得到最后唯一的節點,即根節點。
在交易數量為5的情況下,由此構造出來的梅克爾樹的結構如下圖所示。
比特幣如何避免
因梅克爾樹可能引起的雙花威脅?
中本聰的這種做法也許會讓讀者產生疑惑:既然最后一個葉子節點會被重復,從其父節點的角度看,它有兩個具有相同哈希的葉子節點。根據哈希函數的沖突避免性質可以判斷,此二個葉子節點所代表的內容完全相同。也就意味著,假設區塊里面還能再添加一筆完全相同的交易記錄,計算得到的梅克爾樹根的值保持不變。這種做法豈不是會導致雙花攻擊的問題?
比特幣網絡是如何避免不誠實節點故意在同一區塊內記錄完全相同的二筆交易?這個疑惑需要借助比特幣交易的基本單位UTXO來解釋。
在比特幣網絡里面,并沒有「賬戶」這種東西,也就沒有所謂「余額」等衍生概念,因此無法像傳統銀行系統一樣,通過檢查賬戶余額來判斷用戶有沒有可繼續花費的資產。所有的比特幣都是以UTXO (Unspend Transaction Output)的形式存在,交易消耗已經存在的UTXO(稱作輸入,Input),產生新的UTXO (稱作輸出,Output),被消耗的UTXO便不再有效。
每一個UTXO都擁有一個鎖定腳本 (ScriptPubKey),用來保護該UTXO不會被除了其擁有者以外的其它人使用,目前還沒有人可以解鎖不屬于自己的UTXO。UTXO能被花費的前提條件是,其鎖定腳本被正確地解鎖。通常某UTXO的鎖定腳本會指定其擁有者的公鑰信息,當該UTXO被花費的時候,只有出示與該公鑰匹配的私鑰所生成的數字簽名,即解鎖腳本(ScriptSig),才能成功解鎖UTXO。
在比特幣的設計中,使用交易ID和UTXO在該交易的輸出序號來作為UTXO的唯一標識,所有可用的UTXO都保存在一個名為UTXO set的數據集合里面。
這意味著,可以實現:將每一個還未被花費的UTXO都存儲在數據庫里并向全網公開,將已經被消耗的UTXO銷毀并從數據庫中刪去。那么當攻擊者故意構造第二筆交易并試圖再一次花費相同的UTXO時,會發現無法在數據庫中找到擁有相同ID的那個UTXO。這就相當于,某人花掉了手中真實存在的物理貨幣以后,便沒法再使用一遍。
因為每個UTXO都擁有獨一無二的標示,所以在一個區塊內,節點很容易判斷每筆交易所消耗的UTXO是否相同:如果存在兩筆交易的輸入為具有相同ID的UTXO,即能判斷第二筆交易無效,此區塊無法被誠實節點驗證通過。
因此,雖然梅克爾樹在交易數量不等于2n的情況下,理論上會出現重復哈希值的問題,但實際中在真實區塊里面無法再偽造具有相同內容的交易,雙花問題得到避免。
注:以上圖片來自于Onchain
參考資料:
?比特幣原始論文?Bitcoin: A Peer-to-Peer Electronic Cash System
?梅克爾樹原始專利文件
本文由 Poly Enterprise 團隊出品
Tags:比特幣區塊鏈COINCOI30歲老公玩比特幣輸了好多錢正常嗎區塊鏈存證怎么弄CrynCoinJesusCoin
本文梳理了2020年加密領域最重要的事件,這些事件將對區塊鏈和數字貨幣的采用產生持久的影響。我們在過去的一年里經歷了很多起伏,主要是由于全球新冠病的爆發,導致國家癱瘓以及數百萬人死亡.
1900/1/1 0:00:00即使你是在上一個大牛市的比特幣最高點梭哈比特幣,不到一個月你的資產也翻了倍,這無疑是一個前所未有的大牛市.
1900/1/1 0:00:00文章系金色財經專欄作者幣圈北冥供稿,發表言論僅代表其個人觀點,僅供學習交流!金色盤面不會主動提供任何交易指導,亦不會收取任何費用指導交易,請讀者仔細甄別防上當.
1900/1/1 0:00:00近1個月 漲幅316.9%Wyckoff 點數圖顯示第一目標:14.25, 第二目標 24.75近6個月 波卡板塊.
1900/1/1 0:00:001.13凌晨,平行鏈測試網 Rococo V1 正式開放注冊申請。僅僅5個小時,Plasm Network就獲得第一個Rococo V1插槽,在波卡Rococo V1上部署了首個平行鏈.
1900/1/1 0:00:00鏈讀圓桌派致力于邀請最新最熱優質項目,分享第一手資訊。本期我們的主題是「Web3.0代碼革命:鏈向區塊藍海Subscript語言,黑客松與開源協作建設」這期直播間我們有幸同時邀請來三位重量級嘉賓.
1900/1/1 0:00:00