吴 琦 舒展翔 郑 昌 余 祥
1.国防科技大学电子对抗学院 安徽合肥 230037 2.解放军61428 部队 北京 100072
区块链技术作为一种具备去中心化、开放性、匿名性、不可抵赖性等特点的新型集成应用技术[1-6],在金融、通信、医疗、政府管理等领域应用广泛,已成为各界研究的热点.2019年10月24日,习近平主席在中央政治局第十八次集体学习时强调,把区块链作为核心技术自主创新重要突破口.2019年7月9日,美国参议院商业、科学和运输委员会批准了《区块链促进法》.该法案明确要求美国商务部为“区块链”建立标准定义,以及建立新的法律框架,为未来新兴技术的应用提供指导及防范风险.除此之外,德国联邦政府在区块链战略中指出,区块链技术是未来互联网的基石,德国将进一步巩固在该领域的领先地位.为此,联邦政府还制定了区块链战略实施指导原则和路线图.但随着区块链技术普及,其所面临的安全挑战也日渐展露.诸如比特币交易所被黑客攻击、51%攻击、协议漏洞等,给区块链用户带来巨大损失的同时,也极大地限制了区块链技术的发展.
认证技术[7]是在复杂网络环境条件下,对用户身份进行确认的一种技术,是确保用户诚实可信,从而建立可信任的网络通信系统的关键技术手段,在信息安全领域具有重要的地位.常见的认证方式有:基于口令的认证、基于密码学的认证、基于生物特征的认证.其中,基于密码学的认证技术采用密码算法,由于其安全性高,被大量运用于网络安全领域.基于密码学的认证包括基于对称密码的认证和基于非对称密码的认证.随着技术的不断完善,在基于密码学的认证技术基础上逐渐衍生出众多应用广泛的认证机制.
多数区块链系统是用公钥地址来代替用户的真实身份,用户可以根据需要来公开部分信息,从而实现对用户隐私信息的保护.但在某些情况下,由于系统过强的匿名性使得区块链用户难以监管,以致于发生恶意节点接入、用户越权操作等安全威胁事件,产生重大损失.因此,区块链系统的认证机制一直是区块链的重点研究方向之一.文献[8]提出了基于区块链的生物特征与口令双因子跨域认证方案,采用模糊提取技术提取用户生物特征产生随机密钥参与认证.文献[9]基于区块链和DNS 安全扩展(domain name system security extensions,DNSSEC)技术,提出了一种新的身份认证模型,相比于文献[8]降低了证书认证机制对认证中心(certificate authority,CA)的依赖性.文献[10]采用匿名认证、群签名和零知识证明技术对PKI(public key infrastructure)机制进行了改进,在传统认证过程中引入了监管机制,同时对用户的匿名证书信息进行选择性的隐匿,解决了CA 证书信息过于暴露以及用户难以监管的问题,但监管机制会耗费CA 中心较多资源,降低工作效率.文献[11]提出一种基于区块链的信息系统数据保护技术,利用区块链的多链结构对节点进行权限划分,只有拥有相应权限的节点才能对数据进行访问与操作,进而通过数据保护,实现信息系统数据的高安全性.文献[12]利用区块链的多链技术对用户权限进行管理,不同权限的用户在对信息系统数据进行处理时,在操作层面上实现隔离,从而提高系统的安全性.文献[13]提出通过基于区块链的认证技术,对军事数据进行签名和验证,进而保证军事信息的安全可靠.文献[14]指出将区块链技术应用于军事指挥、军事信息系统、无人机集群等领域,发挥区块链技术的军事效能.
目前在区块链系统中使用较多的认证机制有PKI 机制、IBC(identity based cryptograph)机制等.PKI机制与IBC 机制都是基于公钥密码算法的认证机制.PKI 机制是利用CA 中心生成的安全证书来实现其认证功能;IBC 机制是依据一个可信的密钥产生中心(key generate center,KGC)来生成密钥,通过安全通信将密钥分发给用户,通过对用户签名的消息进行验证来认证用户的身份.但是上述两种认证机制均需要依赖一个可信的第三方(CA 或KGC),而第三方容易受到黑客攻击导致信息泄漏等安全问题,且经由第三方提供的凭证进行身份确认,无法防范用户入网后的恶意破坏,并且这种中心化的服务与区块链技术去中心化的思想相违背,在一定程度上制约了区块链的发展.
针对传统认证体制存在的可信第三方(CA 或KGC)易受攻击、核心技术非国产自主可控等安全问题,本文考虑将国产自主可控CFL 认证机制应用到区块链系统中.CFL 认证机制[15-17]是国内知名专家陈华平、范修斌、吕述望3 人研发的一种基于标识的证书认证机制(CFL 为3 个发明人的姓名拼音缩写),在2011年首次提出,并于2016年通过了国家密码管理局的审查.CFL 认证机制相较于传统PKI 和IBC 认证机制,具有去中心化、去存储化、动态认证、核心技术自主可控等优势,能够在区块链系统中更好地发挥安全认证功能.
区块链系统的认证机制主要包括: 节点认证、用户身份认证和用户权限的管理机制.本文主要从区块链系统的节点认证方向出发,介绍区块链系统节点间互认机制与CFL 认证机制过程,研究基于CFL 机制的区块链系统节点间互认机制,通过实验研究CFL认证机制在区块链系统的可行性,从而为区块链系统的应用与发展提供一定的理论支撑.
区块链系统是在P2P 对等网络的基础上建立起来的,区块链系统的节点是指区块链网络中参与通信的计算机或终端等设备.区块链系统的节点互认机制是指通过数字签名等技术对构成网络节点的身份安全性进行认证.通过认证,可以防止恶意节点入网,有利于构建节点间安全可信任的网络环境.
区块链系统按照系统是否具有节点准入机制,可分类为许可区块链和非许可区块链.许可链根据拥有控制权限的主体是否集中可分为联盟链和私有链,其节点的加入与退出需要区块链系统的许可;而非许可链则是完全开放的,也称为公有链,节点可以自由地加入和退出.
许可区块链系统中引入可信任的第三方作为证书发布中心CA,使用可信第三方颁发的证书来实现对等节点间的认证.
文献[18]提出一种基于数字证书以及CA 认证体系的联盟链权限控制方法.该方法针对传统区块链系统权限粒度大且准入机制不完善的缺陷,采用准入证书、角色证书以及交易证书3 种证书,来分别实现节点准入、角色认证和交易验证3 种权限的管理.节点使用CA 颁发的准入证书来进行入网认证,实现了对恶意节点的识别,提高了区块链系统的安全性.
文献[19]在私有链中采用基于量子密码水印的认证机制来认证诚实节点的接入.该机制使用量子通信技术产生具有真随机性的安全密码,同时结合具有唯一性和稳定性的指纹识别技术,极大地降低了非诚实节点入网的可能性;并且由于对部分或全部接入节点的诚实性的认证,可以使得区块链系统内部部分或全部节点可信.
文献[20]针对传统远程证明模型在分布式网络中存在的中心化、单点化等问题,提出了基于区块链的远程证明模型(remote attestation based on blockchain,RABBC).该模型通过对Dolev-Yao 威胁模型[21]的安全性分析,在入网节点中引入可信平台模块(trusted piatfom moudule,TPM),根据节点提供的自身的TPM标识,生成匿名身份证书,进而实现对节点的身份认证.
非许可区块链建立在P2P 对等网络的基础上,节点可以自由加入或退出而不受系统的控制.因此,在非许可链中,无法通过引入可信第三方来对节点接入与否进行认证.但在P2P 网络中,为防止恶意节点对网络安全进行破坏,仍需采用其他方法对节点的安全性进行认证.
文献[22]指出在非许可区块链系统中,节点认证方式可包括行为模式检测与信任关系建立两种.其中行为检测方法通过对节点行为的监测,发现节点是否存在恶意行为,并建立恶意节点名单,进而避免恶意节点接入.信任关系建立方法在对节点的信任度进行评估分析后,依据节点间信任程度进行信任关系的建立,从而决定节点的入网与否.上述两种方式提高了节点入网的难度,使恶意节点接入的可能性得以降低.
文献[23]根据假设在解离散对数和大数分解困难条件下,针对Kim 等人方案中存在Sybil 攻击和合谋攻击风险[24],提出了一种适合P2P 网络的准入控制方案.节点在申请入网时,先将申请信息在网络中广播,已在网络中的可信节点先对该节点申请信息的有效性进行验证,通过后再判断该节点是否符合P2P 网络的安全要求.申请节点在获得一定阈值的可信节点“信任”后,方可成为该网络的可信节点.
文献[25]提出了一种基于行为模式聚类的方法对区块链节点进行识别.在将常用的长度计算方法进行比较之后,针对性地提出关于区块链聚类的BPC(behavior pattem clustering,BPC)算法,并依据区块链节点的行为使用DTW 长度进行聚类.通过实验验证,该方案能够在区块链网络中识别并过滤恶意节点,提高区块链网络的安全性.
综上所述,目前在区块链系统节点间认证的方法主要是:1)通过引入可信第三方来为节点生成相应的身份证书参与认证过程,从而对节点进行验证;2)基于行为模式检测、信任关系建立等方法对节点的可信度进行识别与评估,进而判断节点的安全性.但是上述认证方法仍存在以下问题:1)在行为检测与信任关系建立过程中,需要大量节点信息作为判断依据,对计算资源的占用较大;2)在证书认证机制中,证书由可信第三方颁发给各节点进行认证,但不排除节点入网后存在恶意操作的情况发生,因此,证书认证机制的安全性仍需进一步加强.
基于CFL 的区块链系统节点互认机制是指使用CFL 认证机制替代传统的PKI 机制或IBC 机制,对节点的身份进行安全认证.CFL 认证机制是在传统证书认证机制和标识认证机制的基础上,弥补这两种认证机制的不足,并结合它们的优势发展出来的一种自主可控的认证机制.该机制基于SM2、SM3 密码算法生成CFL 证书来参与认证过程.SM2 算法用于产生公私钥对,进而对信息进行签名与验证.SM3 算法实现哈希算法的功能,对信息进行数字签名,从而可以压缩信息的长度.SM2、SM3 密码算法的引入使得CFL 认证机制具备了较强的自主可控性.
CFL 认证由用户端、验证端以及CFL 发证机关3部分实体参与认证过程,如图1所示.用户端随机生成一组工作公私钥对,将自身标识信息发送给CFL发证机关申请用户CFL 证书;发证机关拥有一组种子公私钥序列,基于用户端标识信息从序列中控选产生相应的标识公私钥组合,使用该私钥对用户信息进行签名得到用户端CFL 静态证书,并将该证书颁发给用户端;验证端则通过对发起端用户的证书进行验证从而对发起端用户进行认证.
在区块链系统节点中,按照是否已经完成网络准入可以分为:
1)成员节点:已经加入区块链通信网络的节点.成员节点可以与区块链网络中其他节点进行通信、事务处理、区块交易等,并能够对尚未进入网络的节点进行认证.
2)游离节点:没有加入区块链网络的节点.游离节点尚未通过节点准入机制的认证,不参与节点间通信和区块交易等.
除此之外,无论是成员节点还是游离节点都可以与区块链系统发证机关进行通信,可以从发证机关处获得身份证书用于节点入网时与其他节点进行相互认证.游离节点的CFL 认证过程可分为3 个阶段:CFL 证书申请签发、CFL 证书动态认证以及认证成功后CFL 证书的注销,其流程图如图2所示.在以下过程中,游离节点作为用户端,成员节点作为验证端.
游离节点在此阶段需向区块链系统CFL 发证机关申请CFL 静态证书,其流程图如图3所示.
CFL 证书申请签发算法:
Step 1:用户端使用SM2 密码算法随机生成一组工作公私钥对,作为本节点私有资源存储在本地.
Step 2:用户端创建证书申请信息,其中,包含节点自身标识、工作公钥和工作私钥,使用工作私钥对其签名信息进行解密,通过安全套接层(secure sockets layer,SSL)协议将该申请信息发送给CFL 发证机关.
Step 3:CFL 发证机关在接收到来自用户端的申请信息后,先通过其工作公钥验证签名的有效性,若验证不通过则此次申请失败.
Step 4:Step 3 中验证通过后,基于用户标识信息在发证机关的多组种子公私钥组合中控选生成该用户端的标识公私钥组合.
Step 5:将接收到的用户标识、用户工作公钥、工作私钥签名信息以及标识公钥、标识私钥签名信息、证书有效时间签入证书中,生成用户端CFL 静态证书,并通过安全信道颁发给用户端.
Step 6:用户端接收CFL 静态证书并存储在本地,完成CFL 证书申请签发过程.
游离节点在加入区块链网络前,需要与已经加入网络的成员节点进行相互认证.本阶段游离节点与成员节点都拥有CFL 发证机关颁发的各自的CFL 静态证书,且通过安全信道进行通信.动态认证阶段流程图如图4所示.
CFL 证书动态认证算法:
Step 1:用户端先产生一个随机数,使用工作私钥对证书签名,将随机数、工作私钥签名值、时间戳加入证书生成CFL 动态证书.
Step 2:用户将CFL 动态证书发送给验证端进行认证.
Step 3:验证端接收用户端CFL 动态证书,对用户端的身份进行认证,详细步骤如下.
Step 3.1:根据证书中的用户工作公钥对用户标识及其签名信息有效性进行验证,若验证通过,则进行下一步;否则验证失败.
Step 3.2:根据证书中的用户标识公钥对CFL 发证机关用标识私钥签名的信息进行验证,若验证失败则结束认证,验证成功则进行下一步.
Step 3.3:再使用工作公钥对证书的动态签名值进行验证,若通过则用户端认证成功,否则认证失败.
Step 4:按照Step 1 步骤同样操作,验证端生成自身的CFL 动态证书.
Step 5:验证端将自己的CFL 动态证书发送给用户端进行互认证.
Step 6:用户端按Step 3.1、Step 3.2、Step 3.3 步骤对验证端CFL 动态证书各项信息进行验证,认证验证端的有效性.
Step 7:若用户端对验证端认证有效后,将自身CFL 动态证书恢复为静态证书,动态认证过程结束.
3)CFL 证书注销
在节点CFL 动态认证结束后,为保证认证过程的动态性,本次认证所用的CFL 动态证书将被注销.如若需要与其他节点在进行认证,则需重新进行证书申请.CFL 动态证书注销阶段流程图如图5所示.
CFL 证书注销算法:
Step 1:用户端将CFL 动态证书,用工作私钥对撤销申请的签名信息进行加密再发送给CFL 发证机关.
Step 2:CFL 发证机关在接收到用户端信息后,依据阶段2)中Step 3.1、Step 3.2、Step 3.3 步骤对用户端信息有效性进行验证,如验证不通过,则此次通信结束.
Step 3:在用户端信息验证成功后,对证书撤销信息用用户端对应的标识私钥签名,并签入证书中.
Step 4:CFL 发证机关将用户端CFL 撤销证书发送给用户端.
Step 5:用户端接收到CFL 撤销证书,自此用户端的CFL 证书已经注销,其CFL 证书将不具有认证功能.
在经过上述3 个阶段后,若游离节点成功通过认证,则其将作为可信节点加入区块链网络中,并能够与其他成员节点进行通信、区块交易等操作.
基于上述CFL 证书申请签发、动态认证以及注销算法,在经典的fabric 区块链系统中,设计证书签发过程、证书验证过程以及证书撤销过程共15 个接口函数,在基于CFL 的fabric 系统节点互认的实现中作为接口模块,接口函数如表1所示.
表1 fabric 区块链系统节点认证接口函数Table 1 Authentication interface functions of fabric blockchain system nodes
在Hyperledger Fabric 环境下,对基于CFL认证的节点认证机制进行实验,以此验证CFL 认证机制在区块链系统节点互认时的可行性.Fabric 区块链系统引入可信第三方fabric-CA[27],区块链节点通过fabric-CA 颁发的身份证书进行节点间互相认证.实验使用CFL 发证机关代替fabric-CA,实现其证书签发、注销等功能.实验使用Go 语言来编码实现CFL 动态认证的过程.在fabric 区块链系统中,节点认证可由普通对等节点peer 节点与用户端节点client 节点进行信息交互.
Fabric 区块链网络环境拓扑如图6所示,由一台计算机作为client 节点,另一台计算机作为已加入fabric 网络的peer 节点.还有一台计算机模拟CFL 发证机关,用于实现证书签发、撤销等功能.并且已建立主要由区块链系统Hyperledger Fabric(v1.0)、Docker虚拟容器、Golang(v1.8)编译器等构成的满足基于CFL认证机制的区块链认证系统开发的集成开发环境.
实验基于表1接口函数,在fabric 区块链环境下,client 节点向CFL 发证机关申请CFL 证书,如图7所示.根据第3 部分中所述CFL 动态认证过程,在client 节点与peer 节点间进行相互验证,最后在验证过程后将各自证书恢复成静态证书.为验证证书撤销的结果,在证书验证后对证书进行撤销,然后检验证书是否已经失去效用.验证过程如图8~图9所示.
在上述过程中,节点通过对CFL 静态证书的申请、动态证书的发送及验证过程最终被验证端成功认证,动态地证明了节点自身身份的合法性.根据最终实验结果分析,CFL 认证机制在fabric 区块链系统中可以替代传统证书认证机制,并在区块链节点互认过程中发挥作用.在此过程中,CFL 发证机关不直接参与证书验证过程,满足了去中心化的需求;CFL 动态证书由用户端自生成,且动态恢复,体现了其去存储化、动态认证的特性;验证过程需要经过3 次有效性检验,提高了对节点的安全性检验门限,可以有效地降低恶意节点入网的可能性.因此,CFL 认证机制区块链系统中能够较好地实现安全认证的功能.
验证是对CFL 认证机制的安全性和认证效率的验证;分析是对CFL 认证机制与传统的PKI 认证机制的分析比较.从安全根角度对两种认证机制的安全性进行验证,使用Hyperledger-Caliper 工具对两种机制的认证效率进行分析,总结得出两种认证机制的差异.
PKI 认证机制的用户与证书生成中心都只有一个安全根,其安全性取决于生成安全根的签名验证算法对应的数学难题的破解难度.攻击方只要解开PKI机制的签名验证算法的数学难题,就可以彻底破解PKI 证书生成机制.然而目前大多数PKI 机制的签名验证算法对应的数学难题为离散对数难题或大数分解难题,在当前的超算水平下,已经存在较大的安全风险,不能为用户提供安全的可信认证.
CFL 认证机制存在L 个安全根,攻击者只有对L个安全根对应的数学难题完全破解,才能攻克CFL认证机制.因此,CFL 机制的破解难度是PKI 机制的L 倍.当L 的取值足够大时,能够使CFL 认证机制在现实中不可破.而目前CFL 机制的安全根为8 192个,其取值已经可以满足CFL 机制现实不可破的需求.
综上所述,CFL 认证机制相较于PKI 认证机制,在安全根的破解难度上有了极大的提高.因此,相比PKI 机制,可以认为CFL 认证机制能够为用户提供更安全的认证.
在Hyperledger Fabric 的区块链系统环境中使用Hyperledger-Caliper[26]工具,针对不同的区块链事务产生速率,对PKI 认证和CFL 认证两种方案的工作效率进行实验测试.在测试中,设定区块链事务产生速率分别为50 TPS,100 TPS,150 TPS,200 TPS,250 TPS,300 TPS;设置种子密钥对长度为CFL 可信根个数8 192;设置区块链事务数据包的总长度为5 000,单位区块的大小为512 KB.以10 轮测试为一组,计算平均值.测试结果如图10和图11所示.
由图10和图11可以得出,两种方案在相同的事务产生速率情况下,CFL 方案的系统吞吐量低于PKI方案,CFL 方案的系统延迟高于PKI 方案.
经分析,CFL 方案相比于PKI 方案,系统吞吐量低和系统延迟高的原因是CFL 认证过程进行了多次验证,且CFL 认证是动态认证.因此,可以认为CFL认证机制的工作效率与PKI 机制相比,有一定程度的降低.
综合4.1,4.2 验证可得,虽然CFL 认证机制相比PKI 机制在工作效率方面有所下降,但CFL 认证能向用户提供更加安全的认证.而且,CFL 机制在工作效率上的延迟平均不超过0.5 s,在可接受的范围内.所以,可以认为在当前网络环境下,CFL 认证机制要比PKI 认证机制更符合实现用户认证安全的要求.
通过对自主可控、具有自主知识产权的CFL 认证机制的研究,建立了基于CFL 认证机制的区块链系统节点的互认机制,实现了fabric 区块链系统的CFL 节点的互认,验证了CFL 认证机制的安全性和效率.下一步将对区块链系统中CFL 认证机制的认证效率的优化问题、基于CFL 认证的密钥协商与数据加密协议等问题进行研究,进一步提高区块链节点安全可靠交互认证的能力.