門限簽名技術(shù)及ZenGo錢包介紹
區(qū)塊鏈錢包作為數(shù)字貨幣世界的入口,它糟糕的體驗把大部分人擋在門外,說的就是你:助記詞備份(或私鑰備份)。現(xiàn)在一個激動人心的簽名方案讓體驗提升一大步,也是博客的主角:門限簽名技術(shù)及ZenGo錢包。
ZenGo錢包不需要備份助記詞,交易也不需要輸入密碼,一切只需要FaceID/TouchID。
私鑰是一切
在數(shù)字貨幣里擁有賬戶的私鑰就表示擁有了資金的所有權(quán),助記詞則是推倒出私鑰的一種方式,我有另一遍文章介紹過助記詞與私鑰的推倒關(guān)系[1],這里不復述。
為了保證資金的安全,助記詞(或私鑰)的保管就需要足夠的小心, 一方面我們要進行備份,乙方私鑰丟失,另一方面由于備份也會增加被盜風險,這也是錢包糟糕的體驗的一大原因(貌似安全和體驗無法兼得)。
為了提高資產(chǎn)的安全性,尤其是大額資產(chǎn),目前通常有這兩個方案:多簽簽名(MultiSig)和 密鑰共享(Secret Sharing)模式。
門限簽名(TSS)方案可以理解為是這兩個方式的結(jié)合,所以先介紹這兩個方案。
多簽簽名 MulTISig
如果大額的資產(chǎn),通常會使用多簽(MulTISig)的方式來分擔風險與責任,多簽通常需要有多個私鑰(N),只有當其中的M個私鑰參與的簽名,才可以動用資產(chǎn),因此正確使用(不把私鑰放在一起,由不同的人保管),確實可以提高安全性,因為即使部分私鑰被盜或丟失,資產(chǎn)依然是安全的。
多簽:一個有多把鑰匙的保險柜
使用多簽簽名時,還應該避免私鑰復用,私鑰復用會增加私鑰泄漏的風險。
多簽簽名通常使用鏈上合約(或腳本)實現(xiàn),這也給多簽帶來一個缺點:需要支付更高的交易費用以及多人異步簽名導致的更長的交易確認時間。
密鑰共享(Secret Sharing Scheme)模式
密鑰共享模式 (簡稱:SSS) 通過將密鑰分成多個部分并以冗余方式分開保管,發(fā)起交易則將一定數(shù)量的密鑰重新組裝為密鑰進行簽名,這個方案也可以密鑰被盜的分享,同時解決了上述多簽費用高的缺點。不過SSS 有一個主要缺點:當密鑰被重新組裝時,會為攻擊者提供了獲取密鑰的可乘之機。
密鑰共享:一個把鑰匙分層多個部分
門限簽名(Threshold signatures)方案
門限簽名方案(簡稱:TSS)則結(jié)合 SSS 和多簽的優(yōu)點,它基于多方安全計算 (MPC: MulTI-Party ComputaTIon ) 使用多個分片(目前是兩個部分)的秘鑰輪流進行(交易)簽名,生成最終有效的簽名。大家可以理解為:先用一個鑰匙旋轉(zhuǎn)一個角度,再用另一個鑰匙旋轉(zhuǎn)一個角度才可以打開保險柜。
技術(shù)細節(jié)可以閱讀ZenGo 說明[2]和論文:Fast Secure Two-Party ECDSA Signing[3]
門限簽名方案跟前面多簽和 SSS 方案不同的是:
?多簽通常是需要 M/N 個簽名,而門限簽名(目前)需要多方都參與簽名。
?多簽通常是鏈上進行的,費用較高,并且不同的鏈多簽的實現(xiàn)方案差別很大。而門限簽名是鏈下的純密碼學的計算生成簽名,兼容性更強。
?多簽是可以異步進行簽名,而門限簽名要求所有參與方在操作過程中都同時在線。
?和 SSS 也不一樣,SSS雖然分片密鑰,但是最終要重構(gòu)出密鑰來簽名,那么就存在單點故障和重構(gòu)出的密鑰被泄露的可能。而門限簽名不需要重構(gòu)出密鑰。
ZenGo 錢包
ZenGo 錢包則運用了門限簽名方案,它使用兩個獨立(部分)秘鑰來取代傳統(tǒng)的單個私鑰模式。其中一個秘鑰保存在手機上(用 TouchID/FaceID 授權(quán)訪問),另一個存儲在 ZenGo 服務器上,在進行交易的時候,手機和 ZenGo 服務器通信共同完成簽名。
實際使用時,ZenGo體驗很好,強調(diào) Keyless 概念,只需要touchID或faceID 授權(quán)就可以進行交易。
注意:ZenGo僅用來做交易簽名,服務器和設(shè)備進行通信簽署交易,通信過程不會相互暴露秘鑰,僅僅是對簽名后的數(shù)據(jù)進行通信。
ZenGo的方案只要兩部分不同時發(fā)生問題(如泄漏),可以確保資產(chǎn)總是安全的, 我們分別考慮下設(shè)備丟失和ZenGo服務關(guān)停的問題。
設(shè)備丟失(或盜竊)怎么辦?
當設(shè)備丟失(或盜竊)時,獲得設(shè)備的人由于沒有我們的 TouchID/FaceID ,可以確保我們的資金不會被轉(zhuǎn)移。
那么如何取回自己的資產(chǎn)呢?ZenGo 錢包提供了一個對設(shè)備部分的秘鑰備份的方案:設(shè)備秘鑰通過加密之后存儲在 ZenGo 服務器上, 而對應的解密秘鑰則單獨存儲在個人 iCloud 帳戶中,通過兩步認證授權(quán)恢復解密秘鑰。
因此只要設(shè)備丟失和icloud關(guān)停兩件事情不同時發(fā)生,就可以還原出設(shè)備部分秘鑰,從而取回資產(chǎn)。
ZenGo 服務關(guān)停怎么辦?
盡管ZenGo宣稱有最好的安全性和穩(wěn)定性,ZenGo同樣提供了方案應對ZenGo服務關(guān)停的風險:
ZenGo 構(gòu)建了第三方獨立的托管服務 Escrow[4] 和 監(jiān)聽服務Trustee[5] 。
Escrow 可以理解為是ZenGo服務器的一個備份,而 Trustee 則會監(jiān)聽 ZenGo 服務的狀態(tài),當 Trustee 發(fā)現(xiàn)ZenGo 服務關(guān)停時,它會請求 Escrow 把對應的秘鑰轉(zhuǎn)移到每個用戶Github賬號。這種情況ZenGo錢包(客戶端)會進入恢復模式,從而還原私鑰,這個私鑰可以直接進行交易簽名進行資產(chǎn)轉(zhuǎn)移,也可以把這個私鑰導入到其他的錢包。
細節(jié)可閱讀參考文章4和5, 以下是一個恢復模式的示意圖:
ZenGo 開源與懸賞
ZenGo 可謂業(yè)界良心,不單提供了解決方案還開源了代碼Github[6] 同時為了提高安全性,ZenGo 開啟了懸賞計劃[7],如果你發(fā)現(xiàn)什么漏洞,1個BTC在等著你。