编者按:本文来自链闻,受访者:谢翔,PlatON算法科学家,采访/撰文:李画,Odaily星球日报经授权转载。密钥管理是一个正在变得越来越重要的概念,已经成为区块链领域重要的基础设施。当数字货币或Token更多的被交易和使用,而不仅仅被一劳永逸地存储时,通过私钥或钱包密码使用资产的方式既不安全,也不友好,更难以满足诸多应用场景的需求。基于MPC的门限签名方式与多重签名方式是两种不同的密钥管理方法,在这篇文章中,我们采访了PlatON算法科学家谢翔博士,他将为我们介绍基于MPC的密钥管理,以及这种方式与多重签名方式的本质区别。谢翔是数学与密码学专业出身,现为PlatON算法科学家及KeyShard产品负责人,专注于密码算法的研究、实现和产品化。KeyShard提供的是基于MPC的密钥管理服务,为数字货币密钥管理和恢复的痛点提供解决方案。什么是基于MPC的密钥管理
问:为什么我们需要密钥管理?谢翔:个人可以在区块链或比特币网络上自由地注册账户、转账,不需要任何第三方,这个功能是通过一套数字签名机制来完成的。在数字货币里,最核心的就是如何去管理这个签名,因为所有的东西都会依赖于这个签名。对于用户而言,管理签名其实就是去管理密钥。因此我们说密钥就是钱,密钥管理很重要。在传统的行业里,你可以通过银行也好,通过一系列的流程设计也好来管理钱,比如说可以多个人来管,投资经理同意了、投资总监同意了、财务同意了、CEO同意了,这笔钱才能转出去。但是一旦挪到数字货币这个行业,传统那套是做不了的,为什么?因为谁有私钥谁就能转钱,传统那一套审批流程是形同虚设的,没有任何意义。所以我们做密钥管理这件事情最初的一个想法,就是说能不能把传统的对于钱的授权管理机制挪到数字货币的世界里面来。这个肯定是需要的,因为现在很多人已经开始用Token在投资了,比如说基金,比如说家族的VC,他们是需要有一种内部管理的机制的,但是传统的那套审批机制在技术上过不来。问:多签可以解决这个问题吗?谢翔:多签是基于脚本或智能合约的。它是设计一个规则,比如说三个人同时签了或者两个人同时签了,将这些签名传递给一份智能合约,合约就开始运行,把钱转出去。多签能解决一部分问题,它其实已经用到很多企业里了,但是随着时间的进展会碰到越来越多的问题,问题在哪里呢?多签针对不同的主链需要实现不同的智能合约,现在的链至少有一千多个了,每个链的智能合约体系不一样,每个人去写合约写得还不一样。拿VC来说,VC可能会投很多链,这些Token怎么管?你要他们去写十几个合约,而且都还要经过安全认证?这是一个大的人力成本。此外,区块链上合约的任何细节都会被看见,这是有一层安全性问题在那里的。任何人都可以来看这个合约有没有漏洞,而且很多新的链不像比特币或以太坊那样经过了时间的验证,它的合约体系本身有没有问题是不知道的。你会发现一些新的Token出问题,90%都是合约出问题,这是一个大的风险。所以在多链的情况下,多签还能方便地支持密钥管理吗?目前看其实是很难的。用多签通过合约的方式来管理密钥,使用成本高,安全风险高。问:如果这些不同的链都是基于相同的数字签名算法,比如Schnorr,那么不同链的密钥管理方法是不是就可以通用?谢翔:不,逻辑不是这样的,我给你画一下。多签是这样的,最下边是区块链,中间是数字签名,它有个签名算法,可以是ECDSA,可以是Schnorr等等,最上边是智能合约。
多签是怎么做的呢?就是在最上边的智能合约部分来数合法签名的个数,一个、两个、三个……够了,就把钱转出去。这种方式不在乎下边用的是什么签名算法,Schnorr也好、BLS也好,对它来说没有半点区别。这是多签的一个基本原理,也可以说是好处,它能够和底层的签名算法做到一定程度的解耦。但它的问题是要适配不同链系统,一千条链就需要一千个智能合约,多链的兼容性很弱。问:那基于MPC的门限签名是怎样的?谢翔:我把这张图重新画一下。最下边还是这条链,中间还是数字签名,上边是智能合约。基于MPC的门限签名不会去管下边的链,也不会去管上边的合约,两头它都不会管,它只管右边这部分,也就是链下创建签名的部分。
它的思路是说一个签名一定是有一个私钥的,它把这个私钥以某种方式分成很多「碎片」,这些碎片可以被很多人同时拿着,然后通过一套MPC协议,保证这些碎片不需要被拼起来就可以直接产生一个合法的签名。「不需要被拼起来」代表着真正的私钥始终没有、而且也不需要出现。问:签名是在链下完成的?谢翔:需要签名的时候,比如说我们公司三个人会在链下跑一个协议,生成一个签名,再把签名放到链上。生成签名的逻辑是放在MPC里实现的,出来的是一个标准的签名,但怎么跑这个协议别人是不知道的。把这个签名结果放到链上去,别人分不清它后面是一个人签的还是多个人签的,因为它的形态、样子就是一个签名,和直接用私钥签出来是一模一样的。这一套签名机制可以完全独立于链,部署在企业的内部。发现了没有,多重签名主要是去数合法签名的个数,它不依赖于签名算法,但要去适配链系统;基于MPC的门限签名主要是去产生一个签名,它依赖于签名算法,但不需要去适配合约和链系统。基于MPC的门限签名与合约模块是完全解耦的,合约是怎么写的、链是怎么样的,它完全不在乎。它只要区别签名算法,只要签名算法是链系统支持的,它就能很好地衔接。算法的话现在可能就是ECDSA、Schnorr、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的管钱的能力,来跟它们自己现在的这套系统对接。从公司的定位来说,KeyShard其实是一个技术提供商或一个基础设施公司,它把自己往下沉得多一点,不碰上面的业务。它主导的是底层的密钥管理的SDK,希望把授权管理的业务流程揉到SDK里面去,当然难点在于要抽象出一套相对来说足够灵活、好用的SDK。基于MPC的密钥管理面临的挑战
问:基于MPC的密钥管理现在碰到的难点是什么?谢翔:技术的、非技术的都有。非技术的是有人会问为什么它是安全的?给我个证书。传统KMS是有证书的,但因为基于MPC的密钥管理时间没有那么长,没有认证。这是这个学科的特殊性引发的问题。密码学虽然有坚实的理论基础,但是它分理论安全和实际安全,实际安全是不是能达到理论安全这个层面是需要时间检验的。所以一是需要标准机构,二是需要学术研究的推动。我们会积极地去推进类似标准、去推进工业界对这个技术的认可,但需要时间,没那么快。技术上的难点就是刚才说的,需要把这一套新的技术和复杂的业务逻辑结合起来。此外,MPC是一套分布式的技术,分布式的话就会有同步,也就是共识的问题。原来的授权管理是一个纯中心化的东西,业务流程会很好配;但分布式的场景下会有一定的难度,比如使用者在不在线的问题,网络好不好的问题,如果在密钥刷新的时候有延时,是用后面那个碎片还是用前面那个碎片的问题。这种细节会有很多,都要去考虑。问:基于MPC的密钥管理没有可追究性这种说法是准确的吗?就是说不知道谁签了谁没有签,无法追查责任?谢翔:其实是可以知道的,从算法层面就可以抓到是谁签的。算法底层可以通过引入检查和举报机制,追查到谁没有签,甚至知道是谁在签名过程中给了不遵循规则的错误信息。来自使用的需求:密钥管理是一个正在变得越来越重要的概念,它甚至有可能成为区块链领域一类重要的基础设施。因为当数字货币或Token更多的被交易和使用,而不仅仅被一劳永逸地存储时,通过私钥或钱包密码使用资产的方式既不安全,也不友好,更难以满足诸多应用场景的需求。多重签名和基于MPC的门限签名都是实现密钥管理的方法,但它们是截然不同的设计路线:前者在链上,依靠智能合约数合法签名的个数;后者在链下,依靠MPC用碎片生成合法签名。本文重点介绍的是后者,也就是基于MPC的密钥管理,希望能对你了解这种技术和方案有一些帮助。重新认识「私钥」:私钥不是钥匙
「私钥」这个词带来的直觉反应是,它是一种「钥匙」,作用是打开保管着数字货币的保险柜,想一想也似乎有道理,使用私钥就能拿到币。但实际上,在区块链和数字货币领域,私钥就意味着资产本身。试想,你的保险柜钥匙丢了,你的钱是依然还在的,你可以再配一把钥匙;但如果私钥被忘了,钱可就永远消失了。你的保险柜钥匙被偷了,你的钱可能依然安全,因为小偷还需要溜进大楼、撬开房间的门锁;但如果私钥被偷了,钱几乎立马就不再属于你。私钥不是那把打开保险柜的钥匙,它是要被放进保险柜的资产本身。而如何设计一个保险柜系统存放私钥,使得柜中的私钥既安全、又易用,就是密钥管理。届时,交到用户手中的就不是私钥,而是一套打开保险柜的钥匙。多重签名和基于MPC的门限签名都是实现密钥管理的方法,但它们是截然不同的设计路线:前者在链上,依靠智能合约数合法签名的个数;后者在链下,依靠MPC用碎片生成合法签名。本文重点介绍的是后者,也就是基于MPC的密钥管理,希望能对你了解这种技术和方案有一些帮助。
郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。