Kitty:大家好,我是 NextDAO 的 Lead Mod Kitty。很開心收到 Cheers Up 的邀請和信任,讓我來主持今晚的活動,今天是我第一次主持這麼強技術相關的主題,作為一個技術小白,專門提前做了一些功課。還好今天的嘉賓老師們都在 Mirror,Twitter 上有過內容產出,給我提供了一些學習資料。
本次活動嘉賓包括慢霧團隊、Cobo、知名KOL 知縣,以及Cheers Up團隊。
Kitty: OK,先跟大家介紹一下,為什麼會有今天這個主題的活動。在隔壁都在聊香港新政,聊行情的時候,咱在這兒聊安全。
其實在 Web3 世界裡錢包的安全性一直是個很大的問題和熱點。我們幾乎每天都能看到某項目方的錢包被盜了,價值多少多少萬美元。
最近的一次大範圍被盜可能是今年 8 月份 Solona 生態上的錢包,總共有 9000 多個錢包被清空。今天凌晨,Deribit 的熱錢包被盜了 2800 萬美金。所以說錢包安全,不僅對於 Web2 想進入 Web3 的人來說是個大門檻,對於已經在 Web3 的用戶來說,也是一片黑暗森林。我們每天會收到無數個陌生鏈接,通過 Twitter,discord,甚至微信群發給你,可能你無意中點一下授權,錢包裡的小圖片就不見了。
那 CheersUP 作為一個 NFT 項目方也很關心 holder 們的錢包安全,因為很多買 NFT 的朋友並不太知道錢包裡潛在的風險,因為玩 NFT 的用戶整體上都很年輕,他們踏入 Web3 的第一步,可能就是買 NFT。所以我們也希望通過今天的活動能讓 holder 們網上沖浪的時候,能更多留意這個事情。
好,那咱們接下來就進入正式的 AMA 環節。首先,聊錢包的話,就不得不聊助記詞,很多人說助記詞是反人性的東西,因為現在的 MPC 技術其實理論上是可以達到不用用戶自己去保管助記詞,那第一個問題就是,
Cobo:MPC 指的是多方安全計算,我這裡先引用下學術上對 MPC 的一個定義:MPC 指的是在無可信第三方的情況下,多個參與方協同計算一個約定函數,除計算結果以外,各參與方無法通過計算過程中的交互數據推斷出其他參與方的原始數據;這個定義比較拗口,簡單來說,就是在保證各自數據隱私的前提下,基於大家的隱私數據完成一個協同計算;這裡可以舉個更具體的例子,假設 A 和 B 是兩個百萬富翁,他們想知道誰更有錢,但是又不想暴露自己的具體資產數額,這時他們就可以通過使用 MPC 的技術來計算,在滿足隱私的前提下,得到誰更有錢這個結論。
剛剛說的這個例子是姚期智先生在 80 年代提出的著名的百萬富翁問題,這個問題也是整個 MPC 學術領域的一個開創性的問題。
Kitty:我怎麼聽你說的這個意思,MPC 技術跟 ZK 零知識證明很像呢?都是在不暴露或者少暴露隱私的情況下,就能得到答案或者完成計算。
Cobo: 是的,MPC 的問題具體來說也可以在細分為一些不同的安全模型,一種比較簡單的模型是,假設參與方都是誠實的,他們僅僅只是不想暴露各自的隱私,但是每個人都不會作惡,此時 MPC 運算會相對容易實現;另一種更通用的模型是,假設參與方相互之間是不信任的,是有作惡的可能性的,此時的 MPC 運算,一般都需要結合零知識證明才能得到正確的最終結果。
具體到我們的數字貨幣錢包,其實我們目前真正會用到的是 TSS(也就是門限簽名算法),門限簽名算法中會用到一些 MPC 的技術來解決核心的隱私計算問題,所以可以認為門限簽名技術是 MPC 的一個具體應用。而且此時會假設參與方之間是不信任的,所以如果大家深入去看門限簽名算法的實現,裡面大量採用了零知識證明的方式去確保沒有人作惡。我們目前大部分時候為了簡單,就直接把門限簽名錢包稱作為 MPC 錢包了,不過這些基礎概念還是希望給大家講清楚的。
Kitty:那目前支持 MPC 的產品有哪些呢?
Cobo: 目前支持 MPC 的產品已經有很多了,我這裡可能無法一一列舉,就說幾個我印像比較深的吧;ToC 的產品中,ZenGo 是我覺得目前在產品層面和在開源貢獻方面都做的很不錯的一家公司,他們應該也是這個方向最早期的創業公司之一;ToB 方面,目前市場份額最大的應該還是 Fireblocks,此外安全鷺是一個我們華人的創業項目,他們在產品層面以及開源貢獻方面也都是做的非常不錯的,Cobo 也參與了安全鷺這個項目的投資;同時,我們 Cobo 的 Custody 服務目前也在增加 MPC 的支持,在很近的將來(應該就是最近一兩個月),也會對外提供 MPC 協管錢包的服務,感興趣的小伙伴可以關注下。
Kitty:不錯不錯,支持。看看慢霧的朋友有沒有補充。
慢霧:MPC 的英文全稱為:Multi-Party Computation,也就是多方計算,它是一種密碼學技術,通過該技術,所有參與方為了完成一項任務而執行複雜的聯合計算,而他們的數據保持私有和安全,不與其他參與方共享。
具體到 MPC 錢包,或者更加專門化的門限簽名錢包,通過對私鑰進行多方計算在鏈下實現安全的多方共同管理賬戶等複雜的驗證方式。
簡單來說,就是將一個私鑰安全打碎成多片,由多方共同管理;或者乾脆就是多方共同生成一個虛擬的密鑰,可能後者的情形更為普遍,因為這時候沒有人曾經見過完整的私鑰。這也是虛擬的意思。
MPC 的核心思路為分散控制權以達到分散風險或提高備災的目的,有效避免了單點故障等安全問題。
Cobo 已經將 MPC 是什麼講得比較清楚了,所以這邊不多介紹關於 MPC 的概念了。我們知道一項新技術的產生必然是為了解決某些痛點。就像主持人剛剛講到助記詞是反人性的東西,用戶必須要小心翼翼的去保管它。那麼從安全角度來講,私鑰或者助記詞其實是一個單點故障問題,一旦被盜或者丟失就很難挽回。那麼 MPC 錢包出現也是為了能夠解決單點故障的問題。
我們經過大量錢包釣魚案例總結,發現 web3 錢包在釣魚手法方面一般可以分為三大類別,盜助記詞或私鑰 (如:假錢包 APP 錢包插件錢包)、惡意修改轉賬的目標地址 (如:假交易平台 APP,假社交軟件 TG),另外一種是發生在真的錢包,但是攻擊者通過欺騙批准簽名惡意的交易來盜取用戶的資產。
那麼 MPC 由於 seedless 的機制所以天然防禦盜取私鑰的手法,不過在應對其他釣魚手法時仍需要錢包額外的加強防禦和安全提醒。
另外,我們近期也審計了幾個 MPC 錢包,我們也會發現在創建或者備份過程存在一個生物識別認證過程,然後才開始進入備份或者恢復備份,這裡就可以通過驗證 APP 的簽名的方式來識別 APP 是否為官網的錢包,防止用戶使用來惡意的錢包還能夠恢復備份。
另外,即使錢包採用了 MPC 架構,我們從審計的角度來看,也要去看 MPC 的實現上是否安全。大致就補充這些。
Cheers Up:關於 MPC 我補充一下。在簽名場景,MPC 可能有兩種主要的技術,一種是門限簽名技術,英文叫做 TSS,一種是秘密分割技術,也就是 Shamir’s Secret Sharing 或者簡稱 SSS。兩者的區別在於,門限簽名技術 TSS 直接就簽名了,而秘密分割技術 SSS 則主要是加解密信息。
當需要私鑰簽名時,如果使用門限簽名技術的話,一般並不需要將碎片再拼接起來形成一個完整的私鑰。而是各方按照既定的安全協議要求,使用各自掌握的碎片執行計算,並將各自的計算結果合成為一個完整的簽名。需要注意的是,在這個過程中,不需要恢復完整的私鑰。這是門限簽名技術的一個核心安全性。
而所謂的 Shamir’s Secret Sharing 算法,使用 SSS 這種技術的話往往需要首先恢復密鑰。這看起來不如門限簽名技術安全,但在特定的場合,可能更加適用。例如,如果被分享的秘密並非種子或者私鑰,而是對稱加密算法的密碼,用來加密進一步的信息,那麼這個場合可能更加適用 SSS 技術。當然,用來重建秘密的設備或者計算機,需要專門的安全加固,甚至可以使用一些機密計算技術來加以進一步的安全保證。
Kitty: 這裡我想補充問一句,為什麼我們現在用的錢包是助記詞外顯呢?不管是 onekey,keystone,這種硬件錢包,還是我們更常用的小狐狸或者 imtoken,都需要記下一大串助記詞。是因為 MPC 技術還不成熟嗎?
Cheers Up:沒錯,門限簽名技術看上去非常安全,那麼為什麼到最近才開始討論比較多呢?這是因為以太坊使用的簽名算法 ECDSA,它對私鑰的使用不像 RSA 簽名算法那樣,不能很直接就能使用門限簽名方案的。這裡面其實有一個新技術的研發、成熟、採用的這麼一個過程。包括一開始先有一個兩方簽名的一個算法,可能是 17 年,Lindell 提出來的。
後來到 18 年,才有 m 選 n 的這麼算法出現,其中包括 GG18。所謂 m 選 n,就是比如五個人裡面出三個人,或者三個人裡面出兩個人。然後密碼學家把算法研究出來,還有一個安全分析的過程,之後才是庫的開發和應用的開發。 GG18 其實後來到了 21 年的時候被發現有一點點安全上的隱患,修復起來並不難,只是說安全兩個字真的不容易。而這還只是說算法方面的安全隱患,具體實現的時候,是否存在實現方面的問題,還是要另外請專家團隊來審計的。這就是為什麼好幾個 TSS 的庫都帶上了一個安全審計。這也需要一定的時間,包括審計和問題修復、確認等等,可能要幾個月的時間。
拉回來說的話,這個門限簽名算法其實已經是採納得非常快的了。前面幾位嘉賓介紹的幾個產品,背後的團隊其實已經是走得比較快的了。
Cobo:seedless 或者說 keyless 指的是在用戶的使用過程中,不會顯式的出現完整的助記詞或者私鑰。在門限簽名的算法中,包含兩個核心的過程,即 KeyGen 私鑰生成過程和 Signing 簽名過程。在 KeyGen 的過程中,所有參與方通過 MPC 的技術進行運算,最終每個人都會獲得一個私鑰分片;隨後在 Signing 的過程中,每個參與方基於各自的私鑰分片進行 MPC 運算來得到合法的簽名結果。
在整個流程中,完整的私鑰不會顯式的出現在任何一台設備上,因此能很好的抵禦單點風險。但是在邏輯層面,這個群組的私鑰是確實存在的。進一步的,如果參與方遇到一些系統故障,導致門限簽名的系統無法運轉了,理論上是可以約定一個流程,在某地集合他們各自手中的私鑰分片,恢復出一個真實私鑰的。當然,這個是一個災備方案了,只在極端情況下使用。
慢霧:這裡的 seed 指的是 seed phrase,就是我們創建錢包的時候經常被要求備份的助記詞。那麼 seedless 的意思就是「無助記詞的」,或者也可以說成「無私鑰的」。
注意這個「無」並不是實際意義上的沒有密鑰,而是指不需要用戶備份助記詞/私鑰或者感知到它們的存在。那麼對於錢包而言,也就是錢包不會在任何時候生成或保存完整的私鑰和種子短語。在創建無鑰匙錢包的整個過程中,私鑰不會在任何時間、任何地點被創建或存儲。在簽署事務時,不涉及私鑰,而且私鑰在任何時候都不會被重構。
從我們安全審計的角度來看的話,我們會這樣說,我們會關注密鑰的安全生命週期,生成、存儲、使用、備份、銷毀這些過程中,都不應該出現完整的私鑰或者種子短語。與傳統錢包使用私鑰簽署交易 (這產生了被盜竊的風險) 不同,無密鑰錢包能夠以分佈式的方式與來自不同方的多個密鑰股份共同簽署交易,而不會將密鑰股份相互暴露或暴露給任何其他方。
Cobo: MPC 解決的是單點風險的問題,但並不是說用了 MPC 技術之後,就一定高枕無憂了。每一個私鑰分片的持有方,其實都應該採用不低於原先單簽私鑰的安全保管邏輯去管理這個 MPC 私鑰分片。
以 Cobo Custody 的業務舉例,在原先全託管模式下,我們會採用 SGX 或者 HSM 來保管用戶的私鑰;在未來基於 MPC 的協管錢包下,我們內部對於我們所持有的 MPC 私鑰分片的風控管理邏輯和原先單簽私鑰的風控管理邏輯是一致的,這部分的安全能力不會有任何的降低。 MPC 協管錢包下,對於客戶來說,帶來的好處是解決了 Cobo 單點故障的風險,但是客戶作為 MPC 私鑰分片的持有方,承擔的安全責任其實是增加了的,我們也會協助客戶去搭建一套他們內部的系統去維護這個 MPC 私鑰分片的管理和日常使用。
此外,前面提到的例如 ZenGo 之類的 ToC 的 MPC 錢包,他們會為用戶設計複雜的 MPC 私鑰分片訪問、備份恢復等邏輯,一方面要確保客戶手裡的 MPC 私鑰分片不會洩漏,另一方面也要確保 MPC 私鑰分片不會由於客戶的誤操作導致丟失。順便說一下,有的時候,私鑰丟失其實比私鑰洩漏更危險,私鑰洩漏導致資產被盜了,也許還有一些途徑可以讓黑客還錢,但是如果私鑰丟失了,那就徹底沒法找回了。
Kitty 接:所以說 Cobo 的託管服務是,Cobo 和用戶雙方一起管理一個多簽錢包。你們會在用戶發生交易的時候,協助用戶做風險判斷和核對?我之前還以為託管是直接把錢存到你們那裡。
慢霧:以太坊一共有兩種賬戶:外部賬戶(externally-owned account)和合約賬戶(contract account)。
外部賬戶就是我們平常用來發起交易的錢包賬戶,它是由私鑰控制的,這種賬戶本身是沒有代碼的,因此獨立於以太坊虛擬機之外。
合約賬戶就是智能合約,其代碼由以太坊虛擬機來運行,由存儲在智能合約賬戶內的以太坊虛擬機代碼控制的。
賬戶抽象化,就是試圖將兩類賬戶並為一類,即,讓外部賬戶像合約賬戶一樣運作。參考:https://legacy.ethgasstation.info/blog/ethereum-account-abstraction-explained/
作為錢包用戶,需要考慮很多因素,比如 gas price、gas limit、事務阻塞等等複雜的費用邏輯,這些問題如果直接讓用戶來處理並非特別適合的。使外部賬戶更貼近合約賬戶,這樣就可以通過智能合約的方式來賦予錢包處理這些複雜的邏輯。
Kitty:明白了。外部賬戶是不具備代碼邏輯的。如果想要引入更複雜的邏輯來實現其他的功能,比如多簽,就需要使用到 MPC 和賬戶抽象。我們看看知縣老師有沒有補充。
知縣:從 EVM(以太坊虛擬機)的角度來說,賬戶抽象讓未來更換密碼學工具變成了可能;從用戶的角度來說,賬戶抽象可以用來提升用戶體驗,比如 seedless / gasless 這些特定就可以讓用戶用起來非常順滑;隨著用戶經驗和資產的增長,賬戶抽像還能允許用戶在不換地址的前提下升級自己的賬戶邏輯,加入更多安全或者便利的能力。
從生態的角度來說,賬戶抽象讓用戶端能力獲得了解放,可以提供批量交易、離線授權等新的底層能力,類比於智能手機提供的 GPS 能力讓 LBS 相關的產品可以大放異彩一樣,基於賬戶抽象能力來構建上層應用更有可能出現可以大量獲取用戶的產品,進一步可能出現最早的 web3 原生應用。
知縣:可以,MPC 提供的是密鑰層的管理方案,智能錢包在密鑰層的上層(賬戶抽象「抽」出來的),可以根據場景需求選擇不同的密鑰層。比如 UniPass SDK 錢包就是內置了 Zengo 的 2-2 MPC 方案,為了應對嵌入式 SDK 的需求;UniPass 跟 MetaMask 做的 Seedless Snap 就用了 MetaMask Flask 提供的密鑰管理作為密鑰層,這就沒有 MPC 了。現在我們也在選擇 MPC 方案 / EOA 錢包方案的合作夥伴,在未來更加多樣化的場景下提供更適合用戶的密鑰層方案。
Cobo:目前大部分的賬戶抽象錢包還是和 MPC 錢包獨立開的。
我可以先簡單介紹下兩者的優劣:賬戶抽象錢包的優勢是可以實現很多複雜的業務邏輯,但是他的劣勢或者說限制,就是需要底層公鍊或者智能合約體系的支持,因此跨平台性較弱,一般現在只在 EVM 生態內會提到這個概念;MPC 錢包的優勢在於非常容易跨平台,只要實現了少數幾種簽名曲線的支持,基本可以服務現在市面上所有的公鏈,但是 MPC 錢包的缺點就是他只能實現多籤的能力,或者進一步的是一些分層多籤的能力,但是無法實現特別複雜的業務邏輯在裡面。
總的來說,賬戶抽象錢包是基於一些複雜的智能合約邏輯或者鏈邏輯,來實現一些例如權限分配、風控、社交恢復等能力;MPC 錢包,則是基於密碼學原理,來實現任意公鏈的多簽能力。其實他們兩者是在不同層面的技術手段,一個是在底層密碼學上,一個是在智能合約或者鏈的應用層,所以理論上兩者肯定是可以一起使用的。
慢霧:這裡做一些補充,比如在多簽合約的場景下,給每一個私鑰定義不同的權限:50U 以下的交易需要私鑰 A 簽名,50U 以上的交易需要私鑰 B 簽名,超過 2000U 的交易需要私鑰 ABC 共同簽名等。
但是 其實 ABC 這幾方本身的錢包也可以通過 MPC 的方案來實現和管理。
當然也可以使用 MPC 的方案來進行業務流程的審批 (比如安全鷺的做法),這種方式在感知上是和多簽合約類似的,只不過多簽合約的方式是需要有多個錢包地址通過智能合約在鏈上來實現,而 MPC 方案可以通過密鑰分片/門限來在鏈下達到這類的效果。
知縣:老闆們肯定會說很多跟密鑰管理相關的安全性方案,我就不班門弄斧了,我講幾個 Web2 甚至是生活中的設施能夠帶來的安全性提升,很多屬於交互安全層面的:
· WebAuthn 標準,可以讓 2FA 更安全方便,還能防釣魚;如果巨頭們實現的算法再多一些,或者在一些密碼學靈活的鏈上,還能直接用這個標準生成和管理密鑰,安全便利打滿。
· HRM(Human Readable Message)相關標準推進順利,如 EIP-712 和越來越多的 transaction insight 服務,讓大家簽名的時候能知道自己在做什麼。
智能錢包可以允許用戶用不同的密鑰做不同的事情,比如資產相關的密鑰和登錄相關的密鑰可以不同,但是都對應同一個地址(賬戶)
智能錢包還可以讓用戶用護照 / 銀行卡 / 電子郵件等日常非常熟悉的基礎設施來提升賬戶安全。
Kitty:據我所知,有的鏈的錢包已經部分支持 2FA 和知縣老師提的其中的幾個方案了。
慢霧:助記詞和私鑰是一個單點故障問題,能夠解決單點故障問題的技術。 MPC 錢包,由用戶控制的私鑰分片(存儲在不同設備上)是可以恢復出完整私鑰權限的的技術。
(假設一個場景,錢包項目方被惡意 ddos,用戶仍可以正常行使密鑰權限而不受影響。)
能夠識別惡意簽名/黑地址,並且能夠進行有效安全提醒的技術。
知縣:這個我就不專業了哈哈,有用智能錢包的(gnosis safe)也有用 mpc 的(fireblocks),我覺得從一個韭菜的角度來看,主要還是看透明度,比如到底誰有權限動錢,動多少錢這些。
智能錢包在這方面的優勢是,權限控制可以做得更靈活和復雜,比如分資產設權限,引入鏈上治理等等。
Cheers Up:這裡我可以簡單介紹一下 Cheers UP 項目上的一些安全實踐,跟社區交個底,同時也請在座的嘉賓不吝賜教。
目前,項目方資產也就是 baselabs.eth 上的資產,這裡主要放的是銷售收入以及歸屬項目方的盲盒,有幾百個以太和兩百多個盲盒,以及國庫資產,也是有兩百多個盲盒。那這裡面的安全性當然很重要,我們也不希望發生資產的損失,這樣不管對我們項目方還是對整個社區,都是很糟糕的事情。肯定沒有人希望這種事情發生。
那麼我們項目方其實從一開始就把這個資產的安全放在很重要的位置。我們從技術和管理流程兩方面入手去保證資產的安全性。首先從技術上,我們採用了 MPC 技術,我們從技術上保證了團隊裡沒有一個人是掌握了我們這些資產的私鑰的。都是集體掌握,而且即便是集體掌握的那幾個同事,他們並不能直接就把私鑰恢復出來,這裡面還會有一些技術上的門檻。具體的技術我可能不會在這裡講很細,但技術上的確我們不僅是沒有哪個人是掌握私鑰的,也沒有哪個小組是直接掌握私鑰的。
其次就是從管理和流程上再去加以保證。因為再好的技術也是人來使用的嘛,我們需要盡量減少和控制人為失誤、人為因素帶來的風險。剛剛說了我們所有的私鑰都是集體掌握的,其實這裡還需要再加上一個集體管理。這裡我可能不會很完整地去描述我們的具體技術和管理方案,我想分享的是,所有使用私鑰簽名的場景,不管是交易的簽署還是合約的調用,除了需要多人共同參與、共同確認,也會有相應的記錄,以便後面能夠審計。如果其中一個參與者對交易有疑問,他不推進他那部分,那麼這個交易在排除疑問之前就不能繼續。
通過這樣雙管齊下,我們是從技術和人兩個方面共同去保障項目資產和國庫資產的安全。當然我們不是這樣就一勞永逸了,我們會持續關注,持續研究,持續改進。
我這邊可以回過頭去接一下主持人前面的問題。這個問題是說,MPC 技術跟 ZK 零知識證明是不是很像呢?都是在不暴露或者少暴露隱私的情況下,就能得到答案或者完成計算。
這麼說吧,主持人這個問題本身體現了一個非常敏銳的觀察。雖然實際上這兩個技術有很大的不同,它們確實共享了一定的相似之處。
零知識證明顧名思義,它是一種證明技術;而 MPC 呢,這裡面的 C 是 Computing,計算的意思。側重點或者說目的性不一樣。
但是零知識證明里面也是有計算的,它證明的是某個計算的結果,比如說,我有一個秘密數據,我不告訴你是什麼,但是它的哈希是某某某,這裡是證明數據,你可以去驗證。然後對方驗證了一下,真的是哦。所以,它對隱私的保護體現在不需要披露這個秘密數據而證明根據這個數據計算的一個結果。
而 MPC 更重要的在於 MP,也就是 Multi-Party,多方參與。它是多方共同參與的一個計算。如果在錢包中應用的 TSS 門限簽名技術的話,它是可以做到不重構私鑰而完成簽名的,起到了保護私鑰的作用。然後 MPC 技術裡面可能也會應用一定的零知識證明技術,比如說如果 MP 中的某個 P 是一個第三方服務器,那這個服務器會不會對我發起協議攻擊,試圖盜取我掌握的私鑰碎片呢?這是完全有可能的,那就可以通過零知識證明技術來證明,大家都是嚴格遵循 MPC 協議來參與計算的。
所以回到主持人的問題的話,確實是的,就它們起到的保護作用而言是有一定的相似之處的,只是具體應用的場景不一樣而已。然後根據具體的場景,需要選擇相應的技術。
本文來自投稿,不代表BlockBeats觀點
歡迎加入律動 BlockBeats 官方社群:
Telegram 訂閱群:https://t.me/theblockbeats
Telegram 交流群:https://t.me/BlockBeats_App
Twitter 官方帳號:https://twitter.com/BlockBeatsAsia