区块链历经10余年的发展,基础技术框架逐渐完善,链上承载的业务越来越丰富,参与方越来越多。多方协作能否顺畅进行、业务摩擦能否得到有效解决、既往治理策略和实践能否满足日后高速发展的需求……行业关注的重点逐步聚焦到这些更具挑战性的难题上。
2021年1月,微众银行区块链在多年技术研究和应用实践的基础上,重磅发布了《面向区块链的多方协作治理框架》白皮书,即MCGF(Multilateral Collaborative Governance Framework)。作为区块链治理的参考架构,MCGF全面覆盖区块链治理的设计规范、参与角色、核心系统架构、功能流程及应用场景等领域。
区块链多方协作治理组件(WeBankBlockchain-Governance)MCGF框架的实做基础和原子性构件,可复用、可定制,由私钥管理组件(Governance-Key)、账户治理组件(Governance-Account)、权限治理组件(Governance-Authority)、证书管理组件(Governance-Cert)等子组件构成。它们嵌入和运行在整个MCGF大框架的各部分,宛如高速行驶的汽车上的车轮、齿轮、传动组、传感器,协同助力构建治理框架和提升开发效率。
我们通过系列文章,抽丝剥茧地解析每一个子组件的关键特性和使用方式。本篇文章是区块链多方协作治理组件系列文章的第三篇,介绍私钥管理组件(Governance-Key),欢迎大家积极体验并将使用诉求或优化建议反馈给我们。
私钥管理的必要性
随着区块链技术的普及,越来越多的企业开始在区块链上开展业务,而要接入区块链,就离不开私钥。时至今日,尽管私钥的概念已被广为人知,但仍然存在一些使用上的痛点。比如:
怎样生成一个密钥对?
密钥生成是否可以兼容各标准,包括国密、助记词、HD派生?
如何对私钥进行安全备份?
有没有私钥的可视化工具?
有没有私钥的企业级托管方法?
拥有密钥后如何操作数据?
……
针对上述问题,微众银行区块链在多方协作治理组件中推出私钥管理子组件WebankBlockchain-Governance-Key,覆盖用户的私钥使用需求。就功能而言,包括私钥生成、私钥备份、私钥托管、私钥使用,覆盖了私钥的全生命周期;就协议而言,支持助记词生成、Keystore备份等多种协议;就场景而言,既支持个人开发者使用私钥,也支持企业级开发者使用该组件进行私钥托管,适合B2B2C场景等。
功能
WebankBlockchain-Governance-Key整体功能可拆分为三块,如下图所示:
在私钥颁发功能中,支持经典的随机数生成方式,并适配了ecc(secp256k1)曲线和国密曲线;还支持助记词生成,方便用户表达、记忆自己的私钥;也支持密钥派生方式,兼容BIP-32和BIP-44,方便用户做到一密钥多用。用户可以将私钥加密保存,支持keystore、pkcs12、pem格式,也支持通过shamir方式进行门限分片。
在私钥管理功能中,加密后的私钥会被托管保存到文件或数据库中,通常被用于企业托管用户私钥的场景。此外,还支持双库存储模式,在该模式下加密私钥和加密口令被分别存储到不同数据源中,这样即便遭受攻击,也不至于出现私钥明文被泄露的情况,提高了安全系数。
在私钥使用功能中,包括了私钥签名、验签、明文加密、密文解密四项功能,用户可以根据实际需求使用。
特性
覆盖全生命周期
WebankBlockchain-Governance-Key为了能够让用户方便地使用私钥,提供了私钥生成、私钥备份、私钥托管、私钥使用等一系列功能,覆盖了整个私钥的生命周期,旨在尽可能满足使用者的各项需求。
适配多种主流协议
无论是私钥生成还是备份等,WebankBlockchain-Governance-Key均提供了多种标准协议,便于用户使用。例如,私钥生成中,对于助记词的支持源于BIP-39协议,对私钥派生的支持则适配了BIP-32和BIP-44协议;就私钥备份而言,既支持FISCO BCOS常用的pkcs12和pem格式,也支持keystore标准,同时还支持分片保管。通过适配多种协议,尽量满足用户的密钥需求。
面向个人和企业
对于私钥的使用者,可分为两类:个人使用者和企业使用者。对于个人使用者而言,主要需求是私钥的生成、备份、签名等。对于企业级使用者,多见于B2B2C场景,主要是托管C端用户私钥。对于个人级开发者,WebankBlockchain-Governance-Key提供了相关功能,还提供了一个可视化界面;对于企业级开发者,提供了私钥托管功能,还包括了双库存储模式等。
可视化使用
上述各项私钥的功能,在对应的sdk中,用户可以通过sdk方式接入;此外,WebankBlockchain-Governance-Key还提供了一个可视化界面,用户不需要任何配置就可以启动该界面,并体验私钥的生成、备份等基本功能,期望满足用户的日常需求。
国密支持
WebankBlockchain-Governance-Key对私钥的全生命周期做了国密化适配。首先,私钥的生成曲线支持国密曲线;此外,支持备份国密私钥,无论是keystore还是pem、p12均可支持;最后,对于私钥的使用,支持国密私钥的签名验签、加解密等。
场景
场景一:个人使用
下图是个人使用私钥的示意图:
首先用户可以通过助记词等方式生成私钥;
接下来,用户需要对私钥备份。除了将助记词抄到纸上等方式,还支持将它导出到keystore,pkcs12等文件中;此外,还允许将私钥分片,只有当凑齐指定数目的碎片,才可以还原出完整私钥。
最后,对于不同的使用场景,用户可以根据不同的场景确定性地派生出子私钥,这样一方面可以降低根私钥泄露的风险,另一方面还可以提高私钥保存的简便程度,避免为不同的场景去维护不同的私钥。
场景二:企业级使用
企业级场景中,多见于B2B2C模式,在该模式中,企业会托管C端用户的私钥。
以下图场景为例,企业生成用户生的私钥。接下来,企业会将该用户私钥进行加密备份,备份后的密文会被保存到数据库中。对于该密文的加密口令,会被保存到另一个数据库中,这样降低了数据库被攻击,造成明文泄露风险。
快速体验
Governance-Key包含两种使用模式:sdk模式和可视化界面模式。这一节介绍可视化模式,该模式包含私钥的主要使用功能,包括私钥生成、备份、格式转换等。
源码下载
通过git下载源码。
github下载:
git clone https://github.com/WeBankBlockchain/Governance-Key.git
如果因网络等原因无法下载,可以使用gitee地址:
git clone https://gitee.com/WeBankBlockchain/Governance-Key.git
编译源码
进入相关目录,并编译界面:
cd Governance-Key
cd key-core-web
gradle bootJar
启动界面
编译完成后,启动界面:
cd dist
java jar key-core-web.jar
启动成功后,会自动弹出一个可视化界面,如下图所示。如果未自动弹出,用户也可以访问该端口:
http://localhost:8001
体验界面
用户可以在这个界面上进行操作。以私钥生成为例,如果用户希望生成私钥明文,可以直接点击“生成”,随后私钥、公钥、地址都会被显示出来:
用户也可以直接将私钥导出,例如导出为pem格式:
点击后,会自动下载pem格式文件等。
关于sdk的使用,则可以参考后文中的文档地址。
即刻使用
文档地址:
https://governance-doc.readthedocs.io/zh_CN/latest/docs/WeBankBlockchain-Governance-Key/index.html
GitHub代码库地址:
https://github.com/WeBankBlockchain/Governance-Key
gitee代码库地址:
https://gitee.com/WeBankBlockchain/Governance-Key
欢迎参与WeBankBlockchain的社区建设:
如项目对您有帮助,欢迎点亮我们的小星星(点击项目右上方Star按钮)。
欢迎提交代码(Pull requests)。
提问和提交BUG。
如果发现代码存在安全漏洞,可通过https://security.webank.com/上报。
如需咨询技术问题,欢迎关注本公众号,对话框回复【小助手】进技术交流群。