BTC/" target="_blank"">比特幣技術從2009年比特幣誕生開始不斷演化更新,如今早已是精彩紛呈百花齊放,不管是學術界還是企業界,不斷湧現出最新的技術和成果。由於區塊鏈的開源和分散式特性,所以從一開始它就是世界性的技術。
由於語言和網路限制的原因,中文世界的讀者很難接觸並讀懂國外優質的英文區塊鏈文章,它們並非看起來的那麼高大上和晦澀難懂,有很多文章非常易懂且並不淺顯,所以我覺得有必要將他們翻譯成中文讀者可以看懂的文章。
本文原文標題為 How Does the Blockchain Work? 副標題為 Blockchain technology explained in simple words. 以下內容在最大程度還原原文內容的前提下,做了一些方便中文讀者理解的改動,文末的閱讀原文可以檢視英文原文。由於原文太長,分兩篇文章呈現,本篇為第二篇。
區塊鏈真的安全嗎?以及為什麼被稱為區塊鏈呢?
任何人都可以透過網際網路訪問區塊鏈網路,也可以透過賬號地址查詢相關的交易記錄,如果有人一直使用同一個賬號地址來傳送和接收交易,那麼很容易將所有的交易對應到同一個賬號擁有者。比特幣網路允許你在錢包中生成任意多的賬號地址,也就是私鑰和公鑰對。系統允許你使用不同的賬號傳送和接收交易,沒有人能同時知道你所有的賬號和私鑰,除非你一直使用用一個私鑰和地址傳送交易。
比特幣地址的全部可能性是2¹⁶⁰ 或者 1461501637330902918203684832716283019655932542976。這個天文數字保證了比特幣出現兩個相同地址的概率幾乎為零。
比特幣網路可能還會出現安全漏洞,那就是多次使用已經使用過的比特幣。由於交易可能透過不同的節點被髮送到區塊鏈網路中,所以兩筆不同的交易到達同一個節點的順序有可能不同。
攻擊者傳送一筆交易後,隨後又很快發一筆相反的交易,將收款地址指定為自己的某一個賬戶地址,由於網路延時和節點分佈廣泛,此時有些節點就有可能會先收到後一筆交易請求,由於兩筆交易用的是同一個UTXO,所以節點就會認定第一筆交易引用了已使用過的UTXO,進而認為交易無效。
於是很多人想到了使用發交易時刻的時間戳來標記交易順序,這種方法其實也很容易被攻擊,畢竟時間戳是很容易被篡改的。因此我們很難判定兩筆交易的傳送順序,這就給了騙子和攻擊者可乘之機。
如果上面的情況頻繁發生,那麼將會在網路節點中產生分歧,無法達成有效共識,因此區塊鏈在設計之初就考慮到使用特定的共識機制來防止騙子的攻擊。
比特幣網路透過將交易分組到塊中來實現對交易的排序,每一個塊包含有限數量的交易,以及上一個區塊的標識資訊。每個塊會根據時間先後順序依次排列,形成一個鏈條,故而也稱系統為區塊鏈。
在同一個塊中的交易被認為同時發生,而未入塊的交易則說明還沒有得到確認,每一個節點都有權將一定數量的交易打包到塊中,並且將打包後的塊廣播到網路中,求得其他節點的認可,成為鏈上的新塊。那麼這裡就會有一個問題,既然每個節點都可以打包交易,那麼到底以誰打包的塊為準呢?
想要將自己打包的塊加入到鏈條中,每一個塊必須包含一個複雜數學問題的答案,這個數學問題是由不可逆的加密雜湊函式構造而成。唯一解決這個數學問題的方式就是根據前一個塊的資訊,新增隨機資訊,然後不停地計算雜湊結果,直到滿足系統給出的目標值。對於一臺普通的計算機,這樣的計算難度可能需要消耗一年的時間。正是透過調整目標值,以及各個節點為了競爭打包區塊權而不停地提高硬體效能,才使得比特幣系統可以維持在平均10分鐘出一個塊。
率先計算出正確答案的節點,會將答案放入新塊並廣播到網路中,其他節點可以將答案帶入數學難題中以驗證結果是否正確,驗證過程非常簡單快速。這就如同在你不知道密碼鎖的密碼時,你需要不停地試,非常耗時間,但是一旦你知道答案後,驗證就非常簡單了。
如果兩個節點同時算出答案並將自己打包的塊廣播到網路中,結果會如何呢?在這種情況下,兩個節點都會將自己打包的塊放置在區塊鏈的最末端,而對於其他節點也是優先驗證並認可第一個達到的塊。
比特幣系統有一個原則,那就是每一個節點永遠都只會認可最長的鏈,當網路中的其他節點收到上一個區塊後,會立馬投入到下一個區塊的打包過程中,一旦打包成功,就會立馬將新塊追加到鏈末端。而對於那些一直沒有打包成功的節點來說,只需要記住選擇最長鏈就行,這樣系統即便會出現短暫的分歧,但是最終還是隻會有唯一的一條主鏈。
同一時間打包成功同一區塊的概率很低,因此係統不可能頻繁出現同一時間處理多個區塊的情況,所以比特幣系統可以在很快的時間內針對同一條主鏈達成共識。
在特定時間區塊出現分歧也很容易被攻擊者利用,如果一筆交易所在的區塊處於相對短的鏈中,一旦下一個區塊確定,也就是最長鏈確定後,那麼這筆交易就會立馬變成未被確認的交易。在比特幣系統中,交易的安全性是由加密演算法機制保證的,任何的攻擊幾乎都是在與整個網路算力做對抗。
接下來我們不妨透過一個例子看一下 Mary 是可以如何利用短暫的區塊分歧來進行雙花攻擊的。Mary 付給 John 比特幣以換取 John 的產品,因為比特幣網路節點總是以最長鏈為最終確定的主鏈,如果Mary 可以依靠自己的算力生成比較長的鏈,然後將一筆相反的交易包含在其中,那麼 John 將會同時失去本應得的比特幣和自己的產品。
那麼系統如何阻止這類攻擊呢?事實上每次鏈上新增新塊都不是 Mary 一個人說了算的,她需要和別人一起計算複雜數學題來獲取打包區塊的權力,如果她擁有強大的算力,保證每一次都能打包成功,那麼她確實可以輕易地發動攻擊,因為她完全可以將對自己有利的交易放入自己打造的最長鏈中。
但是比特幣網路中的很多節點都想擁有打包區塊的權力,所有人都會和 Mary 競爭,換言之,如果Mary 想要實現她的攻擊行為,就意味著要和整個網路的算力對抗,這個算力成本將會非常高,高到需要她掂量一下攻擊是否還有利可圖。
如果退一步,Mary 並不奢望每一次都能獲取到打包權力,只需要保證自己希望的交易落在最長鏈即可。那麼就意味著Mary掌握的算力要保證她在恰當的時間內,在後續的數次區塊打包競爭中都能獲勝,這個算力成本要求也非常高,道理也是類似的,你也許能在某一次區塊打包競爭中獲勝,但是要保證接下來連續的數次打包中都能獲得打包權,依然要面臨著對抗全網算力的壓力。
總之,Mary 需要擁有全網50%以上的算力才能達到她的攻擊目的,即便她能做到,也只有25%的機率在一條鏈上獲得連續兩個區塊的打包權。她想要在同一條鏈上獲得越多區塊的打包權,成功的機率就越低。所以比特幣網路中的交易是依靠系統的數學競賽來保證其安全性的,在這場競賽中,攻擊者要面臨對抗整個網路算力的壓力。
因此交易會隨著後續區塊的增加而變得更加安全,因為每個區塊都會儲存上一個區塊的唯一標識資訊,下一個區塊也會儲存當前區塊的唯一標識資訊,而且一旦區塊資料有任何更改,那麼其後區塊所儲存的標識資訊就必須跟著更改。如果更改其中一個區塊,並且想要獲得其他節點的認可,攻擊者就必須同時要重新計算該區塊後面所有區塊的資料,以保證相互之間留存的標識資訊都是對的,每一次的篡改都意味著要和別人競爭打包權,對算力的要求同樣非常高。
在比特幣網路中,每次出塊的平均時間間隔是10分鐘,一筆交易通常認為1小時,也就是6個區塊打包完成後,才算得到真正確認,因為同時破解6個區塊對算力的要求是非常高的。
比特幣挖礦
為了傳送比特幣,使用者需要引用錢包中已有的UTXO,也就是未使用的交易輸入,並且將交易傳送到全網進行廣播,那麼第一筆比特幣從哪裡來呢?或者說第一個UTXO從哪來呢?
為了平衡由於網路異常或者錢包私鑰丟失,而導致的全網經濟通縮,系統會給每一次透過計算數學難題獲得打包權的人新幣獎勵,這種為了獲得比特幣獎勵而執行比特幣軟體的行為被稱為“挖礦”,這種行為很像現實生活中的挖金礦。
比特幣獎勵成為了很多人執行節點的動力,他們願意為此付出一定的算力以保證可以處理交易,並且維持整個比特幣網路的穩定。
因為單靠一臺普通計算機計算打包數學難題至少需要耗費非常長的時間,於是很多節點就會聯合起來共同破解計算難題,這樣他們解決難題的機率就會大很多,然後再根據各自的算力分配獎勵,這種聯合打包的組織也被稱為“礦池”。
一些礦池的算力非常大,大到其算力已經超過全網算力的20%,正如上文提到的雙花攻擊,他們儼然已經成為比特幣全網安全的隱患,不過即使他們其中的礦池未來擁有超過50%的算力,那麼只要累加的區塊足夠多,歷史交易依然是足夠安全的。當然有很多礦池也在限制算力的繼續增加,以保證比特幣全網的安全。
隨著計算機硬體效能的提升,比特幣網路中節點的算力也會越來越高,不過系統會自動根據全網算力動態調整數學題的計算難度,以保證大概平均10分鐘的出塊時間,這點同樣可以保證全網的穩定性和安全性。
此外,比特幣每隔四年挖礦獎勵就會減半,因此比特幣挖礦將會逐漸失去吸引力,為了鼓勵節點繼續維護比特幣網路,每一筆交易都會包含一筆小額交易手續費用以獎勵打包區塊的礦工。所以對於挖礦成功的礦工來說,會同時收到區塊中所有交易的手續費和系統獎勵的新幣。
手續費的意義還在於礦工會優先處理那些願意支付更高手續費的交易,透過市場調節的方式使得交易手續費處於合理的區間。比特幣現有的交易手續費相比傳統銀行來說,要低得多,而且手續費跟交易金額沒有關係。
區塊鏈的優勢和挑戰
現在你已經對區塊鏈如何工作有了全面基本的認識了,接下來讓我們來快速看一下為什麼它如此有趣。
使用區塊鏈技術有如下顯著的優勢:
你將對你的資產和資料擁有絕對的所有權,沒有任何第三方機構可以控制你的資產和資料,或者限制你的訪問許可權
在區塊鏈上給任何其他人傳送資料成本非常低,它允許大量的小額支付
資料可以在幾分鐘內傳送完畢,並且交易可以在數小時內被確認安全無誤,而不是幾天或者幾周
任何人都可以在任何時候驗證區塊鏈上任意一筆交易,交易結果對所有人來說都是透明的
利用區塊鏈技術使得構建去中心化的應用成為可能,同時還可以保證資訊被高效安全地處理和傳輸
然而,區塊鏈技術依然有一些挑戰:
區塊鏈使得交易可以以匿名的方式在鏈上傳送和接收,雖然保護了隱私,但也吸引了很多非法的活動
雖然出現了很多交易所,並且數字貨幣也變得非常流行,但是到今天依然很難用比特幣購買商品和服務
和其他加密貨幣一樣,比特幣的供應是有限的,市場上沒有足夠多有效的流動性,而市場需求又是在快速變化的。同時比特幣的價格也是不穩定的。
總之,區塊鏈技術未來有極大的潛力會重構其他行業,從傳統的廣告業到能源供應。它最大的優勢在於可以形成去中心化的生態,降低交易和信任成本。
新的技術每天都在發生和迭代,例如2015年出現的可以提供去中心化應用的智慧合約平臺以太坊。但是請記住區塊鏈技術依然處於早期實驗階段,各種用於改善和提升區塊鏈安全的技術和工具層出不窮,未來區塊鏈將會在更多的產品、工具和服務上體現其價值,讓我們拭目以待。