欢迎光临爽报娱乐新闻 YesDaily.com




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

发布时间:2024-05-07 爽报 YesDaily.COM 208

前言

根据最新的 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 加密即服务

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

回到上述我们的需求:

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

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

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

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

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

Vault-BX:BSOS 专为联盟链私钥管理打造的 Vault 插件

\"\"

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 定义 privateFromprivateFor 与 restriction。若插件不特别支援,即便企业对接上了某联盟链,亦无法执行该联盟链的私密交易。Vault-BX 不仅支援不同联盟链的签章,对其私密交易也提供了相对应的支援,以满足企业间私密交易的需求。

最后,我们再回顾一下这整套私钥管理的解决方案,现在“金库”就是 Vault,负责私钥的安全保管及签章,而“守门人”我们选择了 Vault-BX 插件,负责检查调用权限并提供 Vault 正确的签章方法。


结语

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

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

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

参考资料

  • What is Enterprise Key Management?
  • Using Vault to Build an Ethereum Wallet
  • How Vault Encrypts Application Data During Transit and at Rest

区块客致力于发掘和整理各种与区块链技术有关的内容,只要与区块链或区块客网站有关的合作和/或建议,我们都非常欢迎。请您发电邮至 [email protected] 与我们联系。


标签:  
0