企业导入区块链的第一道难题:Private Key私钥管理!


根据最新的IDC全球半年度区块链支出指南,2019年亚太地区在区块链解决方案上的支出达到5.227亿美元,与2018年相比增长81%,预计企业导入区块链的需求将在未来5年快速增长,复合年增长率为59.8%。

虽然有越来越的企业想导入区块链,然而区块链却不同于以往的企业IT 技术,大部分的企业或技术厂商仍缺乏系统化的实作知识——例如企业参与联盟链首先要面对的问题:企业该如何管理联盟链的私钥?

在这篇文章中,笔者将会提及企业私钥管理的特殊考量、挑战和解决思路,以及具体解决方案。

以下所称的私钥,若没有特别注明,指的都是企业在联盟链内的私钥。

* Daniel Huang  为本文的共同作者,同时特别感谢  李彦宽Kevin Lee  、Frank Yang  的修订与回馈。

企业私钥管理的特殊考量

私钥(Private Key)如同一枚印章,私钥的使用者可使用私钥在「讯息」(Message)上进行「签章」(Sign),而签章的结果即为「电子签章」( Digital Signature),可以被与该私钥成对的公钥(Public Key)验证。基于密码学原理,私钥做出的电子签章是无法伪造的,因此可用来证明签章者的身份。

而在企业区块链— —也就是联盟链的场景中,企业所拥有的联盟链私钥并非「个人印章」,而是如同无法任意铸刻、对外能代表企业签署的「公司章」。

联盟链的准入制与实名制能够让各企业透过联盟治理的程序知道并认同:哪个「公钥」代表哪间公司,以认定该私钥签章的企业身份。这个联盟链私钥所签署的「电子签章」的公信力并不是企业自己说了算,而是企业与整个联盟共同认可所赋予出来的。也就是说:联盟链私钥不是企业可以随时任意变换的,还要整个联盟也知道并认同才行,就如同企业不可能三天两头重刻公司章一样,这一点是企业私钥管理与公有链的个人私钥保管最大的差异。

正因为联盟链私钥背后代表的主体是公司且不可随意变更,因此企业的联盟链私钥不应该直接被个人所保管,否则随着公司内保管人员的异动,私钥安全便无法确保。

在理解联盟链私钥管理的特殊考量后,接下来我们就来看看:企业在私钥管理上会碰到哪些挑战。

企业联盟链私钥管理的挑战

什么是私钥管理?

如果联盟链私钥就如同企业的公司章,那么联盟链私钥管理其实就如同企业在管理公司章时使用的「印鉴管理」。印鉴管理就是企业内约定的一套「保管」和「调用」公司章的规则,当企业员工需要使用公司章时,就需要按照「印鉴管理」的流程向保管者调用印章;同样地,私钥管理指的也就是私钥的「保管」与「调用」。

私钥管理的难题

基于上述企业私钥管理的特殊考量,在设计上我们会建议把私钥的「保管权」和「调用权」分开,一来是因为私钥代表公司,原本就不应该给个人保管,二来是基于专业分工,也不应该把保管的责任落到企业决策者们身上,企业决策者要负担是的动用私钥背后这件事情的决策责任,而不是提心吊胆的私钥保管的责任。那么,要完美实现上述「保管权」和「调用权」分开的方案,我们在设计上必须做到:

  1. 要找到一种可以安全保管私钥​​方式,而且保管者必须安全妥善的保管私钥,但不能有私钥调用权限;
  2. 在调用私钥签章的同时,不可以对调用者揭露私钥。

保管权和调用权分开的私钥管理方案

理解上述需求与条件,我们就可以说明如上图所示的方案设计:

  1. 调用者首先将「签单」— — 也就是需要私钥签章的讯息及签章方式的要求,交给守门人;
  2. 守门人会判断调用者及签单是否满足调用权限,若满足则把「签单」投入金库;
  3. 金库内进行签章动作,最后将已经完成签章的「签单」交还给调用者。金库如同黑盒子一般,外部无法窥知其运作细节,包括私钥。

这个运作方式相当直观,事实上也是目前企业联盟链私钥管理的最佳实务之一。那么具体的实作方式是什么呢?实际上能找到这样的「金库」跟「守门人」吗?有的!这个技术就是笔者接下来要介绍的Vault。

Vault:完全开源的私钥管理方案

Vault是由Devops工具领域大名鼎鼎的  Hashicorp  所开发、完全开源的秘密管理(Secret Management)系统,根据Vault官网,其价值主张为:「Manage Secrets and Protect Sensitive Data」,设计目标是透过秘密的集中式管理解决软体开发中「秘密散落」(Secret Sprawl)的问题。

Vault 加密存放这些秘密,并为任何秘密——如API 凭证,密码,证书等等,提供统一的介面,同时提供严格的存取控制并记录详细的审计日志(Audit Log)。

另外,除了储存静态秘密,Vault 提供了动态秘密(Dynamic Secret)的功能,能动态生成秘密,让应用程式只能在一段时间内存取敏感资料,大大降低了秘密被偷窃后的风险。

在云原生(Cloud Native)盛行的今天,从使用者到服务,再从服务到服务的每个环节都需要验证,也因此Vault 成为越来越炙手可热的「加密即服务」(Encryption as a Service, EaaS)技术,不仅是云服务平台AWS、GCP、Azure 都提供了整合方案,连知名软体Kubernetes、MySQL 等都有整合Vault 的方式,以取代原来直接接触到秘密的操作方式。

Vault 为什么能作为企业私钥管理的技术方案

回到上述我们的需求:

  1. 要找到一种可以安全保管私钥​​方式,而且保管者必须安全妥善的保管私钥,但不能有私钥调用权限;
  2. 在调用私钥签章的同时,不可以对调用者揭露私钥。

首先,它相当安全。Vault天生就是为了保管秘密而设计,根据Vault的架构,甚至我们可以做到:没有任何「单一的系统管理者」可以解密Vault并查看其内容。所以Vault来担任「金库」的角色,可以说是当之无愧。

接下来,谁要来担任「守门人」?这就得靠Vault另一个聪明的设计——外挂程式(Plug-in)了。Vault支援开发者能够为其开发因为不同需求的外挂程式,而这得利于其本身良好的软体架构。利用外挂程式,我们可以轻易地扩充Vault的应用程式介面(API),让它能针对不同场景提供相应的功能。至于Vault是如何实现这样的弹性的,有兴趣的读者可以参考这篇文章。

外挂程式即为守门人的角色,我们需要把「判断可合法投递到金库签章的条件」以及「签章的方法」写成外挂程式,跟Vault 挂载在一起,透过API 来跟Vault 沟通,也就是把要签章的内容及签章方法透过外挂程式投递到金库。如此一来,就可以在「金库」里面完成私钥签章,达成调用私钥签章的同时,不对调用者揭露私钥的目的。

接下来,我们即将完成最后一哩路:找到一个合适的守门人。

Vault-BX:BSOS 专为联盟链私钥管理打造的Vault 外挂程式

完整的私钥管理方案,除了安全的金库之外,有赖设计良好、可满足企业权限控管需求的守门人,而目前与区块链私钥管里相关的Vault 外挂程式当中比较知名的是Vault -Ethereum。

由  Immutability  开发的  Vault-Ethereum  外挂程式是一种Vault区块链钱包实作,这个外挂程式可以直接对区块链交易进行签章并将交易送到链上。然而,若对其再深入研究可以发现:Vault-Ethereum仅针对个人使用场景设计,只能做到单一的链下使用者去操作Vault签章,并不能满足联盟链私钥管理「多个链下使用者对同一个Vault操作」的需求。

我们需要一个更强大的守门人 

由于坊间并没有全面为联盟链而设计的Vault外挂程式,Vault-BX便应运而生。Vault-BX是  BSOS研发团队自主开发的Vault外挂程式,它完全针对联盟链场景所设计,并补强了其他Vault区块链私钥管理外挂在企业功能上的不足,其重要功能如下:

  • 多对一的私钥调用: Vault-Ethereum虽做到了对调用权限进行验证,但只支援单一使用者,只要知道该使用者ID者,皆可调用私钥。而Vault-BX支援的「验证」功能可做到「多条签核权限」,可以对同一个Vault调用同一把私钥,满足了企业多对一的私钥管理需求。
  • 支援各种联盟链的签章:不同的联盟链技术,其交易格式亦不相同,例如:企业以太坊的交易流水号(Nonce)需要出现在签章讯息中;而在Fabric中签章讯息则需含有其他资讯如  channelID  与  chaincodeID  。Vault-BX是支援最多联盟链的Vault外挂程式,目前支援了多种企业以太坊客户端如Quorum / Besu、Hyperledger Fabric以及R3 Corda,功能上更通用。
  • 支援私密交易的签章:联盟链特有的的私密交易(Private Transaction)在签章时需要额外的参数实作,如EEA定义  privateFrom、privateFor  与  restriction。若外挂程式不特别支援,即便企业对接上了某联盟链,亦无法执行该联盟链的私密交易。Vault-BX不仅支援不同联盟链的签章,对其私密交易也提供了相对应的支援,以满足企业间私密交易的需求。
  • 最后,我们再回顾一下这整套私钥管理的解决方案,现在「金库」就是Vault,负责私钥的安全保管及签章,而「守门人」我们选择了Vault-BX 外挂程式,负责检查调用权限并提供Vault 正确的签章方法。

    结语

    企业导入区块链需求越来越多,但是对于私钥管理往往缺乏意识,亦缺乏系统化的实作知识。区块链私钥管理不同于以往企业的密码管理——企业内部的密码随时可以重新设置、重新配发,然而联盟链私钥代表公司章,更新后还需要取得其他成员的确认与认可,不可随公司人员异动而随意替换。因此一套调用权限和保管两者分离、设想周全的私钥管理机制,在系统设计上是必须的。

    在本文中,笔者首先介绍了联盟链私钥管理的特殊考量,并且说明了私钥管理的挑战与解决思路。同时我们也看到:使用Vault 与Vault-BX 同时辅以企业内部的分责授权机制,即可组成一套完整的企业的私钥管理方案。当然,BSOS 都已经完整地考量,并把这些方案都整合到我们的区块链核心技术BridgeX 内了。

    最后提醒读者,对于私钥安全的完整性来说,调用权限管理也同等重要。本篇文章所描述之内容,并未提及企业内部的调用权限管理,例如:必须完成某一连串的签核流程,才能够跟守门人调用私钥。实务上,企业可以选择对接既有之签核系统,也可另外导入市场上成熟的多层多签安全方案,例如已整合进BSOS BridgeX的CYBAVO私钥权限管理方案。

    郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。