譯文 | 分散式公鑰基礎設施
2018-10-6 23:07
來源: zcblockchain
綜述
當今的網際網路把線上身份的控制權交給第三方。電子郵件地址、使用者名稱和網站域名是通過DNS、X.509和社交網路借用或“租借”的。這導致了整個網際網路範圍內嚴峻的可用性和安全性問題。 本文描述了一種可能的替代方法,稱為分散式公鑰基礎設施(DPKI),它將線上身份的控制權返還給所屬的實體。通過這樣做,DPKI解決了許多困擾傳統公鑰基礎設施(PKI)的可用性和安全性問題。
以下為譯文全文
摘要
當今的網際網路把線上身份的控制權交給第三方。電子郵件地址、使用者名稱和網站域名是通過DNS、X.509和社交網路借用或“租借”的。這導致了整個網際網路範圍內嚴峻的可用性和安全性問題。本文描述了一種可能的替代方法,稱為分散式公鑰基礎設施(DPKI),它將線上身份的控制權返還給所屬的實體。通過這樣做,DPKI解決了許多困擾傳統公鑰基礎設施(PKI)的可用性和安全性問題。DPKI在PKI生命週期的每個階段都有優勢。它使得線上身份無許可引導成為可能,並提供了更強大的SSL證書的簡單建立。在使用中,它可以幫助“Johnny”最終加密,這要歸功於公鑰管理降級為安全的分散資料儲存。最後,它還包括恢復丟失或受損識別符號的機制。
1、 簡介——為什麼是 DPKI
網際網路促進了全球個人之間的通訊和交易,通過諸如電子郵件地址、域名和使用者名稱等識別符號進行的。但誰來控制這些識別符號?如何管理?他們之間的安全通訊是如何促進的?
當今,第三方機構(如DNS註冊服務機構,ICANN,X.509證書頒發機構(CA)和社交媒體公司)負責建立和管理線上識別符號以及它們之間的安全通訊。不幸的是,這種設計顯示出嚴重的可用性和安全缺陷。
1.1 線上識別符號的控制和管理
在設計DNS和X.509PKIX時,網際網路無法以可靠、分散的方式就註冊管理機構(或資料庫)的狀態達成一致。因此這些系統指定可信第三方來管理識別符號和公鑰。幾乎所有的網際網路軟體都依賴這些權威機構。因此,網站域名並不屬於註冊它們的組織(注意:它們屬於第三方,如ICANN、域名註冊機構、證書頒發機構以及任何能夠影響、強制或入侵它們的任何人)。同樣,網站上的使用者名稱並不屬於這些使用者。
這些可信第三方(有時縮寫為TTP)作為可破壞的中心故障點,每個都可能危及整個網際網路的完整性和安全性。由於這些識別符號的控制權被賦予TTP,因此其可用性也受到影響。這些與可靠性和可用性有關的問題會導致其他問題:
由於所有這些原因,DPKI的基本原則是身份屬於它們所代表的實體。這就需要設計一個分散的基礎設施,其中每個身份不是由可信第三方控制,而是由其主要所有者控制。
1.2 通訊的安全性
通過安全傳遞公鑰來保護通訊安全。這些金鑰對應於身份。這些身份所代表的實體(稱為主體)使用相應的私鑰來解密傳送給它們的訊息,並且證明他們傳送了一條訊息(通過用私鑰對其進行簽名)。
PKI系統負責公鑰的安全傳送。但是,常用的X.509 PKI、PKIX破壞了這些金鑰的建立和安全傳遞。
1.2.1第三方面臨的挑戰:尋找“正確的金鑰”
在X.509 PKIX中,通過建立由CA簽署的金鑰來保護Web服務。然而,在PKIX中生成和管理金鑰和證書的複雜性導致網路託管公司自己管理這些金鑰的建立和簽署,而不是將其留給客戶。這從一開始就產生了重大的安全問題,因為它導致私鑰在CpoF(網路託管公司)的積累,使訪問該金鑰儲存庫的任何人都可能以幾乎無法察覺的方式破壞與這些網站的連線的安全性。
X.509 PKIX的設計還允許世界各地約1200個CA模擬任何網站。CA的強制或危害的風險使情況進一步複雜化。由於這些危險,使用者無法確定他們的通訊是否會被允許進行MITM(中間人攻擊)的欺詐證書所破壞。這些攻擊非常難以發現; 像谷歌這樣生產網頁瀏覽器的公司有時可以識別自己網站上的攻擊,但它們無法阻止對任意網站的攻擊。
解決方法已經被提出。HPKP是一種IETF標準,它允許網站告訴訪問者在一段時間內“扣住”他們收到的公鑰(忽略任何其他金鑰)。但是這種機制對於網站管理員來說很難使用,因此在實踐中可能不會使用太多。HPKP容易受到“敵意鎖定”的攻擊,如果金鑰需要被合法替換,則存在破壞網站的風險。更糟糕的是,HPKP的某些實現使第三方在沒有使用者同意的情況下覆蓋任意指標的做法變得輕而易舉。
1.3 PKI的可用性
即使可以信任權威第三方,目前的PKI系統也存在重大的可用性問題。 Brigham Young大學的一個小組調查了Mailvelope的可用性,Mailvelope是一種瀏覽器擴充套件,支援通過Gmail等第三方網站進行GPG加密通訊。他們的研究表明參與者之間的安全通訊嘗試失敗率高達90%。研究發現,公鑰管理是使用者無法正確使用軟體的主要原因。
TextSecure / Signal - 由愛德華斯諾登認可的安全和資訊易用性的安全郵件系統——由於無法順利處理公鑰更改而具有可用性問題。如果使用者刪除並重新安裝應用程式,他們的朋友將被警告其公鑰“指紋”已更改。這種情況與MITM攻擊無法區分,很少有使用者能夠理解或費力去驗證他們是否收到了正確的公鑰。
1.3.1訊息洩露的危險
由於傳統PKI的可用性挑戰,今天大多數網路交流都是未簽名和未加密的。這在主要的社交網路上尤其明顯。由於PKI的複雜性,社交網路不會以任何方式加密使用者的通訊,除了依靠PKIX通過HTTPS傳送它們。由於訊息未經過簽名,因此無法確定使用者是否真正說出他們所說的內容,或顯示的文字是否是資料庫洩露的結果。類似地,使用者通訊以能夠訪問這些資料庫的任何人都可以讀取的方式儲存——損害使用者隱私並增加具有巨大責任風險的社交網路。
2、DPKI 解決網路信任問題
答案不是放棄PKI,而是尋找替代方案:DPKI,未來的分散式公鑰基礎設施標準。
DPKI的目標是確保與PKIX不同,沒有任何一個第三方可以整體損害系統的完整性和安全性。通過技術使信任分散,使地理和政治上不同的實體能夠就共享資料庫的狀態達成共識。DPKI主要關注分散的key-value資料儲存,稱為區塊鏈,但它完全能夠支援其他提供類似或具有更安全屬性的技術。
被稱為礦工(或驗證節點)的第三方依然存在,但它們的作用僅限於確保區塊鏈(或分散式賬本)的安全性和完整性。這些礦工通過遵循議共識協議得到財政激勵。偏離協議會導致經濟懲罰,而遵守共識協議通常會產生經濟回報。由中本聰創造的比特幣是第一個這樣成功的協議。它基於工作證明,其中“礦工”的能量消耗用於保護資料庫。
通過在區塊鏈中註冊識別符號,可以給主體直接控制和全域性可讀識別符號(如網站域)的所有權,像任何其他型別的交易一樣。在key-value資料儲存中(注意:在這種情況下,“key”是指資料庫查詢字串,而不是公鑰或私鑰),主體使用識別符號作為查詢金鑰。
同時,區塊鏈允許為這些識別符號分配任意資料(如公鑰),並允許這些值以安全的方式在全域性可讀,而不易受PKIX中可能出現的MITM攻擊的影響。這是通過將識別符號的查詢值連結到該識別符號的最新和最正確的公鑰來完成的。
在該設計中,對識別符號的控制將返回給主體。對於任何一個實體來說,破壞整個系統的安全性或者破壞不屬於它們的識別符號不再是微不足道的。這就是DPKI如何解決困擾DNS和X.509 PKIX的安全性和可用性問題。
區塊鏈及其共識協議的完整描述超出了本文的範圍。第5節“識別符號和公鑰的安全性”討論了它們的一些安全屬性,附錄“輕客戶端詳細資訊”描述瞭如何從不具有區塊鏈完整副本的移動裝置安全地訪問這些區塊鏈中的資料。
3、DPKI 威脅模型
與傳統的PKI系統一樣,DPKI假定一個持續的活躍對手Mal經常試圖欺騙一個主體Alice信任另一個主體Bob的錯誤金鑰。這可以採取以下形式:發現Bob的錯誤識別符號(例如,在twitter.com上找到錯誤的帳戶)或在識別出識別符號後快取錯誤的金鑰。
假設Mal是一個計算有限的對手,他能夠破壞或強迫集中的可信PKI方欺騙Alice信任錯誤的金鑰。這已經被證明是可行的,例如DigiNotar的案例,以及國家行為者迫使其轄區的CA簽署無效金鑰的情況。此外,假設Mal能夠改變或阻止Alice和Bob之間交換的訊息的結合率(小於100%)。這在今天也是可行的,並且通過ISP級別的審查,請求重新定向以及為了破壞現有檔案共享技術(如BitTorrent)而執行的的資料包修改攻擊來證明來自已知Tor出口節點的黑洞資料包,並阻止HTTP訪問政治敏感材料。
鑑於Mal的權力,DPKI的兩個設計原則變得明顯:
-
如前所述,每個主體必須完全控制其當前的識別符號/公鑰繫結。如果只有主體可以修改他們的識別符號,那麼Mal就會被迫攻擊他希望破壞的每個主體。這與傳統的PKI形成對比,在傳統的PKI中,Mal只需要破解一個CA來欺騙許多主體。
-
該系統必須完成全有或全無的任何進展:每個主體必須見證其他主體對其識別符號/公鑰繫結的更新,否則無人會觀察到任何更新。這如果她檢查某些主體的更新,則需要通過向整個網路警告其存在來防止Mal可能的網路級攻擊。這使得針對特定使用者或金鑰對的針對性攻擊成本極高,因為它確保了Mal可以攻擊任何人的唯一方法是立即攻擊每個人。
正如已經建議的那樣,DPKI通過使用安全的分散式key-value資料儲存庫來實現這些設計原則,以承載識別符號和公鑰雜湊之間的繫結。有關詳細資訊,請參閱第5節“識別符號和公鑰的安全性”。
4、 註冊和識別符號
如前幾節所述,DPKI的核心是分散式key-value資料儲存,可用作識別符號登錄檔,允許主體的公鑰與其識別符號安全關聯。只要該註冊仍然有效並且主體能夠保持對其私鑰的控制,任何第三方都不能在不訴諸主體直接脅迫的情況下取得該識別符號的所有權。
DPKI沒有規定應該使用哪種型別的識別符號,並且認識到可能的不同方法(例如,使用者名稱或UUID),這些方法在易用性、永續性、唯一性、安全性和其他屬性方面可能不同。
對於DPKI使用分散式key-value儲存,必須具有以下屬性:
-
無權寫入。任何主體都可以廣播符合語法規則的訊息。系統中的其他對等體不需要准入控制。這意味著一種分散的共識機制。
-
叉選規則。鑑於兩個更新歷史,任何主體都可以通過檢查確定哪一個是“最安全的”。
這些需求可以通過區塊鏈來滿足,例如Namecoin,Ethereum,甚至可能是比特幣(通過Blockstore等技術)。
4.1 DPKI註冊要求
在DPKI中處理識別符號註冊的方式與DNS不同。雖然註冊商可能存在於DPKI,但他們必須遵守DPKI的目標所產生的若干要求,以確保身份屬於他們所代表的實體:
-
私鑰必須以分散的方式生成,以確保它們在主體的控制之下(例如,通過主體裝置上的開源客戶端軟體)。這意味著明確禁止代表主體在伺服器上生成金鑰對的註冊服務。否則將重新出現第一節“簡介 - 為什麼是DPKI”中提到的問題。
-
軟體必須確保主體始終控制其識別符號和相應的金鑰。主體可將其識別符號的控制權擴充套件到第三方(例如,為了恢復目的),但這必須始終是需要明確的、知情的決定,而不是軟體的預設、隱含或誤導行為。永遠不要以不安全的方式儲存或傳輸私鑰。
-
軟體必須儘可能確保不存在允許單個實體在未經其同意的情況下剝奪其識別符號的主體的機制。這意味著:
在區塊鏈內建立了名稱空間後(例如,通過以太坊的智慧合約),就無法銷燬它。同樣,名稱空間不能包含允許任何人使不屬於它們的識別符號無效的黑名單機制。 註冊和更新識別符號的規則必須是透明的,並且必須以一種簡單的、難以忽略或誤解的方式(例如先到先得、拍賣)表達給使用者。特別是,如果註冊受到過期政策的約束,則必須明確告知主體,這可能導致主體失去對識別符號的控制。 一旦完成設定,就不能更改名稱空間規則以引入更新或更新識別符號的任何新限制,否則可以在未經其同意的情況下從主體中控制識別符號。同樣,不能修改用於更新或升級識別符號的客戶端軟體以引入用於更新或更新識別符號的新限制。 預設情況下,用於管理識別符號的軟體必須確保用於建立、更新、恢復或刪除識別符號的所有網路通訊都是通過分散的對等機制傳送。這同樣是為了確保單個實體(如註冊服務商)無法阻止升級或更新識別符號。
我們推薦DPKI基礎設施也努力確保:
-
至少有一類識別符號一旦正確註冊後就不會過期。
-
至少有一類中立註冊政策可供所有公眾以及希望提供註冊服務的任何服務提供商使用。
4.2 DPKI註冊機制
註冊識別符號可能具有與其相關聯的兩種型別的金鑰:用於註冊和更新與識別符號相關聯的資料的金鑰對,以及與識別符號(子金鑰)相關聯的公鑰。
建議主體使用子金鑰對訊息進行簽名。它們可以直接或間接儲存在資料儲存區中:
-
直接儲存意味著公鑰本身直接儲存在DPKI資料儲存中。對於大多數區塊鏈來說不太可能,因為一些金鑰非常大,大多數區塊鏈不可能儲存它們或非常昂貴。
-
間接儲存意味著指標(例如,URI)與公鑰指紋一起儲存(或其本身包含公鑰指紋)。
5、 識別符號和公鑰的安全
在DPKI中,識別符號通常是查詢金鑰,其對映到只能由具有相應私鑰的實體(或多個實體)修改的值。在這樣的系統中,可能發生的最壞情況是:
-
傳送查詢金鑰的過期值響應查詢。
-
識別符號的所有者由於審查而無法更新其值,並且一旦識別符號到期,他們就會失去所有權。
通過使用輕客戶端(稍後討論)和審查規避工具,可以解決這些問題。
雖然可能性極低,但也可能為識別符號傳送錯誤值。例如,如果通過工作證明保護的區塊鏈具有能夠壓倒誠實節點並且在註冊點之外反轉歷史的對手,則可能發生這種情況。但是系統的所有參與者都能夠檢測到這種攻擊,因為它會導致一條長鏈的孤立。
這種問題最有可能來自區塊鏈的集中化,這是一個更大的安全問題。
5.1 防止集中化
權力下放的程度對系統的安全起著重要作用。集中式系統易受到操縱、審查和危害的影響。它們代表了使用者必須信任的單點故障。當集中式系統出現故障時,所有使用者都失效。
雖然區塊鏈可能從分散開始,但並不一定會以這種方式結束。這意味著需要一個簡單的衡量標準,告訴我們“分散式資料儲存”是否仍然是分散的:
你必須敲多少門才能與危害系統使用者?
我們可以通過計算以下實體來粗略地定義用於測量大多數區塊鏈分散的度量標準(每個實體在集中時對整個系統起單一故障點):
-
“開發者”——控制區塊鏈行為(原始碼)的參與方數量。
-
“節點”——區塊鏈副本的數量,由完整節點的數衡量。
-
“驗證者”——區塊鏈礦工/驗證者的數量,負責建立新區塊和授權交易。
由於任何一個組織的損害導致系統的損害,我們將區塊鏈的分散定義為:
Decentralization(Blockchain) = MIN("Devs",“Nodes”, “Validators”)
更通俗的說,使用者可以通過它提供的服務質量(QoS)來推斷資料儲存的分散。例如,如果使用者注意到他們突然無法更新其識別符號,這可能表明由於集中化而導致的審查。
5.1.1 防止集中化的資料儲存不可知協議
如果DPKI將特定區塊鏈指定為其“事實上分散式資料儲存”,那麼它就會對區塊鏈產生集中壓力。更糟糕的是,如果由於對鏈條缺乏興趣而導致區塊鏈被廢棄,那麼使用事實上的資料儲存可能會破壞DPKI。對特定區塊鏈進行編碼支援的軟體開發人員將不得不花費大量精力重寫該軟體以遷移到不同的區塊鏈。同時,可能存在嚴重的安全問題或QoS問題。
因此,使用不可知協議訪問分散資料庫是確保DPKI整體功能和分散的基本要求。如果不同的資料儲存更好地滿足其需求,則不可知協議使使用者和開發人員能夠更輕鬆地進行遷移。僅僅存在這種可能性就會產生分散的資料儲存市場,以滿足使用者的需求。
5.2 安全訪問區塊鏈資料
大多數終端裝置由於所需的資源而無法執行完整節點,那麼客戶端如何安全地訪問該區塊鏈?
一種解決方案是是進行區塊鏈版本的融合,其中一組“區塊鏈公證人”告訴使用者區塊鏈維護的特定物件的狀態,並且客戶端軟體檢查一組可信的公證人之間的一致性協議。然而,這條路線可能會破壞區塊鏈技術的主要目的:消除對可信中介的需求。
幸運的是,還有另一個技術解決方案:輕客戶端協議。輕客戶端下載區塊鏈的較小部分,足以提供比可信中介提供更強的安全保證,且足夠小以供任何現代裝置使用。附錄“輕客戶端詳細資訊”中討論了輕客戶端協議如何工作的詳細示例。
對於缺少輕客戶端的區塊鏈,預設值應該是基於可信節點的隨機抽樣的類似收斂的一致共識。這些節點都應該看到相同的鏈,所以即使其中一個節點不一致,則表明有什麼不對勁並且應該報告事件。
一般來說,這表明採用模組化設計,裝置可以與任意區塊鏈通訊並使用該鏈可用的最安全技術。沒有單一技術提供最大的安全性,在這種情況下,最少數量的技術可以組合起來以提供裝置維持的最高安全級別。
5.3 防止審查制度
最後,DPKI的安全性必須解決審查問題:終端使用者是否可以訪問資料儲存。如果ISP正在審查區塊鏈,則區塊鏈無用。
諸如網狀網路、代理和洋蔥路由之類的審查規避技術可用於繞過區塊鏈網路的審查。
一個單獨但相關的問題是對區塊鏈引用的資料進行審查,例如當雜湊值儲存在識別符號的值中,該雜湊值表示的資料儲存在別處。在這種情況下,除了在各種不同的儲存機制上查詢雜湊之外,還可以使用相同的技術(例如,洋蔥路由,代理)[參見IPFS,Blockstore]。
6、 恢復丟失的識別符號 - 私鑰管理
識別符號的強大可靠的所有權可以使這些識別符號非常有價值。識別符號可用於驗證使用者的房門、車等。這些識別符號開始代表“王國的鑰匙”。如果這些識別符號丟失或受損,那將是災難性的。因此,解決這個問題對DPKI的成功至關重要。
6.1 兩種形式的丟失
由於其重要性,必須通過建立在DPKI之上的任何身份系統來最小化主金鑰的使用。事實上這是如Blockchain ID等身份系統已經採用的方法。不使用主金鑰對訊息進行簽名,而是為與識別符號一起使用的每個新服務建立子金鑰。
這意味著有兩種型別的金鑰可能會丟失或洩露:
-
主私鑰,用於控制與識別符號關聯的資料。丟失此金鑰可能意味著失去對線上身份的控制權。
-
子金鑰,連結到識別符號並存儲為識別符號資料的一部分。
主金鑰和子金鑰的安全性和恢復屬性略有不同。以下是兩種可能性的概述; 對這個主題的完整處理超出了本文的範圍,留待未來進行。
6.2 恢復主金鑰
控制識別符號的主金鑰的人是識別符號的主人。
有多種機制可用於在分散系統中恢復主金鑰。
6.2.1 重組主金鑰分片
通過將主金鑰碎片分發給可信實體,主體可以防止主金鑰丟失。Shamir 祕密共享和閾值簽名是兩種可用於生成和重組這些分片的技術。
如果發生丟失,主體將向M個實體索要N個主金鑰的分片。N是恢復所需的不同分片數。收到N個分片後,主金鑰將被成功恢復。
然而,這種技術在主金鑰洩露的情況下對保護主體沒有多大作用。
6.2.2防止損害
損害的危險來自於任何時間點擁有主金鑰的單個實體。我們可以通過確保任何單一實體在任何時間點都不擁有主金鑰來解決此問題。
例如,我們可以設想一個系統,在註冊時,使用者可以選擇他們信任的五個實體來保護他們的身份。這些實體可以由可信任的人、組織或甚至裝置來代表。雖然他們像權威一樣行事,但他們從不強迫任何人,而且總是由主體自己挑選。
然後主金鑰短暫生成,分解成碎片,傳送到這些實體,並立即銷燬。可以使用閾值簽名方案來代替Shamir祕密共享,以便永遠不需要在任何給定裝置上完全重新組合主金鑰。
6.2.3使用智慧合約
一些區塊鏈(如以太坊)支援任意計算。在這種情況下,主體可以建立與其偏程度成比例的恢復機制。
作為一個簡單的例子,像Google這樣的公司可以通過使用智慧合約來更新其價值的名稱空間來保護他們對區塊鏈域的控制。智慧合約只有在接收到由10個實體中的6個簽名的訊息時才能夠編碼,或者遵循任何其他任意邏輯。
6.3 恢復和/或撤銷子金鑰
與主金鑰的丟失或損害相比,子金鑰洩露或損失不太重要,因為驗證通常使用識別符號的當前子金鑰集來完成。如果子金鑰丟失或受損,主金鑰可以簡單地用於安全地生成和替換區塊鏈中的舊子金鑰。但根據它們的使用方式,舊的子金鑰可能仍然需要恢復或撤銷。
如前所述,主金鑰的重要性意味著通過識別符號的子金鑰簽署的訊息進行身份驗證,而不是通過主金鑰簽名的訊息進行身份驗證。但由於這些訊息通常與識別符號本身相關聯,因此它們實際上是由主金鑰簽名的(因為主金鑰直接與識別符號繫結)。因此,主金鑰仍可用於簽署和傳播撤銷一個或多個歷史子金鑰的訊息。
可以使用先前描述的分片機制來恢復丟失的子金鑰。或者與上述基於分組的恢復方案一樣,主體可以選擇將其標識的許可權指定給一個組。該組可以將新子金鑰簽名為屬於識別符號,並且能夠簽署指示舊金鑰被洩露並因此被撤銷的訊息。
7、結論
在本文中,我們討論瞭如何通過全域性可讀的識別符號(如網站域名)線上管理身份。我們在網際網路的兩個主要身份管理系統中發現了各種安全和可用性問題:DNS和X.509 PKIX。我們確定這些問題的根源是這些系統的集中性質,他們阻止了識別符號代表的實體真正控制它們,從而使第三方有危害其安全的可能性。
然後,我們展示瞭如何通過使用分散key-value資料儲存(如區塊鏈)來解決DNS和PKIX的安全性和可用性問題,從而為分散式公鑰基礎結構(DPKI)建立規範。在描述DPKI的屬性時,我們發現DPKI甚至可以在資源受限的移動裝置上執行,並且能夠通過保護組織免受私鑰丟失或損害來保護識別符號的完整性。
我們未來的工作是通過像IETF這樣的網際網路標準機構為DPKI制定完整的規範。
附錄:輕客戶端詳細資訊
資訊型別
輕客戶端想要知道什麼樣的資訊?
以下是一些例子
-
確定建立或首次看到特定記錄的時間
-
查詢當前與帳戶ID關聯的公鑰
-
查詢當前與域名關聯的IP地址和其他資料
-
瞭解金鑰的撤銷(沒有指定的查詢替換金鑰的過程)
-
確定開發人員為特定軟體包釋出的最新版本
更通俗的說,我們可以將其分解為三類問題:
-
證明存在:證明在T時刻發生了特定型別事件。
-
證明不存在:證明在時間T_1和T_2之間沒有發生特定型別事件。
-
證明狀態:證明應用程式的“狀態”,可能是複雜的“狀態轉換”規則的結果,應用了許多事務,在時間T等於X。
這些大致按照難易程度的順序排列。證明存在是最容易的,證明狀態是最難的。
安全等級
一般來說,區塊鏈上層的輕客戶端協議可以提供三個級別的安全性:
-
最高安全性:如果輕客戶端進行查詢,並且任何節點以對該查詢的有效回覆進行響應,則(假設我們可以檢測到阻止預防攻擊),輕客戶端可以立即學習(i)查詢的正確答案,或(ii)答覆無效,應予以忽略。
-
1-of-N信任安全性:如果輕客戶端進行查詢,並且它被接受為安全假設,即至少一個誠實的節點在T秒內正確響應,則輕客戶端可以在T秒後學習正確答案,無論有多少離線/故障/拜占庭節點。
-
N/2-of-N 信任安全性:如果輕客戶端進行查詢,它必須選擇信任響應的一組節點(比如100),然後從該列表中隨機抽樣3個左右的節點並要求一致響應。只要所有3個節點不共謀,它就會得到正確的答案。如果任何節點處於離線狀態,它可以繼續隨機搜尋線上節點,直到它檢查到某個節點的上限閾值,並在達到該閾值時發生嚴重故障並出現錯誤。
作為這些模型如何應用的示例:請考慮“查詢與帳戶關聯的當前公鑰”的簡單情況,假設存在一個有權撤銷和替換金鑰的主金鑰(或一組主金鑰)。假設我們有一個區塊鏈,其中只有交易被放置在Merkle樹中。然後,輕客戶端傳送請求,要求網路提供替換公鑰的最近事務的Merkle證明。如果客戶收到答案,它知道:
-
使用最高安全保證,這是過去某個時刻的有效金鑰。這是“存在證明”問題。
-
使用1-of-N信任安全保證,這仍然是有效的金鑰。(從理論上講,可能存在更新的替代交易,但100%的合謀或審查可能導致客戶從未了解過它)。這是“不存在證明”問題。
對於具有更復雜需求的協議(例如,實施複雜的名稱註冊規則),我們被迫處理更普遍的“證明狀態”問題。如果我們使用只跟蹤事務的簡單區塊鏈,客戶端只能通過N / 2-of-N信任安全保證知道答案。但是,如果我們有一個區塊鏈,狀態位於Merkle樹中,那麼客戶端可以絕對地學習任何具有最大安全保障的事實。
由於不同區塊鏈對Merkle證據的使用程度不同,我們提出的解決方案是開發一種抽象協議,通過該協議可以使用不同的區塊鏈(因為沒有單個區塊鏈被100%保證不會有致命缺陷,我們需要一個類似於用於加密演算法選擇的抽象模型),並根據區塊鏈的功能自動嘗試提供最佳安全級別。公證人可以作為支持者使用,但是會存在區塊鏈外掛,客戶端可以安裝這些外掛來支援特定的區塊鏈。根據區塊鏈是否支援針對特定型別問題(存在證明,證明狀態等)的強大安全保證,智慧地進行區塊鏈查詢,從而提供儘可能多的安全性。
輕客戶端協議
輕客戶端協議通常分兩個階段工作。
首先,輕客戶端僅下載鏈的一部分,通常是塊頭。對於包含元資料的每個塊,塊頭通常包含非常少量的資訊(通常為80-600位元組),例如(i)工作隨機數證明; (ii)加密雜湊樹的根,例如Merkle樹,包含諸如交易之類的資料; 和(iii)區塊鏈可能跟蹤的應用程式的狀態。
其次,客戶端使用區塊鏈的基礎共識演算法(例如檢查工作證明或證明簽名)來驗證塊頭。之後,客戶端將塊頭視為“可信”。它應用加密技術,將塊頭中的資料用作“根雜湊”,從中可以驗證關於儲存在區塊鏈中的其餘資料的宣告。
獲取塊頭
瘦客戶機端的首要任務是下載並驗證塊頭。假設有一個有效的網路連線,這很容易。例如,在工作量證明的情況下,客戶端向網路請求儘可能多的塊頭,網路回覆,並且客戶端檢查以確保每個塊頭具有有效的工作證明,然後確定“最長”的有效塊頭(其中“最長”表示“代表最累積的工作”)。存在更高階的使用跳過列表的協議,以至於客戶端甚至不需要下載每個塊頭,儘管對此的深入討論超出了本文的範圍。
這種機制面臨的主要挑戰很簡單:如果網路連線受到威脅會怎樣?潛在地,網際網路服務提供商可以通過審查告訴客戶端關於官方鏈的回覆來攻擊使用者,並告知使用者他們自己的分支。通過工作量證明協議,可以通過注意到塊生產率的降低來統計檢測到這一點; 然而,需要更多的研究來確定最佳和最可靠的方法。
用Merkle樹進行驗證
在輕客戶端成功接收到一小段“可信”資料後,它必須能夠驗證關於區塊鏈中其餘資料的宣告。這依靠Merkle樹。 Merkle樹是一種雜湊演算法,其中大量“資料塊”一次雜湊幾塊,然後將所產生的雜湊放入小組中,並且遞迴地雜湊直至該過程生成一個雜湊值,稱為根。這個簡單的描述顯示如下:
這種方法的好處是可以通過Merkle分支來證明樹中任何單個數據塊的成員資格,Merkle分支是樹中節點的子集,其值用於計算根雜湊的過程。
只有這組節點,輕客戶端就可以驗證樹中特定塊是否具有特定的證據。該方案能夠確保抵碰撞; 為了讓攻擊者欺騙該方案,攻擊者需要打破底層的雜湊函式。有許多不同種類的Merkle樹,包括簡單的二叉樹和更高階的設計,如Merkle Patricia樹,允許有效的插入和刪除操作,但基本原理是相同的。
版權申明:本內容來自於網際網路,屬第三方彙集推薦平臺。本文的版權歸原作者所有,文章言論不代表鏈門戶的觀點,鏈門戶不承擔任何法律責任。如有侵權請聯絡QQ:3341927519進行反饋。