基于MPC的密鑰管理與多重簽名方式的本質(zhì)區(qū)別解析
密鑰管理是一個(gè)正在變得越來越重要的概念,已經(jīng)成為區(qū)塊鏈領(lǐng)域重要的基礎(chǔ)設(shè)施。當(dāng)數(shù)字貨幣或 Token 更多的被交易和使用,而不僅僅被一勞永逸地存儲(chǔ)時(shí),通過私鑰或錢包密碼使用資產(chǎn)的方式既不安全,也不友好,更難以滿足諸多應(yīng)用場景的需求。
基于 MPC(安全多方計(jì)算)的門限簽名方式與多重簽名方式是兩種不同的密鑰管理方法,在這篇文章中,我們采訪了 PlatON 算法科學(xué)家謝翔博士,他將為我們介紹基于 MPC 的密鑰管理,以及這種方式與多重簽名方式的本質(zhì)區(qū)別。
謝翔是數(shù)學(xué)與密碼學(xué)專業(yè)出身,現(xiàn)為 PlatON 算法科學(xué)家及 KeyShard 產(chǎn)品負(fù)責(zé)人,專注于密碼算法的研究、實(shí)現(xiàn)和產(chǎn)品化。KeyShard 提供的是基于 MPC 的密鑰管理服務(wù),為數(shù)字貨幣密鑰管理和恢復(fù)的痛點(diǎn)提供解決方案。
什么是基于MPC的密鑰管理
問:為什么我們需要密鑰管理?
謝翔:個(gè)人可以在區(qū)塊鏈或比特幣網(wǎng)絡(luò)上自由地注冊賬戶、轉(zhuǎn)賬,不需要任何第三方,這個(gè)功能是通過一套數(shù)字簽名機(jī)制來完成的。在數(shù)字貨幣里,最核心的就是如何去管理這個(gè)簽名,因?yàn)樗械臇|西都會(huì)依賴于這個(gè)簽名的有效性。
對(duì)于用戶而言,管理簽名其實(shí)就是去管理密鑰。因此我們說密鑰就是錢,密鑰管理很重要。
在傳統(tǒng)的行業(yè)里,你可以通過銀行也好,通過一系列的流程設(shè)計(jì)也好來管理錢,比如說可以多個(gè)人來管,投資經(jīng)理同意了、投資總監(jiān)同意了、財(cái)務(wù)同意了、CEO 同意了,這筆錢才能轉(zhuǎn)出去。但是一旦挪到數(shù)字貨幣這個(gè)行業(yè),傳統(tǒng)那套是做不了的,為什么?因?yàn)檎l有私鑰誰就能轉(zhuǎn)錢,傳統(tǒng)那一套審批流程是形同虛設(shè)的,沒有任何意義。
所以我們做密鑰管理這件事情最初的一個(gè)想法,就是說能不能把傳統(tǒng)的對(duì)于錢的授權(quán)管理機(jī)制挪到數(shù)字貨幣的世界里面來。這個(gè)肯定是需要的,因?yàn)楝F(xiàn)在很多人已經(jīng)開始用 Token 在投資了,比如說基金,比如說家族的 VC,他們是需要有一種內(nèi)部管理的機(jī)制的,但是傳統(tǒng)的那套審批機(jī)制在技術(shù)上過不來。
問:多簽可以解決這個(gè)問題嗎?
謝翔:多簽是基于腳本或智能合約的。它是設(shè)計(jì)一個(gè)規(guī)則,比如說三個(gè)人同時(shí)簽了或者兩個(gè)人同時(shí)簽了,將這些簽名傳遞給一份智能合約,合約就開始運(yùn)行,把錢轉(zhuǎn)出去。多簽?zāi)芙鉀Q一部分問題,它其實(shí)已經(jīng)用到很多企業(yè)里了,但是隨著時(shí)間的進(jìn)展會(huì)碰到越來越多的問題,問題在哪里呢?
多簽針對(duì)不同的主鏈需要實(shí)現(xiàn)不同的智能合約,現(xiàn)在的鏈至少有一千多個(gè)了,每個(gè)鏈的智能合約體系不一樣,每個(gè)人去寫合約寫得還不一樣。拿 VC 來說,VC 可能會(huì)投很多鏈,這些 Token 怎么管?你要他們?nèi)懯畮讉€(gè)合約,而且都還要經(jīng)過安全認(rèn)證?這是一個(gè)大的人力成本。
此外,區(qū)塊鏈上合約的任何細(xì)節(jié)都會(huì)被看見,這是有一層安全性問題在那里的。任何人都可以來看這個(gè)合約有沒有漏洞,而且很多新的鏈不像比特幣或以太坊那樣經(jīng)過了時(shí)間的驗(yàn)證,它的合約體系本身有沒有問題是不知道的。你會(huì)發(fā)現(xiàn)一些新的 Token 出問題,90% 都是合約出問題,這是一個(gè)大的風(fēng)險(xiǎn)。
所以在多鏈的情況下,多簽還能方便地支持密鑰管理嗎?目前看其實(shí)是很難的。用多簽通過合約的方式來管理密鑰,使用成本高,安全風(fēng)險(xiǎn)高。
問:如果這些不同的鏈都是基于相同的數(shù)字簽名算法,比如 Schnorr,那么不同鏈的密鑰管理方法是不是就可以通用?
謝翔:不,邏輯不是這樣的,我給你畫一下。多簽是這樣的,最下邊是區(qū)塊鏈,中間是數(shù)字簽名,它有個(gè)簽名算法,可以是 ECDSA,可以是 Schnorr 等等,最上邊是智能合約。
多簽是怎么做的呢?就是在最上邊的智能合約部分來數(shù)合法簽名的個(gè)數(shù),一個(gè)、兩個(gè)、三個(gè)……夠了,就把錢轉(zhuǎn)出去。這種方式不在乎下邊用的是什么簽名算法,Schnorr 也好、BLS 也好,對(duì)它來說沒有半點(diǎn)區(qū)別。
這是多簽的一個(gè)基本原理,也可以說是好處,它能夠和底層的簽名算法做到一定程度的解耦。但它的問題是要適配不同鏈系統(tǒng),一千條鏈就需要一千個(gè)智能合約,多鏈的兼容性很弱。
問:那基于 MPC 的門限簽名是怎樣的?
謝翔:我把這張圖重新畫一下。最下邊還是這條鏈,中間還是數(shù)字簽名,上邊是智能合約?;?MPC 的門限簽名不會(huì)去管下邊的鏈,也不會(huì)去管上邊的合約,兩頭它都不會(huì)管,它只管右邊這部分,也就是鏈下創(chuàng)建簽名的部分。
它的思路是說一個(gè)簽名一定是有一個(gè)私鑰的,它把這個(gè)私鑰以某種方式分成很多「碎片」,這些碎片可以被很多人同時(shí)拿著,然后通過一套 MPC 協(xié)議,保證這些碎片不需要被拼起來就可以直接產(chǎn)生一個(gè)合法的簽名?!覆恍枰黄雌饋怼勾碇嬲乃借€始終沒有、而且也不需要出現(xiàn)。
問:簽名是在鏈下完成的?
謝翔:需要簽名的時(shí)候,比如說我們公司三個(gè)人會(huì)在鏈下跑一個(gè)協(xié)議,生成一個(gè)簽名,再把簽名放到鏈上。生成簽名的邏輯是放在 MPC 里實(shí)現(xiàn)的,出來的是一個(gè)標(biāo)準(zhǔn)的簽名,但怎么跑這個(gè)協(xié)議別人是不知道的。
把這個(gè)簽名結(jié)果放到鏈上去,別人分不清它后面是一個(gè)人簽的還是多個(gè)人簽的,因?yàn)樗男螒B(tài)、樣子就是一個(gè)簽名,和直接用私鑰簽出來是一模一樣的。這一套簽名機(jī)制可以完全獨(dú)立于鏈,部署在企業(yè)的內(nèi)部。
發(fā)現(xiàn)了沒有,多重簽名主要是去數(shù)合法簽名的個(gè)數(shù),它不依賴于簽名算法,但要去適配鏈系統(tǒng);基于 MPC 的門限簽名主要是去產(chǎn)生一個(gè)簽名,它依賴于簽名算法,但不需要去適配合約和鏈系統(tǒng)。
基于 MPC 的門限簽名與合約模塊是完全解耦的,合約是怎么寫的、鏈?zhǔn)窃趺礃拥?,它完全不在乎。它只要區(qū)別簽名算法,只要簽名算法是鏈系統(tǒng)支持的,它就能很好地銜接。算法的話現(xiàn)在可能就是 ECDSA、Schnorr、BLS (以太坊 2.0 可能使用 BLS),所以兼容算法就能兼容很多鏈。基于 MPC 的密鑰管理能做到對(duì)多鏈友好,這是一個(gè)大的優(yōu)勢。
另外一個(gè)優(yōu)勢就是這套簽名機(jī)制的策略是鏈下的,因此更加安全,它避免了合約被黑客攻擊的風(fēng)險(xiǎn),而且設(shè)計(jì)策略可以更加靈活,因?yàn)槌蓑?yàn)簽外的大部分流程都搬到鏈下了,使用方可以根據(jù)場景,制定自己的碎片管理策略。
問:MPC 在這個(gè)過程中的作用是什么?
謝翔:MPC 是一種基于密碼學(xué)的協(xié)同計(jì)算框架,廣義地理解就是多方各自有私密的輸入,一起來完成一個(gè)計(jì)算任務(wù),在成功完成任務(wù)的同時(shí),可以保證整個(gè)過程中各自的私密輸入不會(huì)泄露。
比如一個(gè)「2-3 模式」的基于 MPC 的密鑰管理協(xié)議,意味著一共有 3 個(gè)碎片,只要任意的 2 個(gè)碎片參與執(zhí)行協(xié)議,就可以產(chǎn)生一個(gè)合法簽名。這里的簽名產(chǎn)生過程,包括碎片產(chǎn)生過程,都可以看成一種安全多方計(jì)算,因?yàn)樵趨f(xié)議執(zhí)行過程中,產(chǎn)生和交換的所有中間數(shù)據(jù)都不會(huì)直接或者間接地造成碎片明文的泄露。
問:基于 MPC 的門限簽名為什么要跟簽名算法相關(guān)?
謝翔:我有多塊碎片,怎么去實(shí)現(xiàn)這一個(gè)簽名出來?這和算法結(jié)構(gòu)是強(qiáng)相關(guān)的,所以會(huì)存在某個(gè)算法容易做 MPC,某個(gè)算法不容易做 MPC 的問題。比特幣要升級(jí)到 Schnorr,Schnorr 是非常兼容 MPC 的,ECDSA 不那么兼容 MPC。
問:在基于 MPC 的密鑰管理中,真正的那個(gè)私鑰存儲(chǔ)在哪兒?
謝翔:你會(huì)發(fā)現(xiàn)有個(gè)很好玩的事情,就是在整個(gè)密鑰管理的生命周期里,真正的私鑰從來沒有出現(xiàn)過,也就沒有私鑰存儲(chǔ)在哪里這個(gè)問題了。這是基于 MPC 的密鑰管理的精髓所在,它能夠保證密鑰能用但不存在。
在傳統(tǒng)的密鑰管理中,密鑰是一種確實(shí)存在的數(shù)據(jù)資產(chǎn),保管它是一件非常難的事情?;?MPC 的門限簽名在物理層面直接從系統(tǒng)里剝離了密鑰,這與傳統(tǒng)系統(tǒng)在安全理念上是截然不同的。
在傳統(tǒng)方式下,黑客盯住一個(gè)點(diǎn)就行,因?yàn)樗借€就存在那個(gè)點(diǎn)上;但基于 MPC 的密鑰管理將密鑰的安全性分散在多個(gè)托管節(jié)點(diǎn)里,私鑰在任何時(shí)刻都會(huì)被分成多份在多個(gè)地方,黑客可能要攻破第一個(gè)、第二個(gè)、第三個(gè)、第四個(gè),要把四個(gè)碎片全部搞定才能拿到密鑰,而且必須在某一時(shí)間范圍內(nèi)同時(shí)拿到四個(gè)碎片才能得到密鑰,因?yàn)槊荑€碎片是在不斷刷新的。
比如密鑰是 10,把它拆成兩個(gè)碎片,分在兩個(gè)地方。你可以把 10 拆成 5+5,但過一分鐘后把它拆成 1+9,再過一分鐘后把它拆成 2+8。黑客要在一分鐘之內(nèi)把兩個(gè)點(diǎn)都攻破才能拿到 10,如果第一分鐘攻破第一個(gè)地方、第二分鐘攻破第二個(gè)地方,黑客拿到的是 5 和 9,不是正確的密鑰。
問:多簽是無法做這種刷新的?
謝翔:沒有辦法。對(duì)于多簽,比如參與多簽的是三個(gè)人,其中一個(gè)人的私鑰被偷了,那對(duì)應(yīng)的方法不是說刷新密鑰,而是要趕緊換地址,把錢轉(zhuǎn)到新的地址里,這在很多應(yīng)用場景里是個(gè)痛點(diǎn);或者比如說現(xiàn)在是三個(gè)人參與多簽,需要加第四個(gè)人,這個(gè)時(shí)候也要換地址,然后需要一個(gè)新的多簽的合約,這是很費(fèi)勁的,而且轉(zhuǎn)錢到新地址還需要手續(xù)費(fèi)。
但這些對(duì)于 MPC 來說就很容易,它可以保證對(duì)外的地址一直不變,內(nèi)部刷新就好。這個(gè)好處也是我們看重的點(diǎn)。
基于 MPC 的密鑰管理的應(yīng)用
問:基于 MPC 的密鑰管理可以降低私鑰的使用門檻嗎?這或許是最讓普通用戶頭疼的地方。
謝翔:它可以做到與傳統(tǒng)的中心化的方式?jīng)]有區(qū)別,做到用戶體驗(yàn)一樣:使用數(shù)字貨幣時(shí)的操作和你使用微信錢包時(shí)的操作是一樣的,你不需要去記助記詞、或者把助記詞存硬件、用本子抄寫下來等等。
用 MPC 一個(gè)好玩的事情是什么呢?比方說 A 和 B 用 MPC 共同管理一個(gè)賬戶,那么他們倆就可以同時(shí)來控制這個(gè)賬戶,但同時(shí)都不需要記助記詞。如果 A 想用的時(shí)候,要發(fā)一個(gè)請求給 B,B 同意后,A 和 B 通過一套既定的規(guī)則,在本地利用各自的碎片計(jì)算出一些中間變量,通過信息交換,A 就可以在本地生成一個(gè)合法的完整簽名,驗(yàn)簽通過后,A 就可以把賬戶里的錢轉(zhuǎn)出去。
當(dāng)然這里還有一個(gè)問題,如何為 A 和 B 生成碎片。事實(shí)上,利用 MPC 技術(shù)可以實(shí)現(xiàn) A 和 B 各自在本地生成一個(gè)碎片,這兩個(gè)碎片可以隱式地拼接成一個(gè)私鑰,注意,這種拼接只是一種蘊(yùn)含的數(shù)學(xué)關(guān)系,碎片實(shí)際上從未在任何時(shí)刻被拼接過。
這個(gè)時(shí)候,B 那個(gè)角色也可以是一個(gè)第三方的服務(wù)器。服務(wù)器確認(rèn)一下 KYC,核實(shí)是不是你發(fā)起的,是你發(fā)起的之后它就自動(dòng)通過,也就是自動(dòng)給出另一個(gè)碎片來一起生成簽名。KYC 就是通過發(fā)短信、人臉識(shí)別、發(fā)郵件等等方式,這樣一來,用戶的操作方式就和傳統(tǒng)的操作方式一模一樣。這就和實(shí)際的應(yīng)用場景很掛鉤了。
我們做了一個(gè)叫 KeyShard 的 App,是為了告訴用戶基于 MPC 的密鑰管理可以怎么用,可以試著體驗(yàn)一下,現(xiàn)在只支持以太坊。它就是模擬的傳統(tǒng)的權(quán)限管理,要兩個(gè)人同意才能動(dòng)賬戶。
問:回到最開始。你說把傳統(tǒng)的對(duì)于錢的授權(quán)管理機(jī)制挪到數(shù)字貨幣領(lǐng)域。在傳統(tǒng)審批流程里,可能需要 A 先通過,然后 B 簽字,然后 C 簽字,這是 MPC 現(xiàn)在就可以做到的嗎?
謝翔:這其實(shí)是一個(gè)很關(guān)鍵的問題。在傳統(tǒng)的流程里這叫做傳簽,傳簽在 MPC 里會(huì)有一些障礙,我畫一下 MPC 大概的邏輯。
MPC 這個(gè)算法協(xié)議是要彼此相連和交互的,比如說經(jīng)理、財(cái)務(wù)、CEO 三個(gè)人參與生成簽名,它是要求這三個(gè)人必須同時(shí)在線的,所以 MPC 純算法本身很難做到傳簽。
但我們可以利用工程架構(gòu)在產(chǎn)品層面實(shí)現(xiàn)傳簽功能,讓上層的用戶不用去管也不用去想底層是怎么運(yùn)行的,對(duì)于用戶而言,產(chǎn)品的操作體驗(yàn)和傳統(tǒng)傳簽是一樣的。所以算法和產(chǎn)品之間是有很大差異的,這里有兩套東西,除了算法本身,還需要把技術(shù)和業(yè)務(wù)邏輯結(jié)合起來。
問:可以這么理解嗎,基于 MPC 的密鑰管理不僅是為了安全地存儲(chǔ)密鑰,它更是為了個(gè)人或企業(yè)能夠方便地、滿足業(yè)務(wù)邏輯地使用密鑰?
謝翔:它有多個(gè)優(yōu)勢,安全存儲(chǔ)是一方面;而讓個(gè)人或者企業(yè)更安全便捷地使用密鑰是另一方面。前者是指基于 MPC 的密鑰管理對(duì)密鑰或者資產(chǎn)的「托管能力」,體現(xiàn)了靜態(tài)的安全性;后者是指基于 MPC 的密鑰管理可以主動(dòng)設(shè)計(jì)出多樣化的策略管理,是一種動(dòng)態(tài)的業(yè)務(wù)賦能。
問:如果有一個(gè)需要管理多種 Token 的投資機(jī)構(gòu),它是不是可以買一套基于 MPC 的密鑰管理算法,然后用這套算法實(shí)現(xiàn)對(duì)不同鏈的簽名,進(jìn)而實(shí)現(xiàn)對(duì)不同鏈上資產(chǎn)的管理?
謝翔:它不太可能直接買算法,它會(huì)買產(chǎn)品,比如買一套基于 MPC 的密鑰管理軟件裝在公司內(nèi)部的服務(wù)器上,然后就可以通過一個(gè)界面去管理資產(chǎn)。你可以理解為它買了一套基于 MPC 的財(cái)務(wù)管理系統(tǒng)。
密鑰管理的最底層是一套算法,但可以把它包成產(chǎn)品,也可以包成 App、包成 SDK(軟件開發(fā)工具包)。
問:如果有一個(gè)錢包公司,希望錢包添加一個(gè)讓用戶能基于 MPC 管理私鑰的功能,是不是可以找專業(yè)的提供 MPC 解決方案的公司合作?
謝翔:對(duì)。你可以理解為這個(gè)市場有投資機(jī)構(gòu)、有錢包、有交易所,還有其它的一些業(yè)務(wù)公司,它們各自有自己的業(yè)務(wù),但它們一定都會(huì)有怎么管錢這個(gè)問題,我們就是提供一套基于 MPC 的密鑰管理能力,也就是基于 MPC 的管錢的能力,來跟它們自己現(xiàn)在的這套系統(tǒng)對(duì)接。
從公司的定位來說,PlatOn 是技術(shù)提供商或基礎(chǔ)設(shè)施提供商,KeyShard 是其中為數(shù)字貨幣提供密鑰管理的基礎(chǔ)設(shè)施,它把自己往下沉得多一點(diǎn),不碰上面的業(yè)務(wù)。它主導(dǎo)的是底層的密鑰管理的 SDK,希望把授權(quán)管理的業(yè)務(wù)流程揉到 SDK 里面去,當(dāng)然難點(diǎn)在于要抽象出一套相對(duì)來說足夠靈活、好用的 SDK。
基于 MPC 的密鑰管理面臨的挑戰(zhàn)
問:基于 MPC 的密鑰管理現(xiàn)在碰到的難點(diǎn)是什么?
謝翔:技術(shù)的、非技術(shù)的都有。非技術(shù)的是有人會(huì)問為什么它是安全的?給我個(gè)證書。傳統(tǒng) KMS (Key Management Service)是有證書的,但因?yàn)?MPC 技術(shù)較新,在密鑰管理上使用的時(shí)間不長,目前還沒有足夠權(quán)威和廣泛的認(rèn)證。
這是這個(gè)學(xué)科的特殊性引發(fā)的問題。密碼學(xué)雖然有堅(jiān)實(shí)的理論基礎(chǔ),但是它分理論安全和實(shí)際安全,實(shí)際安全是不是能達(dá)到理論安全這個(gè)層面是需要時(shí)間檢驗(yàn)的。所以一是需要標(biāo)準(zhǔn)機(jī)構(gòu),二是需要學(xué)術(shù)研究的推動(dòng)。我們會(huì)積極地去推進(jìn)類似標(biāo)準(zhǔn)、去推進(jìn)工業(yè)界對(duì)這個(gè)技術(shù)的認(rèn)可,但需要時(shí)間,沒那么快。
技術(shù)上的難點(diǎn)就是剛才說的,需要把這一套新的技術(shù)和復(fù)雜的業(yè)務(wù)邏輯結(jié)合起來。此外,MPC 是一套分布式的技術(shù),分布式的話就會(huì)有同步,也就是共識(shí)的問題。
原來的授權(quán)管理是一個(gè)純中心化的東西,業(yè)務(wù)流程會(huì)很好配;但分布式的場景下會(huì)有一定的難度,比如使用者在不在線的問題,網(wǎng)絡(luò)好不好的問題,如果在密鑰刷新的時(shí)候有延時(shí),是用后面那個(gè)碎片還是用前面那個(gè)碎片的問題。這種細(xì)節(jié)會(huì)有很多,都要去考慮。
問:基于 MPC 的密鑰管理沒有可追究性這種說法是準(zhǔn)確的嗎?就是說不知道誰簽了誰沒有簽,無法追查責(zé)任?
謝翔:其實(shí)是可以知道的,從算法層面就可以抓到是誰簽的。算法底層可以通過引入檢查和舉報(bào)機(jī)制,追查到誰沒有簽,甚至知道是誰在簽名過程中給了不遵循規(guī)則的錯(cuò)誤信息。
重新認(rèn)識(shí)「私鑰」:私鑰不是鑰匙
「私鑰」這個(gè)詞帶來的直覺反應(yīng)是,它是一種「鑰匙」,作用是打開保管著數(shù)字貨幣的保險(xiǎn)柜,想一想也似乎有道理,使用私鑰就能拿到幣。但實(shí)際上,在區(qū)塊鏈和數(shù)字貨幣領(lǐng)域,私鑰就意味著資產(chǎn)本身。
試想,你的保險(xiǎn)柜鑰匙丟了,你的錢是依然還在的,你可以再配一把鑰匙;但如果私鑰被忘了,錢可就永遠(yuǎn)消失了。你的保險(xiǎn)柜鑰匙被偷了,你的錢可能依然安全,因?yàn)樾⊥颠€需要溜進(jìn)大樓、撬開房間的門鎖;但如果私鑰被偷了,錢幾乎立馬就不再屬于你。
私鑰不是那把打開保險(xiǎn)柜的鑰匙,它是要被放進(jìn)保險(xiǎn)柜的資產(chǎn)本身。而如何設(shè)計(jì)一個(gè)保險(xiǎn)柜系統(tǒng)存放私鑰,使得柜中的私鑰既安全、又易用,就是密鑰管理。屆時(shí),交到用戶手中的就不是私鑰,而是一套打開保險(xiǎn)柜的鑰匙。
多重簽名和基于 MPC 的門限簽名都是實(shí)現(xiàn)資產(chǎn)管理的方法,但它們是截然不同的設(shè)計(jì)路線:前者在鏈上,依靠智能合約數(shù)合法簽名的個(gè)數(shù);后者在鏈下,依靠 MPC 用碎片生成合法簽名。本文重點(diǎn)介紹的是后者,也就是基于 MPC 的密鑰管理,希望能對(duì)你了解這種技術(shù)和方案有一些幫助。