跨链(1) 设计链间的信任
摘自wecross公眾號
1. 場景
跨鏈的基礎操作為:對方鏈執行某個操作完成后,本地鏈才可執行另一個操作。
區塊鏈A的執行結果被發到區塊鏈B上。區塊鏈B在執行請求Y前,必須先判斷X是否上鏈。判斷的方法是,在區塊鏈B的運行環境中,驗證區塊鏈A與X相關的執行結果是否有效。驗證通過,表示X已上鏈,區塊鏈B可繼續執行后續步驟:發送請求Y,在區塊鏈B進行上鏈。
問題:區塊鏈B必須信任區塊鏈A的執行機制。
2. 方案研究
執行結果的驗證劃分為以下四層
- 驗區塊連續:在驗證開始時,需確認數據來源,基于區塊鏈的連續性,驗證區塊是否歸屬于指定區塊鏈,防止攻擊者用任意區塊鏈的區塊進行偽造。
- 驗區塊共識:在確認來源后,需驗證區塊是否代表對方鏈的整體意愿。此步驟驗證區塊的共識信息是否符合要求,防止攻擊者用未經過共識的區塊進行偽造。
- 驗交易存在:區塊被驗證合法后,需驗證指定交易是否屬于此區塊。不同鏈有不同驗證方法,下一節會展開描述。
- 驗交易正確:交易存在性得到驗證后,并不能代表此交易確實是跨鏈場景下預期的操作,還需結合業務場景,判斷交易的具體內容是否符合預期。
2.1 驗區塊連續
不同區塊鏈只在哈希算法和計算區塊哈希的字段上存在差異。驗證區塊鏈連續性,只需按照相應鏈的實現,驗證區塊依次相連成鏈即可。
2.2 驗區塊共識
驗區塊共識,即驗證區塊的共識信息是否符合對應的算法條件。不同算法有不同的實現。此處給出最具代表性的兩種共識算法:POW(工作量證明)和PBFT(實用拜占庭容錯)。
2.2.1 POW
定義:POW 屬于最終一致性共識算法,通過最長鏈和延遲確認的方式逐漸讓共識結果收斂一致。
WeCross實現:
- 驗難度:驗證區塊的nonce是否滿足工作量證明條件
- 驗延遲:驗證當前塊是否低于已知最高塊N個塊(N可取為10,表示1個小時前的區塊)
- 驗最長鏈:引入多方,驗證當前區塊處于最長鏈上,防止單方面謊造最高塊高和偽造分叉鏈進行作惡
2.2.2 PBFT算法
定義:PBFT算法在多方共識后立即達成一致,區塊鏈不存在分叉和回滾的可能。在算法中,節點通過多次相互廣播簽名以達到共識。在區塊中,足夠數量的簽名代表了區塊的合法性。
WeCross實現:
- 配置公鑰:事先配置對方鏈共識節點的公鑰
- 驗簽名:用事先配置的公鑰驗證區塊中簽名的有效性,并判斷有效簽名數量是否達到PBFT共識條件
2.3 驗交易存在
驗交易存在同樣需要根據不同實現判斷,比較有代表性的是SPV(簡單支付驗證)和背書策略。
2.3.1SPV
定義: SPV初衷是為了實現輕客戶端,目前已在大多數區塊鏈上實現。隨著跨鏈技術興起,此技術也被用作驗證區塊中某數據的存在性。以交易為例,區塊頭中記錄了當前區塊內所有交易哈希組成Merkle樹的樹根,即“交易根”。任何一筆交易,都唯一對應了一條通向交易根的Merkle path。區塊內不存在的交易,無法偽造出通向交易根的Merkle Path。
WeCross實現:需驗證某交易的Merkle Path,即可判斷某交易是否屬于某區塊。
2.3.2 背書策略
定義:背書策略為Hyperledger Fabric所采用。在Fabric中,每筆交易都需滿足某個事先定義好的背書策略。交易在執行時會被多個背書節點簽名,當各方簽名滿足背書策略時,此交易才被認為有效。Fabric將背書節點簽名信息作為交易的一部分保存于區塊中。多筆交易組成區塊內的交易列表。交易列表以二進制形式計算哈希值,此哈希值被記錄于區塊頭中。
WeCross實現:需判斷交易是否在交易列表中(且對應flag有效),并校驗交易列表哈希值,即可初步判斷交易的存在性。后續將結合背書策略,驗證交易的背書節點簽名,進一步增強交易存在驗證的有效性。
2.4 驗交易正確
驗交易正確,是根據業務的預期參數判斷前三步驗證的交易哈希(或二進制)是否是業務預期的那個操作。eg,預期操作為transfer(a, b, 100),則相應的交易內容不能是get(a)。驗證時,需根據交易的編碼方式和哈希算法,校驗業務預期參數與交易哈希(或二進制)是否對應。不同區塊鏈實現的差別只體現在交易編碼和哈希算法上,根據鏈實現采用相應方法進行校驗即可。
WeCross實現:在不同鏈的插件實現了不同的校驗邏輯。
- FISCO BCOS插件采用的是RLP編碼和SHA-256哈希算法,驗證的是交易哈希是否正確;
- Fabric插件則采用ProtoBuf編碼,驗證的是交易二進制是否正確。
3. 解決方案
- 驗區塊連續:FISCO BCOS通過比對區塊頭中父區塊哈希與真實的父區塊哈希,驗證此區塊是對方鏈的區塊。
- 驗區塊共識:通過校驗當前區塊的簽名列表,判斷合法簽名數量是否滿足PBFT共識條件,確認當前區塊代表了對方鏈的整體意愿。
- 驗交易存在:通過驗證交易哈希通向交易根的Merkle Path的正確性,可判斷交易已存在于區塊鏈上。- 驗交易正確:通過驗證業務預期、交易二進制、交易哈希的對應關系,可判斷交易是業務預期的那個操作。
四個層次驗證通過后,說明業務所預期的操作已在對方鏈上上鏈,驗證完成。
總結
以上是生活随笔為你收集整理的跨链(1) 设计链间的信任的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微众WeCross 跨链平台(13)开发
- 下一篇: PKI/CA (6)双证书