Hyperledger Fabric 国密改造项目介绍

有关bccsp的改造方案的RFC文档

Fabric国密改造项目由Hyperlegder中国工作组(TWGC)发起执行,旨在构建支持国密算法且密码算法可灵活扩展的Fabric平台,方便世界各国开发者快速接入自定义的密码算法。

根据改造需求分析,Fabric国密改造方案由三个部分构成:

  • 国密算法基础库收集与改造

    构建完善可用的国密算法基础库是Fabric国密改造的首要事项。本次改造涉及的国密算法包括:SM2、SM3和SM4。另外,TLS协议也需要进行对应的国密改造。

    • 北京大学信息安全实验室 GMSSL 系列 (https://github.com/Hyperledger-TWGC/pku-gm)
    • 中国网安 CCS-GM 系列 (https://github.com/Hyperledger-TWGC/ccs-gm)
    • 苏州同济区块链研究院 (tjfoc-gm https://github.com/Hyperledger-TWGC/tjfoc-gm)
  • Fabric本体改造

    Fabric本体改造包括:Fabirc改造和Fabric-CA改造,主要是重构Fabric密码套件接入方式,以便开发者灵活接入自定义的密码算法。完成对Fabric的国密算法接入改造,主要涉及国密算法的Golang实现以及改造出符合国密标准的TLS通信加密组件。

  • Fabric SDK改造

    Fabric SDK改造包括:Fabric客户端SDK改造,这部分涉及的语言分别是Golang、NodeJS和Java。当Fabric的国密改造完成时,对应的客户端程序中部分涉及加密学的部分也需要进行国密改造以适配Fabric网络的国密PKI体系。

    • java-gm (https://github.com/Hyperledger-TWGC/java-gm)
    • node-gm (https://github.com/Hyperledger-TWGC/node-gm)

BCCSP

我们现在在 Hyperledger-TWGC github 组织下拥有 3 个中国加密库流。
其中一些还提供了成功的、经过企业验证的 bccsp 实现。
但是随着我们深入了解结构源,我们注意到仅实现 bccsp 并不能满足中国国家加密规范的所有要求。
bccsp之外还有一些cypro库的使用,比如通讯协议,X509格式转换。

Fabric 核心与 x509 标准非常非常紧密地结合在一起:

所有通信都假设 TLS 使用 x509 并且没有可插拔算法(不过,可以分叉 TLS 库并制作您自己的版本)。

Fabric 身份验证基础结构使用 BCCSP MSP,它也很大程度上基于 x509,并没有以任何方式将其抽象出来。

彻底检查整个代码库以抽象出 x509 将需要大量工作,如果我们这样做,它将使向后移植更改和错误修复变得痛苦,因为代码库会分歧太多。

国密改造目标

  • 采用规范的非入侵式的改造设计,希望国密改造能够与Fabric升级持续兼容;
  • 开发支持多语言且完善的国密库和通讯套件;
  • 实现Fabric-SDK多语言的国密改造;

MSP

目前,Hyperledger Fabric支持FABRIC类型和IDEMIX类型两种MSP组件,默认采用基于BCCSP组件构建的FABRIC类型MSP组件

  • localMspType: bccsp # MSP类型, 目前支持bccsp或idemix
  • BCCSP类型: Fabric默认类型
  • IDEMIX类型: Fabric 1.3中还增加了IDEMIX类型的MSP组件,采用了零知识证明的方法以提供身份验证与隐私保护功能(http://eprint.iacr.org/2016/663.pdf),这使得在不披露被验证者身份信息的情况下,向验证方证明自己的合法身份并完成交易,具有不可链接性(linkability),即无法从单个身份执行的多个交易中分析出是由同一个身份实体提交的,以实现真正意义上的匿名隐私保护特性,同时,提供Fabric CA(1.3以上版本,适用于生产环境)与idemixgen工具(适用于开发环境)作为发行者(Issuer)创建配置文件,为用户提供凭证(credential)。

Other

common.InitCrypto()函数首先调用SetBCCSPKeystorePath()函数,获取Viper组件配置中BCCSP组件密钥存储文件的路径(peer.BCCSP.SW.FileKeyStore.KeyStore配置项),转换为绝对路径后设置该配置项

调用creator.Verify()方法获取哈希方法及消息摘要(哈希值),通过所属MSP组件的BCCSP加密安全组件调用id.msp.bccsp.Verify()方法,验证消息签名的真实性。

然后,调用creator.Validate()→bccspmsp.validateIdentity()方法,验证该证书的有效性(7.2.1节),即是否满足证书符合X.509标准、证书不属于CRL、证书组织单元OU字段与MSP组织单元有交集等要求。

然后,执行identity.SatisfiesPrincipal(signedByID)→bccspmsp.SatisfiesPrincipal()方法,验证该签名身份实体信息identity是否满足指定签名策略的Principal结构对象要求。

defaultBCCSP对象的Setup()方法基于参数解析出MSP组件配置对象(FabricMSP-Config类型),将其作为参数传递给内部构建方法(即bccspmsp.setupV1()方法)执行调用,并依次调用msp.preSetupV1()方法和msp.postSetupV1()方法初始化本地MSP组件,

(10)bccsp节点bccsp节点包含了加密算法相关的配置,在bccsp节点中可以选择相关的加密算法以及相关加密算法的证书文件。bccsp节点的配置信息如下所示:


往期精彩回顾:
区块链知识系列
密码学系列
零知识证明系列
共识系列
公链调研系列
BTC系列
以太坊系列
EOS系列
Filecoin系列
联盟链系列
Fabric系列
智能合约系列
Token系列

Fabric系列 - 国密改造相关推荐

  1. httpclient 不支持国密ssl_Hyperledger Fabric成都见面会:TWGC国密改造介绍

    会议介绍 2020年12月5日,第一次参加线下成都区域的线下见面会,此次见面会中,嘉宾分享了"货信云动产数字化和管理一体化的解决方案"."从区块链到空间区块链" ...

  2. 国密加密算法 java 开源_Hyperledger Fabric 国密改造项目介绍

    引言 密码学是区块链实施中最重要的组成部分之一.然而,每个国家都有自己的国家加密算法,因此,在实施联盟链方案時支持国密算法尤其重要.Hyperledger Fabric在包括中国在内的世界范围内得到广 ...

  3. fabric 国密改造

    背景 最近应公司项目需求,需要对fabric中的加密相关模块进行改造,主要目的是使fabric底层加密服务支持国密算法sm2.sm3以及sm4等.借这次机会,顺便熟悉一下fabric加密模块的源码实现 ...

  4. Hyperledger Fabric国密改造

    Fabric国密改造是个什么概念?我们来思考以下4个问题: 为什么偏偏是密码算法?(WHY?) 什么是国密算法?(WHAT?) 改造切入点什么?(WHERE?) 如何实现国密支持?(HOW?) 1.为 ...

  5. Hyperleder Fabric国密改造一键部署工具区块链网络修改工具

    A.Fabric国密改造(以2.2版本为例) A.1.golang国密改造修改文件清单 └─src     └─crypto         │  crypto.go         │       ...

  6. Fabric CA国密版本的一种替代方案--使用cryptogen工具增加新用户

    在Fabric超级账本中,如果我们想动态增加用户发行证书,一般会使用Fabric CA或者其它CA.然而在国密改造场景中,当前缺乏可用的开源的Fabric CA国密版本.因此,笔者研究了一下,发现了一 ...

  7. fabric1.4.x国密改造过程全记录(一)

    接到任务:对hyperledger进行国密改造,上网查资料,但却没找到现成的,只能站在巨人的肩膀上自己改啦,在github搜到对自己有用的源码,一.https://github.com/tjfoc/h ...

  8. SM系列国密算法(转)

    原文地址:科普一下SM系列国密算法(从零开始学区块链 189) 众所周知,为了保障商用密码的安全性,国家商用密码管理办公室制定了一系列密码标准,包括SM1(SCB2).SM2.SM3.SM4.SM7. ...

  9. 商业银行金融IC卡国密改造安全建设方案

    一.背景 金融和重要领域国密改造是我国大力推进自主国产密码应用的重要政策.2011年3月,人民银行发布了<关于推进金融IC卡应用工作的意见>,开始全面启动我国金融IC卡迁移,要求2015年 ...

最新文章

  1. catia直线测距怎么调出来_为户外远程测距而生
  2. vCenter Server Appliance 5.5忘记root密码
  3. wedo巡线机器人编程教程_这是一个机器人和编程的时代
  4. Java 线程池中的线程复用是如何实现的?
  5. webpack.config.js和package.json
  6. 总结界面框架_UI_Adapter
  7. PAT A1149 Dangerous Goods Packaging (25 分)——set查找
  8. Haproxy的安装与配置
  9. 企业如何确定需要什么样的产品经理
  10. (6)java的内存泄露问题
  11. MAC机上JAVA对话框死锁的案例之一
  12. ABB变频器配件,西门子变频器配件,施耐德变频器配件
  13. Meshlab源码编译
  14. ros中的launch文件注释
  15. Python制作gif动态图
  16. python 中怎么把类似这样的‘\xe5\xae\x9d\xe9\xb8\xa1\xe5\xb8\x82‘转换成汉字输出
  17. 三极管的经典之作,你知道吗?
  18. android一键 iphone,安卓手机一键变“iPhone”,这种App太过分了
  19. opencv 获取最小外接矩形
  20. -在c语言中什么含义

热门文章

  1. 北京北工大计算机以下学校排名,计算机专业考研院校排名分析
  2. Python3数据分析与挖掘建模(6)单因子分析:离散分布分析示例
  3. pandas中MultiIndex的levels属性和对象实际索引的levels不一致问题
  4. .net mysql 变量_.net 数据库 全局变量
  5. ASEMI代理ADM3202ARUZ-REEL7原装ADI车规级ADM3202ARUZ-REEL7
  6. 用路由做企业管理:所有人都说不可能的时候(上)
  7. js之求最大值和最小值总结
  8. Starling flash 简单应用
  9. 企业印章管控新模式:集中管控、分散使用
  10. 灰度图像--图像增强 拉普拉斯算子