現今,越來越多的企業(yè)與投資機構正涌入區(qū)塊鏈行業(yè)。與個人用戶使用的冷熱錢包保護資產不同,企業(yè)與投資機構由于資金量大而需要更高級別的安
現今,越來越多的企業(yè)與投資機構正涌入區(qū)塊鏈行業(yè)。與個人用戶使用的冷熱錢包保護資產不同,企業(yè)與投資機構由于資金量大而需要更高級別的安全性,因此多方密鑰托管服務應運而生。
多方密鑰托管是指資產需要 M 個中的 N 個密鑰(M>N)才能夠轉移,其中部分密鑰由專門的托管方所保護。目前的密鑰托管服務存在隱私性不足的問題,面臨著權威機構的審查與干預的風險。本文提出一種基于 BLS 和盲簽名的多方密鑰托管服務以解決上述問題。
多重簽名技術
多方密鑰托管服務以 Bitcoin 的多重簽名技術為最基本實現。BTC 的多簽技術最初在 BIP11 中進行了論述。假設一個 2/3 的多重簽名錢包,通過將某一個密鑰托管至專業(yè)的托管方,必須有 2 個以上的密鑰才能夠轉移該資金。這防止了單一密鑰的風險,黑客盜取某一密鑰將無法轉移資金。與此同時,這也能夠防止密鑰丟失的問題:假設丟失了其中一個私鑰,用戶也能夠再次設置另外一個 2/3 多重簽名,并寫入重新生成的公鑰即可。
除此之外,多簽技術的應用領域廣泛。在企業(yè)中,多簽技術能夠防止單一人員控制企業(yè)資產的風險。在商業(yè)交易中,假設交易雙方互不信任,可以使用多簽技術選擇獨立第三方作為交易簽名者,以防止某一交易方的不誠信行為。
多重簽名技術極大地提升了資產的安全性,并拓展了區(qū)塊鏈的應用場景。但是多重簽名技術的隱私性并無法得到保障,在解鎖多簽腳本時將暴露多簽的公鑰:
m {pubkey}...{pubkey} n OP_CHECKMULTISIG
公鑰隱私(地址)的暴露便捷了權威機構的審查與干預,權威機構可以根據多簽公鑰快速定位托管方以及審查對象,并要求當地運營的托管方對某些用戶拒絕提供簽名服務,甚至強制資產轉移。
BLS 簽名技術
就上述問題而言,BLS 簽名技術提供了相對好的隱私性。BLS 簽名所能夠實現的功能與目前 BTC 的多重簽名是一致的,但在鏈上僅表現為單一聚合簽名。在具體的實現中,BLS 簽名將密鑰拆分成 M 份分發(fā)給 M 個人,只需要有 N(N 小于等于 M)個人進行簽名,就可以進行解簽并轉移該密鑰下的數字資產。
在采用 BLS 簽名的情況下,參與多簽的用戶與托管者信息及其數量從未暴露。但是當用戶需要使用該資金并請求托管方進行簽名時,用戶需要將交易哈希發(fā)送至托管方進行簽名。如果交易成功上鏈,托管方就能夠掌握用戶的公鑰,也因此本質問題并未解決。
多方盲簽名技術
根據上文的論述,我們只需要在用戶請求托管方簽名時,不傳遞交易哈希(或者其他可能暴露用戶信息的數據)就可以將用戶信息與托管方相隔離,間接地解決上文中的諸多問題。此處需要引入盲簽名的概念。盲簽名由 David Chaum 于 1982 年提出,一般用于如下場景:用戶 A 的交易需要用戶 B 進行簽名,且不希望用戶 B 知道簽名信息。
我們將盲簽名與 BLS 簽名技術相結合,就能妥善地解決多簽隱私問題,其具體流程如下:
1. 用戶為多個資產托管方生成私鑰份額,并通過秘密的方式發(fā)送給對應的托管方;
2. 當用戶需要對消息簽名時,先對消息進行盲化處理,然后再發(fā)送給選定的托管方進行簽名;
3. 托管方響應用戶的簽名請求,將盲化交易簽名后發(fā)送給用戶;
4. 用戶收集好一定數量的托管方簽名后,進行去盲操作,計算出用戶自己的簽名。
Bingo!通過這種方式,托管方不僅無法掌握用戶的公鑰信息,在類似 Bitcoin、Ethereum 這樣交易量大的區(qū)塊鏈中,亦不可能鎖定用戶的交易信息。用戶既能夠享受到多簽技術帶來各種優(yōu)勢,也能夠保證良好的隱私性,因此避免了上文中描述的諸多問題。在這種方案下,托管方所承擔的責任也僅僅是維護私鑰份額的安全,與用戶進行了風險隔離。
Nervos 能更好適配新密碼學算法
具備隱私特性的多簽算法能夠擴展區(qū)塊鏈的應用場景,但是并非所有的區(qū)塊鏈都支持 BLS 簽名。BLS 簽名的驗簽速度低于目前比特幣使用的 ECDSA 算法,更低于 Blockstream 團隊所建議的 Schnorr 簽名算法(https://medium.com/cryptoadvance/bls-signatures-better-than-schnorr-5a7fe30ea716)。因此,將 BLS 簽名算法作為區(qū)塊鏈預設的簽名算法會極大地降低整體區(qū)塊鏈的吞吐量。對于大多數只支持單一簽名算法的區(qū)塊鏈來說,BLS 簽名算法不是好的選擇。
Nervos 為此給出了答案。Cipher 在《Nervos CKB 應用層優(yōu)勢二:安全與便捷兼得》(https://talk.nervos.org/t/nervos-ckb-2/2862)中談到:和幾乎所有的公鏈項目不同,Nervos CKB 將密碼學算法作為抽象的原語與底層剝離。用戶可以指定自己的資產或合約采用任意預定義的密碼學算法來驗證授權。這意味著在 Nervos 上可以部署任何種類的密碼學算法作為交易的驗簽算法,無需通過硬分叉的方式獲得支持。
相信 Nervos 的這一特性能夠促進更多密碼學創(chuàng)新應用的出現。(Chendibo)