基于联盟链的PKI跨域认证模型
2021-11-20黄逸翔王亚威陈文轩张子蛟
黄逸翔,王亚威,陈文轩,张子蛟
(1.郑州大学 软件学院,河南 郑州 450000;2. 郑州大学 网络管理中心,河南 郑州 450000)
0 引 言
由于计算机只能通过识别用户的数字身份来进行身份验证,所有对用户的授权操作都依赖于针对用户数字身份的授权[1]。身份认证技术就起到了决定性作用。公钥基础设施(public key infrastructure,PKI)作为互联网安全基础设施,从多个方面为身份验证提供安全服务。文献[2]阐明了PKI提供安全保障服务的完整过程。对数字证书的集中管理,进行在证书颁发机构(certificate authority,CA)上。CA是证书的签发机构,它是PKI的核心,是信任的起点。认证中心CA进行证书签发、证书更新、证书撤销等操作,并负责定期将过期证书发布到证书废除列表CRL中[3]。它为每个使用公开密钥的用户发放一个数字证书,该证书是不能伪造和篡改的。信任某CA所颁发的数字证书的前提是信任该CA。
但是,由于传统PKI体系结构是树形结构的,在特定应用中PKI技术存在一些缺陷。处于核心地位的CA显得十分薄弱,一旦遭受攻击,CA根证书以及该CA已经签发的证书都不能再作为信任锚点,各种单点故障问题暴露无遗。同时用户配置证书和安装证书到目标设备过程极其复杂,在需要批量配置时效率极低,要求极高的成本和管理开销。当用户涉及到多个CA的时候,不同CA之间的无法验证的问题又使得用户操作变得十分繁琐,存在多CA互信难的问题。
文献[4,5]阐述了区块链技术优势和应用前景。研究表明区块链有利于在人工智能和人类增强领域得到应用。随着区块链技术在身份认证领域的应用研究,区块链技术将会解决传统PKI体系中遇到的问题。
本文设计了一种基于区块链的PKI系统,并对系统进行了架构和网络拓扑的设计,同时使用一套链上证书管理方案,将证书及证书操作记录存储到区块链上。通过标准验证和区块链验证相结合的方式来实现证书验证。在查询证书时,可以向区块链中的任意一个节点查询,从而避免单点故障问题。采用联盟链作为模型结构,通过对X.509数字证书进行改进,使用实体双向认证来实现跨域认证,同时从证书链入手,简化证书路径,降低跨域认证的复杂度,减少签名次数,提高跨域认证效率,解决上述问题。并在最后进行模拟实验对模型进行分析。
1 现状分析
文献[6,7]分析了比特币的信任机制和数字货币功能,使用区块链技术保证交易和操作的正确性成为了可能。区块链协议固有的特性限制了交易的吞吐量和延迟,文献[8]提出了基于Bitcoin的可扩展协议,使用比特币的共享信任模型,提高了交易实时性,并且具有容错性和鲁棒性。当合同发生违约或中止时,去中心化区块链能够确保实施相应的赔偿政策,然而现有的交易系统缺乏对用户的隐私保护,所有的交易信息可通过区块链进行查询,文献[9]提出了一种去中心化智能合约系统,间接存储区块链交易数据,达到了保护用户隐私的目的。因此区块链技术具有不可比拟的独特优势,把区块链技术运用到公钥基础设施中正好可以解决上述问题。所以本文设计基于区块链技术的PKI系统,利用区块链的特性解决PKI的单点故障问题,同时把不同域的根CA加入到联盟链中,使得各个CA中心之间无障碍互信,解决了多CA互信难的问题,并提高证书部署的实际效率。
伴随着区块链技术在各行各业的应用研究,在身份认证领域,区块链的引入对PKI体系的发展也起到了积极作用。2014年,美国学者Conner提出了第一个将区块链技术与PKI相结合的例子Certcoin,使用区块链的分布式账本来记录域名和公钥,通过区块链的交易来实现证书管理,使用Merkle树记录的Hash值来实现身份的验证。但由于区块链中的信息都是公开透明的,所以在Certcoin中,用户的隐私不受到保护。随后,文 献[10,11]提出了新的PB-PKI(privacy-awareness in blockchain-based PKI)模型,该模型使用不同密钥的方式对用户隐私进行了保护,同时设置多种用户隐私等级,减少了用户隐私被泄露的风险。文献[12,13]提出了一种及时响应的PKI框架IKP(instant karma PKI),通过利用智能合约和基于区块链的共识机制,对IKP的权力进行分散,利用自动激励措施,针对检测器进行奖励和对违法CA的惩罚来保证体系安全。跨域认证是通过不同域之间建立信任关系,来实现一个域请求另一个域中的资源。
Kerberos系统是最早出现的跨域认证案例,使用非对称密码技术建立,但该技术仅适用于特定的Kerbers域中。文献[14]提出了一种基于公钥的分布式身份认证模型,该模型具有良好的可扩展性,为后续的拓展研究提供了基础。文献[15]以基于身份的密码体制为基础,提出了一种基于身份的多信任域认证模型,但因其用户需要多次完成双线性对运算,导致计算开销过大。在跨域认证方面,文献[16]提出了一种基于PKI域和IBC域之间的异构跨域认证密钥协商方案,该方案可以保证较高的安全性和效率,但该方案只针对EIM环境下的异构企业之间。文献[17]提出一种基于区块链的跨异构域认证方案,采用将IBC域中的区块链域代理服务器和PKI域区块链证书服务器加入到联盟链中方法,实现了IBC域和PKI域之间的跨异构域认证,并且降低用户终端的计算量,但因为区块链系统中数据只增不删,引起存储数据而带来的系统的开销浪费。
2 基于区块链的PKI系统
根据区块链的开放对象的不同,参与者和权限的差异,区块链的应用模式被分为以下3种类型:公有区块链(public blockchain)、行业区块链(consortium blockchain)、私有区块链(private blockchain)。这里考虑到一方面要符合用户、CA中心等多域间跨域认证需要,另一方面由于区块链公式算法不同,联盟链效率较高,系统可扩展性强的特点,选用其为原型。
2.1 架构设计
出于对未来实用化时方便拓展和改进的准备,本文使用模块化思想进行PKI系统的概念设计,基于区块链的PKI系统的架构设计如图1所示。
图1 基于区块链的PKI系统架构
架构中基本要素包括:
证书用户:指PKI系统中证书的实际拥有者。
PKI系统:用于完成传统PKI体系中RA中心功能的注册中心RA,负责审核用户的数字证书申请,并将用户申请转交给证书颁发机构CA;负责证书发放和证书生命周期管理的证书颁发机构CA;包括共识机制策略管理、节点管理和智能合约管理的区块链管理部分,负责将PKI系统产生的数字证书和证书操作过程写入到区块链中。
区块链平台:结合以太坊(ethereum,ETH)设计灵活、适应性强、对智能合约支持能力强大等特点。它支持任何人在上面创建和使用通过区块链技术运行的去中心化应用(decentralized application,DApp)。
针对基于区块链的PKI系统网络拓扑结构设计,区块链网络中主要部署了背书节点、记账节点、主节点和排序服务节点。设计背书交易、成块交易、提交与确认等交易流程来实现PKI证书在区块链上进行存储。将所有有关证书的操作,都视为区块链平台中的一笔交易进行处理,来实现基于区块链的PKI系统的证书管理。
2.2 基于区块链的PKI证书验证过程
在证书使用者和证书依赖方之间建立信任关系,采用将数字证书和证书操作记录存储到区块链中的方式,使得用户在查询证书时,可以向区块链中的任意一个节点查询,从而避免单点故障问题。实际验证过程在保证标准的CA证书验证过程的基础上,当中间证书服务器或根证书服务器发生故障的情况下,才使用区块链上的验证过程。其核心操作是,对证书进行哈希运算,得到一个哈希值并以此为关键参数,将对证书的验证转换为对交易的验证,用户到区块链平台上查询证书的合法性。验证过程如图2所示。
图2 基于区块链改进后的CA证书验证过程
3 基于联盟链的PKI跨域认证模型
通过分析信任列表信任模型、交叉认证信任模型、根CA信任模型和桥CA信任模型等多个模型的安全属性,确定出基于联盟链的跨域认证模型,如图3所示。由根CA、CA、用户、联盟链平台等组成,把每个域内的根CA加入到联盟链网络中,共同构建多中心的联盟链平台。
图3 本文联盟链跨域认证模型
认证思路如下:PKI使用的信任模型是基于CA域来描述的,独立的CA认证中心及其所管理的范围构成一个CA信任域,并以其为单位进行跨域通信。将A域用户和B域用户的链证书的哈希值存储到区块链中,当A域用户请求访问B域的资源时,A域的用户将自己的签名、区块链证书和随机数发送给B域的认证服务器,B域认证服务器对收到的信息进行验证,验证A域用户的根CA区块链证书的哈希值,如果验证通过,则A域用户被允许跨域访问B域服务器资源。
3.1 区块链证书设计
CA对传输数据的加密、解密、数字签名和身份验证等操作都是依赖数字证书,PKI体系就是依据数字证书实现的。本文通过以X.509证书为基础进行改进,来设计一种区块链证书,并将其存储于联盟链中,作为跨域认证模型的信任凭证。区块链证书结构如图4所示。
图4 本文设计的区块链证书
设计方案如下:
(1)去除颁布者标识和主体标识
传统X.509数字证书中,证书颁布者和证书拥有者的唯一标识属于可选项,一句具体应用需要来确定是否使用。在区块链上信任域中的实体对象有效,颁布节点和持有节点可以验证证书的唯一性,所以直接去掉这两项以简化证书数据。
(2)去除CA签名项
由于区块链天然的具有不可篡改性,证书相关数据一旦上传至区块链就得到了保护,同时在通过交易的方式产生证书时,证书的颁布者已经被进行了记录,所以颁布者再用自己的私钥对证书进行签名和验证显得重复。
(3)更改有效期标识为有效时长
区块链数据结构中包含有时间戳项,每产生一个新的区块都会被打上时间标志,通过记录有效时长与时间戳项相结合可以直观得到S证书有效期。
(4)去除证书撤销检查服务的UPL项
区块链上的数据是随时可查的,查询存储在其中的证书状态也变得十分简单。
3.2 区块链证书接口设计
对证书写入区块链的接口定义
write(station,Hash(Cert))
(1)
其中,write、station、Hash(Cert)分别表示写入、证书的状态、对证书进行哈希计算;证书的状态包括发布和撤销。
针对存储在区块链上的区块链证书,通过索引技术和大数据技术设计了一种查询证书状态的方案,实现对区块链证书状态的查询。
对证书查询的查询接口定义
query(Hash(Cert))
(2)
其中,query表示证书查询操作,证书状态station有3种:publish、revocation、null(为该证书不存在或被篡改)。需要验证某一证书时,节点首先将所查证书进行哈希运算,再将哈希结果值在区块链上进行查询,通过区块链返回该证书的最新Station结果和该存储区块的时间戳来进行合法性验证。
3.3 跨域认证协议
验证CA证书的合法性,主要通过:①该证书是否在有效期内;②发行方CA是否可靠;③验证公钥是否正确,通过能否解开证书发行者签名确定;④证书名称是否对应拥有者真实名称;⑤证书是否在证书吊销列表(CRL)中。其中第①、②、④项包含在证书内部,不需要进行线上验证;③、⑤两项需要线上访问发行证书的CA来进行确认。一旦证书服务器故障,则无法进行③和⑤的过程,证书验证失败。
3.3.1 执行的前提
加入区块链中的节点必须是可信任的,之后对需要跨域认证的两个实体的根CA区块链证书取哈希值并存储到区块链中,作为跨域认证的信任凭证。
协议的主体包括A域用户(UA)和B域用户(UB)、用户证书服务器(CAA、CAB)、认证服务器(ASA、ASB)。用户证书服务器用来查询证书的当前状态,认证服务器用来对证书信息进行验证。
本模型的区块链只存储根CA的哈希值,在每个独立的信任域内部,仍然保持传统的认证方式实现用户和认证服务器的认证,保证临节点认证效率。进行多域间的跨域认证时,本域的认证服务器先请求目标域的区块链根证书,正在对得到的证书进行哈希运算得到唯一的哈希值,将其与区块链上数据进行对比,验证通过则可以建立信任。通过两个步骤来实现两个域间用户与用户的双向实体认证:首先依靠本域用户和对方域服务器的建立认证信任,然后对方域服务器与对方域用户建立认证信任。
3.3.2 认证过程
协议流程执行的具体过程分为传统CA认证阶段和区块链CA认证阶段,大致如图5所示。步骤(1)、步骤(2)代表了传统域内用户认证阶段;使用步骤(1)~步骤(10)实现B域对A域的跨域认证,同理重复步骤(1)~步骤(10)实现A域对B域的跨域认证,从而达到A、B两域的双向认证。其中跨域初次认证区块链CA认证阶段步骤(8)、步骤(9)如下:
图5 协议流程
(1)ASB→BC
B域CA认证服务器查询联盟链节点,验证A域CA认证服务器证书BCertAA的有效性,结合区块链时间戳和有效时长解析其有效性,并检查随机数N2是否正确。
(2)BC→ASB
联盟链节点将验证结果返回给B域CA认证服务器。若A域的CA认证服务器证书可信且有效,生成跨域证书。
(3)ASB→UA
B域认证服务器ASB将跨域证书发送给A用户。
初次认证结束,再进行跨域通信时,A域内用户UA只需直接把跨域区块链证书BCertAA发送给B域认证服务器ABS。B域认证服务器ABS收到区块链证书BCertAA后,计算该证书的哈希值,并查询区块链,进行有效性确认(步骤(8)、步骤(9))。
3.4 总体系统结构
通过对比分析发现,公有链中节点可以自由加入,当节点数量变多时,交易速度就会变慢,如若应用到PKI体系中,会影响认证效率;私有链又存在数据共享性差的问题;联盟链的多中心结构,适合于将PKI域中的根CA加入到联盟链中,使得每个信任域内保持原有的逻辑关系不变,综合考虑选用联盟链作为模型结构。
跨域认证模型的系统架构主要包括联盟链平台部分和PKI信任域部分,各个PKI信任域包含非验证节点(non-validating peer,NVP)、PKI系统和人员系统3个部分,联盟链通过多个验证节点(validating peer,VP)构成。基于联盟链的跨域认证系统架构如图6所示。
图6 系统架构
3.4.1 PKI信任域
非验证节点(NVP)是那些在区块链中只参与记账的节点,不参与共识验证操作,只包含验证节点的部分功能,需要链接验证节点,为验证节点分担部分工作。本文中非验证节点承担用户注册、认证等操作。非验证节点验证本域发起交易的签名的正确性,并将交易按照时间戳的先后顺序广播给验证节点。非验证节点由认证服务器担任。
PKI系统和人员系统的其它部分与现存PKI体系完全相同。
3.4.2 联名链平台
验证节点(VP)是参与共识验证的节点。验证节点中包含链码执行环境,可以独立处理接收到的交易信息,并可以通过共识机制,将新区块存储到链上。同时由于区块链的特性,每个节点又同时存储着当前完整的账本记录。验证节点由每个PKI信任域的根CA服务器承担。
验证节点将根CA生成自签名的区块链证书的哈希值存储到区块链中。非验证节点通过查询区块链中区块链证书的哈希值,完成跨域认证。
4 模拟实验
4.1 联盟链环境设置
(1)基础系统环境
本文模拟实验通过Hyper-V 2.0虚拟机来完成,模拟3台主机简称:nodeA、nodeB、nodeC成为3个实验节点。并修改c:Windowssystem32driversetchosts文件,完成主机名到IP地址的解析。
(2)安装部署以太坊系统
先安装以太坊客户端,在实验节点上分别使用geth account new命令,然后创建区块链测试账户。
(3)通信配置
1)查看集群节点
>admin.peers
结果显示:[]。表明未与其它节点进行通讯。
2)获取节点信息
分别在节点的console上执行admin.nodeInfo.enode得到3个节点的公钥信息。
3)组建联盟链
在nodeA上执行admin.addPeer命令,将nodeB加入nodeA。同理,把nodeC加入nodeA,分别对nodeB、nodeC执行相同操作。至此联盟链已经组建完成。
4.2 利用OpenSSL搭建CA
安装配置OpenSSL,在nodeA、nodeC上安装一套CA服务软件。通过OpenSSL中rand语句创建随机数文件,使用隐私增强邮件(privacy enbanced mail,PEM)格式保存私钥,使用genrsa命令,以AES256加密方式生成2048 bits的私钥。接着创建根证书签发申请文件,得到签发根证书rootca.cer。出于OpenSSL产生的数字证书不能在java等语言环境中直接使用的原因,将其转换为PKCS#12编码格式,PKCS#12为个人信息交换文件格式,可以作为密钥库或信任库使用,可使用keytool查看该密钥库的详细信息。此时,根证书rootca.car的创建已完成,后续可使用其签发证书,本模拟实验以签发服务器证书和客户端证书为例。
4.3 签发证书
步骤与创建根证书相似,首先创建私钥,接着申请签发服务器证书,通过命令签发服务器证书servera.car,并对其进行格式转化,最后验证证书可使用性,表明该证书没有问题。
接着创建一个客户端证书用于验证准备。至此单个节点的CA中心已搭建完毕,并签发了服务器证书和客户端证书,依次在其它节点上按照相同步骤搭建CA证书中心。
4.4 证书验证程序准备
出于本文对CA证书的验证等操作超出了现有CA标准体系和流程考虑,无法使用现有的标准CA证书验证软件进行,本实验编制了专用的CA证书验证程序。
CA证书验证程序使用Delphi 2007编程实现,其核心函数或进程包括:获取文件签名、获取证书接口、执行文件签名、对文件签名进行验证、对签名信息进行分解、附加签名信息等。
4.5 证书管理智能合约
基于先前“基于区块链的PKI系统架构”所设计,调用智能合约实现证书签发、证书更新和证书撤销等操作。核心内容包括标准的联盟链和证书智能合约的实现。其中智能合约调用在专用证书验证程序中也有体现。
4.6 实验结果
在nodeA上配置IIS服务器,提供根证书下载和证书吊销列表(CRL)下载服务。吊销列表失效时间设置为10 min。把noseA的服务器证书servera.cer复制到一台client机器上安装,断开nodeA网卡服务10 min,在client机器上再次打开servera.cer,由于无法获取有效的证书吊销列表,所以无法访问该网站。通过调用智能合约对证书servera.cer进行验证,结果显示可以获得证书吊销列表,同时确认该证书的有效性,表明本实验完成了基于区块链的KPI身份认证功能。
以节点nodeB为中心做CA跨域认证实验,实验配置见表1。
表1 CA跨域认证的实验配置
在nodeA上安装rootca.cer,并允许访问nodeA的证书吊销列表,可以完成对证书serverb.car的证书签名校验。不在nodeA上安装nodeC 颁发的根证书PKI-BlockChainC-CA.cer,并不允许访问nodeC的证书吊销列表,不能对证书cert_b.cer的数字签名校验。验证结果表明,不能依据nodeA的根证书rootca.cer验证nodeC颁发的证书cert_b.cer。也就是说,在标准的PKI体系和框架下,不能实现CA证书的跨域认证。
当调用智能合约对证书cert_b.car进行验证时,可以成功完成证书签名校验,实验结果如图7 所示。表明本文提出的基于联盟链的跨域认证模型合理,达到期望目标。
图7 调用智能合约后对证书cert_b.cer的验证结果
4.7 方案分析
4.7.1 安全性分析
(1)证书安全性
本文对区块链数字证书的关键操作步骤是将数值证书文件进行哈希运算得到哈希值,并将其作为区块链资产以交易的方式将哈希值存储到区块链中。关于哈希运算的两个特性:
单向性:哈希运算是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程。对于给定的Hash值m,通过其运算过程Hash(n)=m,来推导出被运算信息n是不可能的。
抗碰撞性:一是对于给定Hash函数,给出一条消息,找出一条消息y使Hash(x)=Hash(y)是计算上不可行的(弱抗冲突),二是找出任意两条消息x、y,使Hash(x)=Hash(y)也是计算上不可行的(强抗冲突)。
由此可见基于单向性和抗碰撞性,将PKI中各个信任域的根CA的数字证书进行哈希运算,可以得到唯一的哈希值。将其存储到不可篡改的区块链中,具有极高的安全性。
(2)认证安全性
本模型中只将各域的根CA证书信息哈希值体现在区块链中。通过将原有认证方式和双向实体认证方式联合使用,利用区块链的高安全等级和哈希存储的唯一性等特性,提高认证双方安全性的同时,也提升了跨域认证的效率。
(3)体系安全性
区块链技术作为一个分布式数据库,各个节点是对等存在的,每个节点都参与链上数据维护的同时也存储了相关信息,即使单个节点被攻击导致失效,也不影响其它节点,可以有效克服多种单点故障导致的安全问题。
传统的PKI体系通过区块链中共识机制达成分布式场景下的一致性,使得一些常见的身份攻击变得不再可行,区块链的可追溯性杜绝了中间人攻击的可能,同时也对各域CA认证中心进行了侧面监管。
4.7.2 效率分析
通过模拟实验结果,分析协议的计算开销,并与文献[18]方案作比较。本文模拟实验过程与文献[18]方案的联盟数类似,其联盟数为2,本实验联盟数为3。进行效率对比结果见表2,单位为运算次数,表中记录分步次数合计值。
表2 开销对比
与文献[18,19]方案相比,本文方案减少了公钥的加解密操作。在联盟数量相似的情况下,本文使用哈希算法次数也少于二者;基于联盟链的特殊优势,不受盟员的增加而导致跨域认证时使用公钥算法次数的增加,实际结果只会更好于模拟实验对比分析结果;随着多个域间认证工作量的大量增加,本文总体哈希次数也会随之增长,但本方案使用的SHA-256单次计算耗时仅为RSA-1023的1/10,在哈希计算步骤效率远高于公钥加密,本文方案的实际效率与负载能力在多域联盟环境下也是值得肯定的。文献[18]通过将公钥证书的发放过程转换为区块链网络中的智能合约的交易过程,在一定程度上解决了安全的通信信道和抵抗DDos攻击的问题,但其选用的合约方式需要节点过去参与操作,带来了不小的时延,并没有发展为公共机制的能力,仅适合一定范围或私有机构内部使用。
文献[19]采用的添加独立于CA的信任中间人的方式无疑是安全性极高的,可以检测到PKI攻击并区分攻击和错误,达到异常的精确管理。但其信任中间人的建议方式也带来了极高的开销支出,等同于多一个进行双重CA验证,同时该模型建立于Hyperledger fabric上,节点子集30个时达到最优配置更限制了其模型智能应用在私有领域。综上所述,本文设计的哈希存储与区块链数据结合方案,使用部分现有技术和以太坊相结合,提高安全性的同时又不带来过多的负载压力,对于参与对象与数量没有限制,也不存在节点数量对系统性能影响的可能性,并且伴随着区块链的特性,参与用户越多会促使体系的安全性越高。是一种比较适合现有网络模式下的安全PKI体系应用方案。
5 结束语
本文提出一种基于区块链的PKI跨域认证模型。利用区块链的去中心化、去信任、不可篡改等特征,在证书使用者和证书依赖者之间建立信任关系,将数字证书和证书管理的一系列操作都记录在区块链中,使得查询变得简单高效,同时解决了传统PKI体系高度中心化带来的单点故障问题,提高了PKI体系的鲁棒性。通过区块链交易方式将证书管理一系列操作变得十分简单高效。对X.509证书的改进实现了将PKI体系中每个信任域内信任锚的区块链证书哈希值存储在链上,保证了每个信任域中原有信任结构不变,并实现了CA的跨域认证。本文针对传统PKI体系存在的问题,选用比较新兴的区块链技术来解决PKI问题,工作具有现实意义和研究价值。
作为一门新兴技术,区块链技术仍有改进空间,在针对本文研究的问题上,本文仍有进步空间。目前所有基于区块链的设计原理都是基于现有的区块链平台,区块链系统在特定共识机制下无休止地自动成块,导致严重的资源浪费,如何让其按需成块值得深究。由于区块链中的数据公开透明,下一步可以从隐私保护入手,可以考虑隐藏用户和用户公钥的对应关系,提高用户隐私的安全性。同时,区块链的核心是在共识机制,是否可以寻找一套针对PKI体系的特有共识机制,成为今后研究方向。如何进一步完善本文提出的一种基于联盟链的PKI跨域认证模型,使之适用于国内PKI认证体系现状,值得进一步研究。如何用区块链全面替换PKI体系,使其全面承载PKI的功能,值得进一步探讨。