【TED】對未來產生影響最大的科技
何為拜占庭將軍問題
問題由來
拜占庭將軍問題(Byzantine failures)是由萊斯利·蘭伯特在1982年提出的點對點通信中的基本問題。作為分布式系統的先鋒科學家,蘭伯特當時為NASA建立可靠穩定的航天計算機系統的過程中遇到的容錯性問題,就此而編出的拜占庭將軍問題,他因為在分布式系統做出的杰出貢獻而獲得2013年圖領獎——計算機界的諾貝爾獎。
問題描述
拜占庭帝國國土遼闊,當攻打敵人的時候,每個軍隊都分隔很遠,將軍之間只能靠信使傳消息。
在戰爭的時候,拜占庭軍隊內所有將軍必須達成一致的共識,決定是否去攻打敵人的陣營。但是,軍隊可能有叛徒和敵軍間諜,左右將軍們的決定,擾亂軍隊的秩序,使達成的共識并不代表大多數人的意見。這時,在已知有間諜的情況下,其余忠誠的將軍在不受叛徒的影響下如何達成一致的協議,就是拜占庭將軍問題。將軍之間的聯絡通過信使,在這個問題中信使不會被截獲(信道可靠)
問題的可解性
- 叛徒數大于或等于1/3,拜占庭問題不可解
如果有三位將軍,一個司令倆副官,如果其中一個副官是叛徒。當司令發出進攻命令時,副官2可能告訴副官1,他收到的是“撤退”的命令。這時副官1收到一個“進攻”,一個“撤退”,而無所適從。
如果司令是叛徒。他告訴副官1“進攻”,告訴副官2“撤退”。當副官2告訴副官1,他收到“撤退”命令時,副官1由于收到了司令“進攻”的命令,而無法與副官2保持一致。
正由于上述原因,在三模冗余系統中,如果有拜占庭故障,即叛徒數等于1/3,拜占庭問題不可解 - 用口頭信息,如果叛徒數少于1/3,拜占庭問題可解。
這里說“少于1/3”表明,要對付一個叛徒,至少要用四模冗余。在四模中有一個叛徒,叛徒數是少于1/3的。所謂口頭信息,是指滿足三個條件:
①被發送的消息都能夠被正確的投遞
②接收者知道是誰發的(司令還是副官)
③沉默(不發信息)可以被檢測
需要注意的是口頭協議并不會告知消息的上一個來源是誰。算法的中心思想很簡單,就是司令把命令發給每一副官,各副官又將收到的司令的命令轉告給其他副官,遞歸下去,最后用多數表決。
如果司令是忠誠的,他送一個命令v給所有副官。
若副官3是叛徒,當他轉告給副官2時命令可能變成x。但副官2收到{v, v, x},多數表決以后仍為v,忠誠的副官可達成一致。
如果司令是叛徒,他發給副官們的命令可能互不相同,為x, y, z。當副官們互相轉告司令發來的信息時,他們會發現,他們收到的都是{x,y,z},因而也取得了一致。 - 書面協議
口頭協議的缺點是消息不能追本溯源,這使得口頭協議必須在四模冗余的情況下才能保證正確。但是,若能引入一種方法讓消息能夠追本溯源,情況會不會有所改變呢?這就是書面協議引入的靈感。
我們在口頭協議之上添加一個條件,使之成為書面協議
(a)司令簽名不可偽造,一旦被篡改即可發現,而叛徒的簽名可被其他叛徒偽造;(b)任何人都可以驗證簽名的可靠性。
書面協議的本質就是引入了簽名系統,接收者收到信息后,簽上自己的名字后再發給別人,這使得所有消息都可追本溯源。這一優勢,大大節省了成本,他化解了口頭協議中1/3要求,只要采用了書面協議,忠誠的將軍就可以達到一致。這個效果是驚人的,相較之下口頭協議則明顯有一些缺陷,如遞歸復雜度等。其實書面協議的原理我也沒太懂,記住結論就好xd,即加上簽名可以形成一個消息鏈,能加快達成一致性計算且放寬條件。 - 在現實環境中書面協議任然存在問題
在理想環境下書面協議可以很快得到唯一正確的結論。
但是在現實環境中書面協議面臨兩個問題
1)沒考慮傳輸信息的延遲時間,書面協議的簽名體系難以實現
2)簽名消息記錄的保存難以擺脫一個中心化機構而獨立存在。
問題的真正解決
真正解決這一難題的是名叫“中本聰”的人。
這個人就是大名鼎鼎的“比特幣”的發明者,比特幣圈內的人都知道中本聰是一個“隱匿者”,一個愛收集火車模型的黑客天才。在正式宣告了比特幣的誕生之后,中本聰徹底銷聲匿跡。
他是如何解決的呢,我用一個老司機開車的模型來解釋。
一群喜歡開車的小伙伴希望選出老司機帶領大家一起開車。
限制條件是
1)他們必須在一個限定的時間內選出老司機帶領大家去開車,否則就會被警察叔叔發現。
2)他們在規定時間內只能選出一個老司機,否則同一時刻選出了兩個老司機大家就不知道跟著哪個老司機開了。
怎么解決在同一時刻選出一個老司機呢,中本聰使用一個區塊鏈來解決這個問題。
工作量證明鏈(PoW)
工作量證明,簡單理解就是一份證明,用來確認做過一定量的工作。為什么要用工作量證明?因為,監測工作過程通常極為低效,而對工作結果的認證則是一種非常高效的方式。比如他們在規定時間內大家都去靠一個老司機證,一看到這個證就知道他是老司機了,而不用讓他開一把車測試一下。
任何一個想做老司機的人都用自己的計算機通過各種輸入求解一個哈希散列,這個哈希散列是一個壓縮的信息,里面包含了已經拿到老司機證的名單等信息。由于這個計算比較困難,一般至少10分鐘才能產生答案。比如某時刻一個司機計算出了666這個結果,于是他拿到了老司機證,然后他把自己的名字放入老司機證名單里,這時下一個老司機證可能就變成了777,于是他把這個消息向所有老司機傳播,每個收到消息的司機就開始重新計算,由于計算至少要十分鐘,所以可能5分鐘內所有司機都收到新的老司機名單的輸入,下一個10分鐘內又會產生一個777的老司機。大家就可以根據這個老司機名單來一個個的帶大家愉快的開車了。
區塊鏈:一句話解釋區塊鏈就是一個去中心化的信任機制。
再詳細點:區塊鏈是指通過去中心化和去信任的方式集體維護一個可靠數據庫的技術方案。
再多說一點:區塊鏈技術就指一種全民參與記賬的方式。所有的系統背后都有一個數據庫,你可以把數據庫看成是就是一個大賬本。那么誰來記這個賬本就變得很重要。目前就是誰的系統誰來記賬,微信的賬本就是騰訊在記,淘寶的賬本就是阿里在記。但現在區塊鏈系統中,系統中的每個人都可以有機會參與記賬。在一定時間段內如果有任何數據變化,系統中每個人都可以來進行記賬,系統會評判這段時間內記賬最快最好的人(老司機),把他記錄的內容寫到賬本(老司機名單),并將這段時間內賬本內容發給系統內所有的其他人進行備份。這樣系統中的每個人都了一本完整的賬本。這種方式,我們就稱它為區塊鏈技術。
區塊鏈解決了三大痛點
- 去中心:多個中心化的系統,使得系統風險下降。沒有中心的本質就是人人都是中心。
- 安全:區塊鏈可以解決安全傳輸問題,解決信息化聯網去中心化信任問題,構建出價值互聯網,顛覆社會組織與生產方式。
- 信任:由于區塊鏈內每個節點掌握各個節點信息,系統內交易批準取決于所有節點共識性原則,規則對于所有節點公平且強制,并且,隨著交易增多,每個節點內同步更新的鏈條愈發變長,愈發難以被篡改。這個真的很贊!
區塊鏈技術的應用價值
- 金融領域就是區塊鏈很好的應用。比特幣成功背后的核心概念是一個用以維持一本全球性的總賬的去中心化協議,它被叫做區塊鏈。區塊鏈記錄著比特幣地址之間的交易,追蹤著每一個比特幣轉手的舉動。這樣的追蹤確保了沒有人可以雙花(double-spend)一個幣,因為總賬使得一名用戶是否發送出了比他掙得的更多的比特幣變得太明顯。比特幣追蹤的特別方式,也使得交易記錄不可被變更;一旦一筆比特幣交易被處理并收錄進了區塊鏈,攻擊者就很難逆轉那筆交易了,所以商戶可以在有信心交易不會被逆轉的情況下發出貨物。
- 在未來,的確還有可能出現這樣的情況,我們將不再使用現金買東西,也完全重新顛覆事物所有權的概念。即使互聯網已經通過各種方式在各方面改變了我們的生活,但是從來沒有一種方法能夠真正的,在沒有中心化權威機構的承認下,讓你“擁有”某些數字產品。
- 中心化有各種弊端,比如安全性容易受到破壞,世界不斷有黑客攻破數據中心的報道。中心化處理成本高,如政府等中心機構高成本卻做不好事情。又比如超級計算機資源昂貴,用無視低成本客戶端代替中心超級計算機可以省去資源成本。
- “區塊鏈”讓萬物真正互聯!
比如,一臺洗衣機。如果沒有洗衣粉,會自動通過傳感器、點對點的加密通訊協議,把洗衣粉自動給你送過來加上。洗衣機可能會有一個數字錢包,洗衣粉送來之后,洗衣機就自動把錢付給對方,所以機器與機器之間通過數字錢包就可以做金融交易 - 廣義上講去中心就是人人生來平等的哲學意義。這個世界目前是不平等的,窮富兩級分化很嚴重。英國脫歐等正在發生的事情說明此思想正在變革著世界。
- 類似滴滴、Uber、膜拜、airbnb等共享經濟的思想已經在改變世界了,只不過他們不是真正的共享,如果建立在區塊鏈技術上,完全可以沒有這些平臺同樣獲得相同的服務。
區塊鏈現在面臨的問題
目前區塊鏈還處于非常早期的階段,不僅尚未形成統一的技術標準,而且各種技術方案還在快速發展中,主要還停留在原型設計階段。這既是后發國家的挑戰,也是機會。
因為沒有實踐經驗,所以做區塊鏈帶來的成本和帶來的收益沒有可靠的驗證。以區塊鏈首先涉足的金融領域為例。之前傳統的基礎設施投入已經超過數萬億,要建立一套全新的金融架構和基礎設施是需要有實際數據相支撐的。我們需要第一個吃螃蟹的人。
最后一個問題是產業變革和技術變革時期,任何領域的共性問題:區塊鏈行業極其缺乏人才,缺少大量既了解區塊鏈,又了解具體行業的人才,跨界的高級人才越來越重要。