一文读懂基于安全多方计算(MPC)的密钥管理,以及与多重签名方式的本质区别。

受访者:谢翔,PlatON 算法科学家
采访 / 撰文:李画

密钥管理是一个正在变得越来越重要的概念,已经成为区块链领域重要的基础设施。当数字货币或 Token 更多的被交易和使用,而不仅仅被一劳永逸地存储时,通过私钥或钱包密码使用资产的方式既不安全,也不友好,更难以满足诸多应用场景的需求。

基于 MPC (安全多方计算)的门限签名方式与多重签名方式是两种不同的密钥管理方法,在这篇文章中,我们采访了 PlatON 算法科学家 谢翔 博士,他将为我们介绍基于 MPC 的 密钥管理 ,以及这种方式与多重签名方式的本质区别。

谢翔是数学与密码学专业出身,现为 PlatON 算法科学家及 KeyShard 产品负责人,专注于密码算法的研究、实现和产品化。KeyShard 提供的是基于 MPC 的密钥管理服务,为 数字货币密钥管理和恢复的痛点提供解决方案。

什么是基于 MPC 的密钥管理

问: 为什么我们需要密钥管理?

谢翔 :个人可以在区块链或比特币网络上自由地注册账户、转账,不需要任何第三方,这个功能是通过一套数字签名机制来完成的。在数字货币里,最核心的就是如何去管理这个签名,因为所有的东西都会依赖于这个签名的有效性。

对于用户而言,管理 签名 其实就是去管理 密钥 。因此我们说密钥就是钱,密钥管理很重要。

在传统的行业里,你可以通过银行也好,通过一系列的流程设计也好来管理钱,比如说可以多个人来管,投资经理同意了、投资总监同意了、财务同意了、CEO 同意了,这笔钱才能转出去。但是一旦挪到数字货币这个行业,传统那套是做不了的,为什么?因为谁有私钥谁就能转钱,传统那一套审批流程是形同虚设的,没有任何意义。

所以我们做密钥管理这件事情最初的一个想法,就是说能不能把传统的对于钱的授权管理机制挪到数字货币的世界里面来。这个肯定是需要的,因为现在很多人已经开始用 Token 在投资了,比如说基金,比如说家族的 VC,他们是需要有一种内部管理的机制的,但是传统的那套审批机制在技术上过不来。

问: 多签可以解决这个问题吗?

谢翔 :多签是基于 脚本智能合约 的。它是设计一个规则,比如说三个人同时签了或者两个人同时签了,将这些签名传递给一份智能合约,合约就开始运行,把钱转出去。多签能解决一部分问题,它其实已经用到很多企业里了,但是随着时间的进展会碰到越来越多的问题,问题在哪里呢?

多签针对不同的主链需要实现不同的智能合约,现在的链至少有一千多个了,每个链的智能合约体系不一样,每个人去写合约写得还不一样。拿 VC 来说,VC 可能会投很多链,这些 Token 怎么管?你要他们去写十几个合约,而且都还要经过安全认证?这是一个大的人力成本。

此外,区块链上合约的任何细节都会被看见,这是有一层安全性问题在那里的。任何人都可以来看这个合约有没有漏洞,而且很多新的链不像比特币或以太坊那样经过了时间的验证,它的合约体系本身有没有问题是不知道的。你会发现一些新的 Token 出问题, 90% 都是合约出问题,这是一个大的风险。

所以在多链的情况下,多签还能方便地支持密钥管理吗?目前看其实是很难的。用多签通过合约的方式来管理密钥,使用成本高,安全风险高。

问: 如果这些不同的链都是基于相同的数字签名算法,比如 Schnorr,那么不同链的密钥管理方法是不是就可以通用?

谢翔 :不,逻辑不是这样的,我给你画一下。多签是这样的,最下边是区块链,中间是数字签名,它有个签名算法,可以是 ECDSA ,可以是 Schnorr 等等, 最上边是智能合约。

安全多方计算 MPC 正热,如何通过 MPC 管理密钥?

多签是怎么做的呢?就是在最上边的智能合约部分来数合法签名的个数,一个、两个、三个……够了,就把钱转出去。这种方式不在乎下边用的是什么签名算法, Schnorr 也好、 BLS 也好,对它来说没有半点区别。

这是多签的一个基本原理,也可以说是好处,它能够和底层的签名算法做到一定程度的解耦。但它的问题是要适配不同链系统,一千条链就需要一千个智能合约,多链的兼容性很弱。

问: 那基于 MPC 的门限签名是怎样的?

谢翔 :我把这张图重新画一下。最下边还是这条链,中间还是数字签名,上边是智能合约。基于 MPC 的门限签名不会去管下边的链,也不会去管上边的合约,两头它都不会管,它只管右边这部分,也就是 链下 创建签名的部分。

安全多方计算 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 正热,如何通过 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 的密钥管理,希望能对你了解这种技术和方案有一些帮助。

来源链接:mp.weixin.qq.com