作者:Erik De Smedt

“hArk(運用哈希鎖的 Ark)” 最早在 Delving Bitcoin 論壇的一篇文章中出現,並已經在我們的 Ark 實現的 v0.1.0-beta.6 版本中發佈。hArk 是我們對 Ark 協議實現的一次更新,在根本上改變了回合(round)的構造方式。更新之後,用戶的 “棄權交易(forfeits)” 依賴於哈希鎖而非 “連接器輸出(connectors)”,並且是在回合的注資交易廣播 之後 簽名(而不是提前簽名)。
hArk 使得在 Bark 上開發移動端應用變得容易得多,它支持 “委託刷新(delegated refreshes)”,因為移動設備無法被可靠地喚醒以參與回合簽名流程,所以這是必要的機制。與標準的自主簽名刷新相比,委託刷新在安全性上有一些犧牲,但請放心,自主簽名刷新仍然是默認的信任模型,協議的核心沒有改變。
說實話,我們在實現 hArk 時有所猶豫,因為知道這會延遲主網發佈。但這總歸是必要的 —— 比起一開始就帶有新的回合模型,在用戶和集成者已經開始適應舊的模型後再進行改造會痛苦得多。現在它已經就緒,我們很高興——我們希望 Bark 自始至終對移動端友好。
(曾經的)回合機制:先簽名棄權交易,再廣播注資交易
在 Ark 協議中,用戶必須定期刷新他們的 Ark 餘額,將舊的 VTXO 作廢並以一次原子化操作獲得新的 VTXO。
在經典 Ark 中,回合按以下順序進行:
- 提交請求:用戶告訴服務商他們想刷新哪些 VTXO。
- 構建樹並聯合簽名:服務商構建一個注資交易和包含所有新 VTXO 的交易樹;這棵交易樹的用戶們聯合簽名所有相關的交易。
- 為棄權交易簽名:用戶為其舊的 VTXO 簽名棄權交易。
- 廣播:服務商廣播注資交易。
因為花費了連接器輸出,棄權交易成為有條件生效的:連接器是注資交易中的粉塵級輸出(極小面額),棄權交易將其作為輸入。如果注資交易沒有上鍊,連接器不存在,棄權交易就無法被花費。但這種條件性是單向的:棄權交易依賴於注資交易,但新的 VTXO 並不依賴於棄權交易。因此服務商必須在廣播之前收集每個棄權交易的簽名。

這種模型對始終在線的桌面客戶端來說沒有問題,但移動操作系統(尤其是 iOS)往往無法可靠地喚醒設備來參與交互式的回合流程。為了讓移動端應用可用,我們需要一種辦法,讓移動端應用可以刷新而無需用戶參與交互式的回合流程。
唯一不使用 “限制條款(covenant)” 的方式,是讓一組分佈式的聯合簽名人代表用戶簽名刷新操作、讓用戶稍後再領取自己的新 VTXO(也即 “委託刷新”,我們後文再詳談)。但是,因為棄權操作被嵌入了交互式的回合機制,我們無法實現委託刷新 —— 棄權交易簽名需要用戶的私鑰,而將私鑰交給第三方聯合簽名人是不能接受的。我們需要把棄權步驟完全移出回合並使其異步化。
現在的回合機制:先廣播,再棄權
連接器不能滿足需求,所以我們回到設計板,最終採用了哈希鎖和原像 —— 這種密碼學機制在閃電網絡中已經得到了驗證。哈希鎖提供了我們所需的雙向條件性:新的 VTXO 依賴於棄權交易,同時棄權交易也依賴於新的 VTXO,從而允許我們把棄權步驟完全移出交互式回合。
在 hArk 中,步驟 3 和 4 互換位置,並且步驟 4 可以在回合窗口之外完成:
- 提交請求:用戶告訴服務商他們想刷新哪些 VTXO。
- 構建樹並聯合簽名:服務商構建一個注資交易和包含所有新 VTXO 的交易樹;這棵交易樹的用戶們聯合簽名所有相關的交易。
- 廣播:服務商廣播注資交易。
- 為棄權交易簽名:用戶在方便的時候為他們的舊 VTXO 簽名棄權交易。服務商在收到每個用戶的 棄權交易簽名後揭示一個原像。
將棄權步驟與回合拆分之後,委託刷新成為可能。聯合簽名人現在可以在回合期間為移動端用戶預先簽名交易樹上其所屬的分支,用戶的錢包再次上線時再收集這些已簽名的交易 —— 無需在回合期間喚醒設備。下面會詳細介紹委託刷新的機制。
另一個有價值的副產品是減少了回合的拒絕服務(DoS)攻擊界面:一個用戶未能簽名其棄權交易不會再阻塞其他人,因此回合對錢包開發者和用戶變得更加可靠。
哈希鎖棄權交易的工作原理
這種雙向依賴通過一個秘密值來實現:交易樹中每個 VTXO 的 “退出交易(exit transaction)” 都被一個只有服務商才知道的原像 p 鎖定,且服務商只會在收到簽好名的棄權交易後揭示 p。服務商可以先廣播注資交易,這是安全的,因為在沒有 p 的情況下,用戶無法訪問他們的新 VTXO。當用戶為他們的棄權交易簽名時,服務商揭曉 p,這同時激活用戶的新 VTXO 並給服務商能力去申領舊的 VTXO。

棄權交易是一個兩步過程:
- 用戶為棄權交易交易簽名,將其舊 VTXO 轉入一個棄權交易輸出,這個輸出的其中一條花費路徑帶有以
p為原像的哈希鎖,而另一條花費路徑帶有時間鎖(如上圖中間的Forfeit輸出)。 - 服務商現在持有已簽名的棄權交易。如果用戶試圖單方面將舊 VTXO 退出到鏈上,服務商可以廣播 棄權交易並通過揭示原像來申領資金。
如果服務商拒絕揭示 p,用戶的比特幣仍然安全。他們可以在鏈上發起舊 VTXO 的退出操作,會發生以下兩種情況之一:
- 服務商無動作,用戶在時間鎖解鎖後收回他們的比特幣。
- 服務商廣播 “棄權交易的申領交易”(即上圖中間的
Forfeit claim交易),從而在鏈上揭示p。用戶隨後使用該p來激活自己的新 VTXO。
無論哪種情況,用戶都不會丟失比特幣。
委託刷新:為移動設備帶來的新模式
默認情況下,hArk 中的刷新仍然是自主簽名的:你親自為交易樹上的每一筆相關交易簽名。這些預簽名的分支交易構成你的單邊退出路徑 —— 如果你需要在沒有服務商配合的情況下將你的 VTXO 退出到鏈上,你可以廣播從交易樹樹根到你所在的葉子的交易鏈條。這是最強的安全模型 —— 完全不信任任何人 —— 但它要求在回合期間在線並參與簽名。對於在回合期間無法可被靠喚醒的移動操作系統,hArk 引入了委託刷新。
在委託模式下,一組聯合簽名人在回合期間預先為用戶的分支交易簽名。用戶的錢包再次回到線上時,會從服務商處收集這些已完全簽名的分支交易 —— 這給用戶同樣的單邊退出路徑(與自主簽名模式一致)—— 然後完成他們舊 VTXO 的棄權。服務商隨後揭示原像,從而激活交易樹中的新 VTXO。

所有聯合簽名人必須合謀,才能劫持一個用戶的 VTXO,聯合簽名人數目越多,這件事就越難。此外,聯合簽名人會在每個回合之後自動刪除簽名密鑰,從而提供前向安全性(forward security):即使聯合簽名人在回合期間正確運行,但之後被攻破,密鑰刪除也能確保該回合產生的 VTXO 仍然安全。只要在回合期間至少有一個聯合簽名人的軟件正確運行,合謀就不可能發生。
這兩種刷新模式並不互斥。任何錢包應用都可以同時提供兩種模式,根據連通性使用合適的模式。或者,安裝在多臺設備上的錢包可以讓一個桌面端來處理所有刷新,而把移動端的委託刷新作為應急機制。並且,委託了一次刷新的用戶總是可以在稍後自主簽名一次刷新,也就是回到完全免信任的模式。
但請注意,目前唯一的聯合簽名人是服務商本身。發佈能夠讓其他實體參與的聯合簽名軟件,是我們在主網發佈後優先要做的事情。
通往限制條款的墊腳石
絕大多數現有的比特幣限制條款提議,都將使我們能強制執行 Ark 的樹結構而無需預簽名的交易。用戶將獲得兩全其美的體驗:既能獲得像現在的自主簽名刷新模式一樣的免信任性,又能獲得現在委託簽名模式一樣的異步便利性。用戶依然需要定期回到線上以完成棄權交易,但無需在回合注資交易構造期間保持在線。
hArk 的設計之美在於,它幾乎可以直接映射成基於限制條款的 Ark。哈希鎖棄權交易機制、樹結構和回合流程都可以保持不變。因此,如果比特幣將來支持限制條款(夢想還是要有的),從 hArk 向限制條款版的遷移應該是絲滑的,幾乎不會打擾現有的集成者和用戶。
在 Bark 中已可用
hArk 已在 Bark 中實現 —— 請在 signet 上試用。還有,請訂閱我們的消息,以便第一時間收到 Second 的更多更新。
(完)




