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





