首先理解拜占庭將軍問題 拜占庭將軍問題是容錯計算中的一個老問題,由萊斯利.蘭伯特等人在 1982 年提出。拜占庭帝國是 5 至 15 世紀的東羅馬帝國,即現在的土耳其。拜占庭城邦擁有巨大的財富,使它的十個鄰邦垂涎已久。但是拜占庭高墻聳立,固若金湯,任何一個單獨鄰邦都沒有實力與之抗衡,任何侵入行為最終會以失敗告終,入侵的軍隊最終結局就是被殲滅,自己處于如此高的地位,很容易遭到其他九個城邦的嫉妒和聯合抗衡。 拜占庭將軍問題 原本十個鄰邦之間的平衡局面被打破,戰爭不斷爆發,相互掠奪他人財富的現象屢禁不止。拜占庭的防御功能能夠抵抗任何一個鄰邦的入侵,只有至少一半以上鄰邦聯合進攻,才有攻破的可能。也就是說,如果六個聯邦聯合進攻拜占庭,就有獲勝的機會,能夠掠奪拜占庭的財富。但是如果其中有一個或者多個背叛,背棄了聯合攻擊的信念,進攻的軍隊就會大幅度降低,而拜占庭的強大防御功能則會擊退所有進攻,殲滅所有進攻的軍隊,掠奪其他鄰邦的財富。 鄰邦聯合進攻 其他半數以上聯邦組成的聯盟是一個不互相信任的聯盟,每方都小心行事,因為稍有不慎,就會給自己帶來災難。為了獲取拜占庭的巨額財富,他們相互通訊,商量進攻的目標和進攻時間,希望能夠通過聯合進攻,攻克拜占庭,實現自身的強大。拜占庭將軍時刻要提防鄰邦之間的聯合。鄰邦將軍雖然尋求一切聯合的機會去攻打拜占庭,但是不確定之中是否有叛徒,如果存在著叛徒,攻擊力會進一步削弱,獲勝的可能性會不斷降低,將軍能否找到用分布式協議進行遠程協商,進而贏取拜占庭城堡攻克戰役的勝利呢?這就是拜占庭將軍問題。與已有方法相比,區塊鏈技術將是更完美的解決方案。 區塊鏈技術 區塊鏈是怎樣來解決這個問題的呢?信息能夠通過區塊鏈實現快速傳遞,信息傳遞效率、速度大幅度提升,同時成本得到了有效控制。另外還加入了隨機數,目的就是保障信息能夠實現有效傳播,而工作量的高低則能夠衡量加入成本,區塊鏈礦工必須完成一個隨機哈希算法的計算工作量才能向各城邦傳播消息。當用戶向將交易提交給網絡之后,將會從客戶端中調用標準加密公共鑰匙,形成相應的電子簽名或者說是“印章”。基于上述情況,哈希計算速率本身所具有的限制,配合公鑰加密,就可以極大的提升網絡的可信度,保證了所有參與者都能夠在某些特定的事情上達成一致。拜占庭將軍問題的區塊鏈解決方案,實際上可以在任何一個分布式的網絡環境下發揮其作用,比如說域名、投票選舉或其他需要分布式協議的地方。 區塊鏈工作流程 其核心步驟主要有: (1)發送節點向全網廣播新的數據記錄。 (2)接收節點檢驗所接收到的信息,并將其存儲于某一區塊之中。 (3)通過所有節點,對區塊進行共識算法計算,得到相應計算結果。 (4)完成上一過程之后,納入區塊鏈進行存儲,以默認隨機散列值為最新區塊散列值代表所有節點接受該區塊,在新區塊制造過程中,將以該區塊為基礎加以延伸和拓展。在節點運行過程中,將始終以最長區塊鏈當做正確鏈,并在后續的工作中以此為基礎加以驗證和延長。如果存在兩個節點所廣播的區塊不是同一個版本的問題,那么其他節點將根據接收時間上的差異,在保留另外一條鏈的同時,根據第一個接受的鏈條工作。 區塊鏈兩個節點所廣播的區塊 在上述過程中,需要共識算法提供進一步的支持,以區分鏈條長度,并選擇鏈條較長的鏈繼續工作,從而有效的防止區塊鏈分叉問題的出現。這里我們所重點介紹的“新的數據記錄廣播”,在實際的應用過程中并不要求達到所有節點。只要節點數量足夠,那么就能夠被有效的整合到一個區塊中來。而在實際上,區塊有著較強的容錯能力,這一特點為丟棄的信息的處理顯然是有著重要的積極意義的。如果某個節點沒有接收到特定區塊,將自動提交申請以下載該區塊。 如上文中所介紹的那樣,節點在區塊鏈網絡中提供了記賬功能支持,負責相關數據在區塊中的存儲,為了提升節點記賬的積極性,系統將會對存在記賬行為的節點進行隨機獎勵分配。時間戳保證不會有人制造假數據記錄和保證造假數據記錄不被通過驗證。這也正是區塊鏈與眾不同的地方。區塊鏈不僅關注數據區塊里的內容,也關注數據區塊本身,把數據區塊的內容與數據區塊本身通過時間戳聯系起來。時間戳為什么會出現?這是由區塊鏈的性質規定的。節點把數據記入了區塊,所以我們就可以在任何一個區塊中找到按照時間序列排列的賬單,就如同一個賬簿。那么賬簿的頁與頁怎么銜接起來?這里我們所使用的時間戳實際上就是為了解決這一問題存在的。在實際的應用過程中,時間戳的存在,根本目的在于保證數據區塊新結構的穩定存在。 區塊鏈和時間戳 這里所介紹的新結構,為不同區塊之間的連接提供了時間上的支持,區塊鏈也正是因為有著時間戳的存在,才能夠通過時間線而串聯成為“鏈”。按照時序排列的區塊,保證了賬簿中各頁的連續性。通過時間戳的使用,保證了所有記錄的唯一性和有效性,并使得數據記錄本身在區塊和區塊上的哪個位置上發生可以被精確定位且可回溯,也給其他校驗機制功能和作用的有效發揮提供了強有力的支持,保障了區塊鏈網絡能夠有效的對某些數據的真實性加以有效的校驗。而由于這一網絡本身是公開的,所以系統不僅可以掌握所有已經發生的數據變化,而且由于過去的數據具有真實性,所以完全可以以既有數據為基礎形成新的數據,并且通過時間戳將所有的數據串聯了起來。 時間戳 因此如果在區塊鏈網絡中造假,就必須對此前的所有數據,造假成本無疑極其高昂。雖然將會在挖礦的過程中形成多個鏈條,但是由于節點始終控制著最長的鏈條,因此必須從頭構建一個更長的鏈條才能夠對過去的數據進行修改,在這個新的鏈條超過原來的那個鏈條后,虛假數據才能夠為節點所接受。但是時間越長,造假的成本也將呈指數級上升,并且隨著鏈條越來越長,其難度也變得越來越大,成本也就越來越高。同時,因為去中心化的設置,區塊鏈直接將將完整數據保存在核心客戶端上,所以即使對區塊鏈進行攻擊,也很難取得理想的效果,而且想要完全攻陷區塊鏈系統,其成本遠超過重新構建一個這樣的系統。所以,我們可以認為區塊鏈是一個造假成本極高、攻破難度極大、數據篡改可能性極低的誠信系統。 |
|