謝翔:不,邏輯不是這樣的,我給你畫一下。多籤是這樣的,最下邊是區塊鏈,中間是數字簽名,它有個簽名演算法,可以是 ECDSA,可以是 Schnorr 等等,最上邊是智慧合約。
多籤是怎麼做的呢?就是在最上邊的智慧合約部分來數合法簽名的個數,一個、兩個、三個……夠了,就把錢轉出去。這種方式不在乎下邊用的是什麼簽名演算法,Schnorr 也好、BLS 也好,對它來說沒有半點區別。
這是多籤的一個基本原理,也可以說是好處,它能夠和底層的簽名演算法做到一定程度的解耦。但它的問題是要適配不同鏈系統,一千條鏈就需要一千個智慧合約,多鏈的相容性很弱。
問:那基於 MPC 的門限簽名是怎樣的?
謝翔:我把這張圖重新畫一下。最下邊還是這條鏈,中間還是數字簽名,上邊是智慧合約。基於 MPC 的門限簽名不會去管下邊的鏈,也不會去管上邊的合約,兩頭它都不會管,它只管右邊這部分,也就是鏈下建立簽名的部分。
它的思路是說一個簽名一定是有一個私鑰的,它把這個私鑰以某種方式分成很多「碎片」,這些碎片可以被很多人同時拿著,然後透過一套 MPC 協議,保證這些碎片不需要被拼起來就可以直接產生一個合法的簽名。「不需要被拼起來」代表著真正的私鑰始終沒有、而且也不需要出現。
問:簽名是在鏈下完成的?
謝翔:需要簽名的時候,比如說我們公司三個人會在鏈下跑一個協議,生成一個簽名,再把簽名放到鏈上。生成簽名的邏輯是放在 MPC 裡實現的,出來的是一個標準的簽名,但怎麼跑這個協議別人是不知道的。
把這個簽名結果放到鏈上去,別人分不清它後面是一個人籤的還是多個人籤的,因為它的形態、樣子就是一個簽名,和直接用私鑰簽出來是一模一樣的。這一套簽名機制可以完全獨立於鏈,部署在企業的內部。
發現了沒有,多重簽名主要是去數合法簽名的個數,它不依賴於簽名演算法,但要去適配鏈系統;基於 MPC 的門限簽名主要是去產生一個簽名,它依賴於簽名演算法,但不需要去適配合約和鏈系統。
基於 MPC 的門限簽名與合約模組是完全解耦的,合約是怎麼寫的、鏈是怎麼樣的,它完全不在乎。它只要區別簽名演算法,只要簽名演算法是鏈系統支援的,它就能很好地銜接。演算法的話現在可能就是 ECDSA、Schnorr、BLS (以太坊 2.0 可能使用 BLS),所以相容演算法就能相容很多鏈。基於 MPC 的金鑰管理能做到對多鏈友好,這是一個大的優勢。
另外一個優勢就是這套簽名機制的策略是鏈下的,因此更加安全,它避免了合約被駭客攻擊的風險,而且設計策略可以更加靈活,因為除了驗籤外的大部分流程都搬到鏈下了,使用方可以根據場景,制定自己的碎片管理策略。
問:MPC 在這個過程中的作用是什麼?
謝翔:MPC 是一種基於密碼學的協同計算框架,廣義地理解就是多方各自有私密的輸入,一起來完成一個計算任務,在成功完成任務的同時,可以保證整個過程中各自的私密輸入不會洩露。
比如一個「2-3 模式」的基於 MPC 的金鑰管理協議,意味著一共有 3 個碎片,只要任意的 2 個碎片參與執行協議,就可以產生一個合法簽名。這裡的簽名產生過程,包括碎片產生過程,都可以看成一種安全多方計算,因為在協議執行過程中,產生和交換的所有中間資料都不會直接或者間接地造成碎片明文的洩露。
問:基於 MPC 的門限簽名為什麼要跟簽名演算法相關?
謝翔:我有多塊碎片,怎麼去實現這一個簽名出來?這和演算法結構是強相關的,所以會存在某個演算法容易做 MPC,某個演算法不容易做 MPC 的問題。比特幣要升級到 Schnorr,Schnorr 是非常相容 MPC 的,ECDSA 不那麼相容 MPC。
問:在基於 MPC 的金鑰管理中,真正的那個私鑰儲存在哪兒?
謝翔:你會發現有個很好玩的事情,就是在整個金鑰管理的生命週期裡,真正的私鑰從來沒有出現過,也就沒有私鑰儲存在哪裡這個問題了。這是基於 MPC 的金鑰管理的精髓所在,它能夠保證金鑰能用但不存在。
在傳統的金鑰管理中,金鑰是一種確實存在的資料資產,保管它是一件非常難的事情。基於 MPC 的門限簽名在物理層面直接從系統裡剝離了金鑰,這與傳統系統在安全理念上是截然不同的。
在傳統方式下,駭客盯住一個點就行,因為私鑰就存在那個點上;但基於 MPC 的金鑰管理將金鑰的安全性分散在多個託管節點裡,私鑰在任何時刻都會被分成多份在多個地方,駭客可能要攻破第一個、第二個、第三個、第四個,要把四個碎片全部搞定才能拿到金鑰,而且必須在某一時間範圍內同時拿到四個碎片才能得到金鑰,因為金鑰碎片是在不斷重新整理的。
比如金鑰是 10,把它拆成兩個碎片,分在兩個地方。你可以把 10 拆成 5+5,但過一分鐘後把它拆成 1+9,再過一分鐘後把它拆成 2+8。駭客要在一分鐘之內把兩個點都攻破才能拿到 10,如果第一分鐘攻破第一個地方、第二分鐘攻破第二個地方,駭客拿到的是 5 和 9,不是正確的金鑰。
問:多籤是無法做這種重新整理的?
謝翔:沒有辦法。對於多籤,比如參與多籤的是三個人,其中一個人的私鑰被偷了,那對應的方法不是說重新整理金鑰,而是要趕緊換地址,把錢轉到新的地址裡,這在很多應用場景裡是個痛點;或者比如說現在是三個人參與多籤,需要加第四個人,這個時候也要換地址,然後需要一個新的多籤的合約,這是很費勁的,而且轉錢到新地址還需要手續費。
但這些對於 MPC 來說就很容易,它可以保證對外的地址一直不變,內部重新整理就好。這個好處也是我們看重的點。
基於 MPC 的金鑰管理的應用
問:基於 MPC 的金鑰管理可以降低私鑰的使用門檻嗎?這或許是最讓普通使用者頭疼的地方。
謝翔:它可以做到與傳統的中心化的方式沒有區別,做到使用者體驗一樣:使用數字貨幣時的操作和你使用微信錢包時的操作是一樣的,你不需要去記助記詞、或者把助記詞存硬體、用本子抄寫下來等等。
用 MPC 一個好玩的事情是什麼呢?比方說 A 和 B 用 MPC 共同管理一個賬戶,那麼他們倆就可以同時來控制這個賬戶,但同時都不需要記助記詞。如果 A 想用的時候,要發一個請求給 B,B 同意後,A 和 B 透過一套既定的規則,在本地利用各自的碎片計算出一些中間變數,透過資訊交換,A 就可以在本地生成一個合法的完整簽名,驗籤透過後,A 就可以把賬戶裡的錢轉出去。
當然這裡還有一個問題,如何為 A 和 B 生成碎片。事實上,利用 MPC 技術可以實現 A 和 B 各自在本地生成一個碎片,這兩個碎片可以隱式地拼接成一個私鑰,注意,這種拼接只是一種蘊含的數學關係,碎片實際上從未在任何時刻被拼接過。
這個時候,B 那個角色也可以是一個第三方的伺服器。伺服器確認一下 KYC,核實是不是你發起的,是你發起的之後它就自動透過,也就是自動給出另一個碎片來一起生成簽名。KYC 就是透過發簡訊、人臉識別、發郵件等等方式,這樣一來,使用者的操作方式就和傳統的操作方式一模一樣。這就和實際的應用場景很掛鉤了。
我們做了一個叫 KeyShard 的 App,是為了告訴使用者基於 MPC 的金鑰管理可以怎麼用,可以試著體驗一下,現在只支援以太坊。它就是模擬的傳統的許可權管理,要兩個人同意才能動賬戶。
問:回到最開始。你說把傳統的對於錢的授權管理機制挪到數字貨幣領域。在傳統審批流程裡,可能需要 A 先透過,然後 B 簽字,然後 C 簽字,這是 MPC 現在就可以做到的嗎?
謝翔:這其實是一個很關鍵的問題。在傳統的流程裡這叫做傳籤,傳簽在 MPC 裡會有一些障礙,我畫一下 MPC 大概的邏輯。
MPC 這個演算法協議是要彼此相連和互動的,比如說經理、財務、CEO 三個人參與生成簽名,它是要求這三個人必須同時線上的,所以 MPC 純演算法本身很難做到傳籤。
但我們可以利用工程架構在產品層面實現傳籤功能,讓上層的使用者不用去管也不用去想底層是怎麼執行的,對於使用者而言,產品的操作體驗和傳統傳籤是一樣的。所以演算法和產品之間是有很大差異的,這裡有兩套東西,除了演算法本身,還需要把技術和業務邏輯結合起來。
問:可以這麼理解嗎,基於 MPC 的金鑰管理不僅是為了安全地儲存金鑰,它更是為了個人或企業能夠方便地、滿足業務邏輯地使用金鑰?
謝翔:它有多個優勢,安全儲存是一方面;而讓個人或者企業更安全便捷地使用金鑰是另一方面。前者是指基於 MPC 的金鑰管理對金鑰或者資產的「託管能力」,體現了靜態的安全性;後者是指基於 MPC 的金鑰管理可以主動設計出多樣化的策略管理,是一種動態的業務賦能。
問:如果有一個需要管理多種 Token 的投資機構,它是不是可以買一套基於 MPC 的金鑰管理演算法,然後用這套演算法實現對不同鏈的簽名,進而實現對不同鏈上資產的管理?
謝翔:它不太可能直接買演算法,它會買產品,比如買一套基於 MPC 的金鑰管理軟體裝在公司內部的伺服器上,然後就可以透過一個介面去管理資產。你可以理解為它買了一套基於 MPC 的財務管理系統。
金鑰管理的最底層是一套演算法,但可以把它包成產品,也可以包成 App、包成 SDK(軟體開發工具包)。
問:如果有一個錢包公司,希望錢包新增一個讓使用者能基於 MPC 管理私鑰的功能,是不是可以找專業的提供 MPC 解決方案的公司合作?
謝翔:對。你可以理解為這個市場有投資機構、有錢包、有交易所,還有其它的一些業務公司,它們各自有自己的業務,但它們一定都會有怎麼管錢這個問題,我們就是提供一套基於 MPC 的金鑰管理能力,也就是基於 MPC 的管錢的能力,來跟它們自己現在的這套系統對接。
從公司的定位來說,PlatOn 是技術提供商或基礎設施提供商,KeyShard 是其中為數字貨幣提供金鑰管理的基礎設施,它把自己往下沉得多一點,不碰上面的業務。它主導的是底層的金鑰管理的 SDK,希望把授權管理的業務流程揉到 SDK 裡面去,當然難點在於要抽象出一套相對來說足夠靈活、好用的 SDK。
基於 MPC 的金鑰管理面臨的挑戰
問:基於 MPC 的金鑰管理現在碰到的難點是什麼?
謝翔:技術的、非技術的都有。非技術的是有人會問為什麼它是安全的?給我個證書。傳統 KMS (Key Management Service)是有證書的,但因為 MPC 技術較新,在金鑰管理上使用的時間不長,目前還沒有足夠權威和廣泛的認證。
這是這個學科的特殊性引發的問題。密碼學雖然有堅實的理論基礎,但是它分理論安全和實際安全,實際安全是不是能達到理論安全這個層面是需要時間檢驗的。所以一是需要標準機構,二是需要學術研究的推動。我們會積極地去推進類似標準、去推進工業界對這個技術的認可,但需要時間,沒那麼快。
技術上的難點就是剛才說的,需要把這一套新的技術和複雜的業務邏輯結合起來。此外,MPC 是一套分散式的技術,分散式的話就會有同步,也就是共識的問題。
原來的授權管理是一個純中心化的東西,業務流程會很好配;但分散式的場景下會有一定的難度,比如使用者在不線上的問題,網路好不好的問題,如果在金鑰重新整理的時候有延時,是用後面那個碎片還是用前面那個碎片的問題。這種細節會有很多,都要去考慮。
問:基於 MPC 的金鑰管理沒有可追究性這種說法是準確的嗎?就是說不知道誰簽了誰沒有籤,無法追查責任?
謝翔:其實是可以知道的,從演算法層面就可以抓到是誰籤的。演算法底層可以透過引入檢查和舉報機制,追查到誰沒有籤,甚至知道是誰在簽名過程中給了不遵循規則的錯誤資訊。
重新認識「私鑰」:私鑰不是鑰匙
「私鑰」這個詞帶來的直覺反應是,它是一種「鑰匙」,作用是開啟保管著數字貨幣的保險櫃,想一想也似乎有道理,使用私鑰就能拿到幣。但實際上,在區塊鏈和數字貨幣領域,私鑰就意味著資產本身。
試想,你的保險櫃鑰匙丟了,你的錢是依然還在的,你可以再配一把鑰匙;但如果私鑰被忘了,錢可就永遠消失了。你的保險櫃鑰匙被偷了,你的錢可能依然安全,因為小偷還需要溜進大樓、撬開房間的門鎖;但如果私鑰被偷了,錢幾乎立馬就不再屬於你。
私鑰不是那把開啟保險櫃的鑰匙,它是要被放進保險櫃的資產本身。而如何設計一個保險櫃系統存放私鑰,使得櫃中的私鑰既安全、又易用,就是金鑰管理。屆時,交到使用者手中的就不是私鑰,而是一套開啟保險櫃的鑰匙。
多重簽名和基於 MPC 的門限簽名都是實現資產管理的方法,但它們是截然不同的設計路線:前者在鏈上,依靠智慧合約數合法簽名的個數;後者在鏈下,依靠 MPC 用碎片生成合法簽名。本文重點介紹的是後者,也就是基於 MPC 的金鑰管理,希望能對你瞭解這種技術和方案有一些幫助。