夏浩飞
摘 要:为厘清Hyperledger Fabric的两级证书系统设计思路,深入理解与运用Fabric项目的身份管理模块,依据“Fabric协议规范”内容整理并简要阐述Fabric两级证书体系设计方案,着重分析交易证书结构、公私钥对生成算法及身份监管实现方法。在此基础上,指出交易证书结构及密钥对生成算法存在的不足,提出一种改进方案,并论证改进方案在实现交易之间无关联、交易匿名与身份追溯功能方面的可行性,发现其算法效率较“Fabric协议规范”中方案具有一定提升。
关键词:Fabric;身份管理;两级证书;区块链;匿名交易;监管
DOI:10. 11907/rjdk. 192106 开放科学(资源服务)标识码(OSID):
中图分类号:TP399 文献标识码:A 文章编号:1672-7800(2020)005-0238-04
0 引言
在公有链领域,ShoCard是最早研究区块链身份管理的公司之一,其思路为区块链不存储个人身份等敏感信息,而只是作为一种数据交换平台,身份信息在用户终端存储[1]。Uport项目基于以太坊平台提出一种地址即身份、没有CA的身份管理系统[2],PKIoverheid[3]、Idensys[4]、e-Residents[5]等也是较早尝试依托区块链技术建立数字身份系统的项目。针对区块链身份管理,很多学者也进行了大量研究,如朱岩等[6]认为隐私保护已经成为区块链技术应用中的关键环节;董贵山等[7]设计基于区块链的信任服务模型,意在解决弱中心化的区块链系统身份管理问题;顾燕[8]设计并实现了基于公有链的身份认证系统,包括用户注册、用户登录、身份信息修改等功能;邓毅等[9]通过概述各类区块链隐私安全保护方式的优缺点,分析了其可行性。
在以Hyperledger Fabric为代表的联盟链身份管理方面[10],翟社平等[11]认为通过分析全局账本中的交易记录,潜在攻击者可能会对用户的交易隐私和身份隐私造成威胁;王俊生等[12]认为监管者应该探索利用区块链新技术改进监管方式,完善监管手段;阎军智等[13]分析基于PKI数字证书系统的申请、签发及吊销流程;赵东路[14]从区块链业务安全需求出发,分析联盟链中隐私保护与监管审计功能并存的重要性;陈永丰[15]在分析Fabric身份管理与访问控制系统的基础上,设计并实现了MAC和RBAC两种基于fabric1.0的数据访问控制模型;张健毅等[16]提出一种基于区块链的联盟链—公有链双链结构,在保持去中心化特性的同时,通过联盟链对公有链进行交易溯源以及用户身份确定,实现对电子货币的监管;李佩丽等[17]基于已有区块链隐私保护技术,提出网络互助平台的用户隐私保护方法,使平台用户身份信息对其他用户都是保密的。
以上研究指出区块链中匿名交易与身份管理属性的重要性,但均未提及能够同时保证交易匿名与可监管的具体算法。本文参照Hyperledger Fabric协议规范[18]内容,简要介绍Fabric两级证书系统框架,着重分析交易证书结构、签名密钥对生成过程,以及两级证书系统实现交易匿名与监管并存的方法,在此基础上,指出两级证书系统方案中存在的不足,提出一种改进方案,并论证改进方案在功能实现方面的可行性及执行的高效性。
1 Fabric两级证书系统
Fabric身份管理功能由CA模块(包括ECA和TCA)负责统一管理,通过注册(ECert)和交易(TCert)两级证书实现该功能。用户完成身份注册后,持有效ECert便可登录Fabric网络,若要执行交易,则须申请TCert。TCert由TCA根据申请批量生成,用户凭借TCert发起、调用与查询交易。图1为ECert生成过程,图2为TCert生成过程[18]。
2 交易证书
2.1 交易证书结构
Fabric交易证书符合X.509证书格式[19],Fabric协议规范给出TCert结构如表1所示。
2.2 签名公钥生成
Sign Verification Public Key是证书中的签名公钥,记为TCertPub_Key,生成步骤如下:①TCA生成根秘钥,记为TCA_KDF_Key;②利用根秘钥和注册证书公钥生成派生功能秘钥,记为KeyDF_Key;③利用派生功能秘钥生成扩展秘钥,记为Expansion_Key;④利用扩展秘钥和TcertIndex生成扩展值(TCertIndex由每个批次交易证书的唯一时间戳+随机偏移量+计数器的值生成,计数器初始值为1,每次增加2),记为ExpansionValue;⑤利用注册证书公钥和扩展值生成签名公钥。
2.3 Hidden Private Keys Extraction生成
Hidden Private Keys Extraction是TCertIndex的加密信息,采用AES对称加密,客户端從交易证书中获取Hidden Private Keys Extraction,用于恢复TCertIndex,进而生成签名私钥, Hidden Private Keys Extraction=AES_EncryptTCertOwner_EncryptKey(TCertIndex || 常数),其中TCertOwner_EncryptKey=[HMAC(KeyDF_Key, “1”) ]256位截断。
2.4 Hidden Enrollment ID生成
Hidden Enrollment ID 是隐藏在TCert中的用户身份信息,用于特定机构对交易的监管与审计,Hidden Enrollment ID 采用AES对称加密算法生成。Hidden Enrollment ID=AES_EncryptK(enrollmentID),K=[HMAC(Pre-K,TCertID)]256位截断,其中独立秘钥Pre_K用于enrollmentID的加密与解密,Pre_K仅对TCA及有权限的监管、审计人员可见。
TCA完成批量TCerts生成后,将TCerts 和派生功能秘钥KeyDF_Key通过安全信道发送至客户端。
2.5 签名私钥生成
客户端为发起交易,需要生成签名私钥,记为TCertPriv_Key,步骤如下:①接收TCA传输过来的KeyDF_Key和TCerts;②生成Expansion_Key,Expansion_Key = HMAC(KeyDF_Key, “2”);③生成解密TCertIndex的秘钥TCertOwner_EncryptKey=HMAC(KeyDF_Key, “1”) 256位截断;④读取Tcert中的Hidden Private Keys Extraction ,解密TCertIndex ,TCertIndex =AES_DecryptTCertOwner_EncryptKey (Hidden Private Keys Extraction);⑤生成ExpansionValue = HMAC(Expansion_Key, TCertIndex);⑥生成TCertPriv_Key = (EnrollPriv_Key + ExpansionValue)mod n。
3 方案分析
3.1 公私鑰结构分析
Fabric注册证书和交易证书使用椭圆曲线算法(ECC)[20]生成签名秘钥对,ECC算法的公私钥对满足K=kG,且k 3.2 交易匿名性 用户在发起交易前,利用TCertPriv_Key对交易进行签名,并附上TCert,交易接收者从TCert中取出TCertPub_Key,验证数字签名的真实性。TCert不显示或携带交易发起者信息,保证了交易的匿名性。 3.3 交易可监管性 一旦发现异常交易,有权限的监管、审计人员可通过秘钥Pre_K与交易证书中的TCertID计算出K,由K恢复出enrollmentID,确定交易者身份,如图5所示。身份解密秘钥Pre_K与签名私钥TCertPriv_Key相互独立,签名私钥仅对用户可见,Pre_K则向监管机构备案,既保证签名的不可抵赖,又保证异常交易的可监管性。 3.4 算法存在的不足 Hyperledger Fabric协议规范给出的交易证书公私钥生成与身份追溯算法主要存在以下不足:①ExpansionValue生成算法较为复杂,多次利用HMAC算法,计算时间与秘钥存储开销较大,安全性能仍然取决于HMAC算法强度,性能并未显著提高;②Pre_K为独立秘钥,增加了方案复杂性;③Hidden Enrollment ID和Hidden Private Keys Extraction采用对称加密算法,其安全性依赖于对称加解密秘钥K和TCertOwner_EncryptKey的强度。 4 方案改进 (1)减少HMAC运算次数,提升公私钥对生成效率。 (2)以随机数nonce 取代TcertIndex,nonce的唯一性和随机性更能确保每张交易证书之间的无关联性。 (3)取消独立于交易证书的身份追溯秘钥Pre_K,由TCA_KDF_Key经过HMAC计算后生成的秘钥B_Key代替Pre_K。 4.1 简化公私钥对生成过程 TCA为批量生成Tcerts,生成根秘钥TCA_KDF_Key和一批随机数nonce,并由TCA_KDF_Key和随机数nonce生成ExpansionValue,由EnrollPub_Key和ExpansionValue生成TCertPub_Key,即TCertPub_Key=EnrollPub_Key+[HMAC(TCA_KDF_Key, nonce)]G,如图6所示。 TCA加密nonce,记为EncNonce,加密秘钥NonceKey=[HMAC(TCA_KDF_Key,“1”)],EncNonce=AESNonceKey(nonce||常数),EncNonce 取代Hidden Private Keys Extraction作为TCert的一部分。TCA将TCert和TCA_KDF_Key通过安全信道发送至客户端。 客户端在接收到TCert和TCA_KDF_Key后,解密TCert中的EncNonce,生成签名私钥,图7为签名私钥生成流程。 为了实现身份追溯,TCA还需把用户注册信息隐藏在交易证书中,方法为:利用根秘钥TCA_KDF_Key生成备案秘钥B_Key,B_Key = HMAC(TCA_KDF_Key,常数),由B_Key和TCertID生成注册证书编号enrollmentID的对称加密秘钥,记为En_enrollmentID_Key,En_enrollmentID_Key=HMAC(B_Key, TCertID),Hidden Enrollment ID=AES_Encrypt En_enrollmentID_Key(enrollmentID),如图8所示。秘钥B_Key在监管机构处备案。 4.2 改进方案性能分析 4.2.1 交易之间无关联性 每张TCert的签名公私钥对包含随机数nonce,并经过HMAC运算,nonce的唯一性和随机性保证了每张交易证书的唯一性及其之间的无关联性。 4.2.2 交易匿名性 交易证书的各字段中并不显示或携带交易者信息,签名公私钥对经过HMAC加密处理,无权限用户无法通过交易证书内容与签名公私钥对获取发起交易用户身份信息,交易对无关用户而言是匿名的。 4.2.3 可监管性 enrollmentID经过En_enrollmentID_Key的对称加密处理,存放在交易证书中,秘钥B_Key在监管处备案,监管者可利用备案秘钥和交易证书中的TCertID算出enrollmentID的加密秘钥,并用解密交易证书中的Hidden Enrollment ID字段获取交易发起者身份信息,实现监管。 4.2.4 协议规范方案与改进方案性能及安全性对比 协议规范方案与改进方案性能及安全性对比如表2所示。 5 结语 本文重点研究了Fabric项目身份管理模块中的交易证书设计,通过剖析签名密钥对生成算法和交易证书隐式携带注册用户信息及身份追溯的实现原理,厘清了Fabric项目通过两级证书系统实现交易匿名与监管并存的方法。在此基础上,分析其不足并提出改进方案,改进方案减少了秘钥数量,提升了密钥对生成效率,交易证书之间的无关联性也更好,但在安全性方面仍然取决于AES对称加密算法的可靠性,需作進一步完善。交易匿名是区块链的特点之一,可监管则是区块链商用化的必要保证,两级证书系统是区块链身份管理技术发展的有效途径,具有重要参考价值。 参考文献: [1] ShoCard. ShoCard blockchain identity management white paper[EB/OL]. https://shocard.com/blockchain-identity-whitepapers. [2] DAVID J C, JOSHUA S. ABC platform and consensys' uport poised to open investment diamonds to the institutional public[EB/OL]. https://content.consensys.net/wp-content/uploads/ABC-Platform-uPort-Strategic-Partnership.pdf. [3] PKIoverheid. What is PKIoverheid[EB/OL]. https://www.logius.nl/diensten/pkioverheid/. [4] Idensys. What is Idensys[EB/OL]. https://idensys.nl/idensys-voor- organisaties/over-idensys. [5] MASON M. Estonia's new e-residents are surpassing the country's birth rate[EB/OL]. https://thenextweb.com/eu/2017/07/25/estonias-new-e-residents-surpassing-countrys-birth-rate/. [6] 朱岩,甘国华,邓迪,等. 区块链关键技术中的安全性研究[J]. 信息安全研究,2016(12):1090-1097. [7] 董贵山,陈宇翔,张兆雷,等. 基于区块链的身份管理认证研究[J]. 计算机科学,2018,45(11):52-59. [8] 顾燕. 基于区块链的身份认证系统的设计与实现[D]. 北京:北京邮电大学,2018:26-44. [9] 邓毅,陈秀清,王志豪,等. 基于区块链的隐私安全保护可行性分析[J]. 软件导刊,2019,18(1):166-168. [10] Hyperledger Fabric. Hyperledger[EB/OL]. https://www.hyperledger.org/projects/fabric. [11] 翟社平,杨媛媛,张海燕,等. 区块链中的隐私保护技术[J]. 西安邮电大学学报,2018,23(5):93-100. [12] 王俊生,李丽丽,颜拥,等. 区块链技术应用的安全与监管问题[J]. 计算机科学,2018,45(S1),352-355,382. [13] 阎军智,彭晋,左敏,等. 基于区块链的PKI数字证书系统[J]. 电信工程技术与标准化,2017,30(11):16-20. [14] 赵东路. HyperLedger中的隐私与安全[EB/OL]. http://ibm.biz/opentech-ma. [15] 陈永丰. 基于区块链的数据访问控制方法及应用研究[D]. 成都:电子科技大学,2018:32-60. [16] 张健毅,王志强,徐治理,等. 基于区块链的可监管数字货币模型[J]. 计算机研究与发展,2018,55(10):2219-2232. [17] 李佩丽,徐海霞,马添军,等. 区块链技术在网络互助中的应用及用户隐私保护[J]. 信息网络安全,2018(9):60-65. [18] GitHub. Protocol specification[EB/OL]. https://openblockchain.readthedocs.io/en/latest/protocol-spec/. [19] GitHub. Fabric CA users guide[EB/OL]. https://hyperledger-Fabric-ca.readthedocs.io/en/latest/users-guide.html#. [20] 陈树宝,郑少华,佟艳娟. Hyperledger Fabric核心技术[M]. 北京:电子工业出版社,2019:67-72. (责任编辑:黄 健)