基于联盟链的分布式高效身份认证*
2022-04-19郭少勇
姚 影 ,颜 拥 ,郭少勇 ,熊 翱 ,张 旺
(1.国网浙江省电力有限公司电力科学研究院,浙江 杭州 310014;2.北京邮电大学,北京 100876)
0 引言
传统互联网业务的身份认证技术主要以用户名密码为主[1],但随着互联网业务越来越多,不同的业务需要重复注册不同的账号,并且通常同一个用户不同账号之间的密码存在关联性,容易造成密码泄露的风险[2]。同时,传统认证系统是中心化[3]的,用户隐私信息存放在企业系统中。但是身份认证信息存储方式较为简单,相关系统易受攻击、用户隐私身份信息泄露的隐患较大。并且传统的中心化认证系统是业务系统的唯一认证接口,如果其遭受到有效攻击,那么系统存在极大的崩溃风险[4],因此为了解决用户隐私信息安全、维护业务系统的稳定性,构造分布式的身份认证系统是现在亟待解决的问题。
区块链技术[5]发展于比特币中,具有分布式去中心化、数据可追溯、不可篡改的优点。因为其分布式去中心化的特性,如果想要有效攻击区块链网络的话,需要同时攻克其不同节点[6],因此其比中心化网络更加稳定可靠;区块链的数据可追溯不可篡改[7]的特点,使得无人能够修改区块链上的数据,因此区块链网络下的不同节点之间能够相互信任彼此。区块链的高稳定性和信任传递的能力为身份认证技术提供了新的思路[8]。
联盟链作为区块链的一种是由多个机构共同参与管理的,与公有链访问权限全公开不同的是,只有这些机构拥有联盟链的写入与访问权限[9]。由于联盟链弱化了网络复杂性,可以使用更松散的共识机制,因此共识效率比公有链高很多同时具有去中心化的优势[10],具有很大的实用价值。
本文针对传统身份认证所存在的重复认证、身份隐私不安全、单一系统易受攻击等痛点,结合联盟链的优势,构建出一套基于联盟链的身份认证方法。并为了提高系统的认证效率,改进了分布式身份认证方法中联盟链的共识算法[11]。
1 方案设计
1.1 系统架构设计
为了解决传统身份认证中存在的不同问题,本文利用区块链技术构建分布式身份认证方案[12]。基于区块链的分布式身份认证架构包括四个部分:可信授权中心、联盟链网络、业务系统和用户,其结构如图1 所示。在本系统中,用户通过提交自身身份信息至业务的身份认证系统,由业务系统将用户的身份信息加密上链,完成用户身份的注册;当用户访问业务系统时,业务系统从区块链节点上获取相应用户注册信息,与用户认证信息进行对比验证,完成用户认证功能。
图1 基于联盟链的分布式身份认证架构
分布式身份认证架构各个部分的功能如下:
(1)可信授权中心:负责为各业务系统和用户颁发数字证书。
(2)区块链网络:每个区块链节点由区块链中的一个企业维护,提供用户实体身份信息上链和查询等功能。
(3)业务系统:提供各类业务服务的不同应用系统,并且对访问系统的用户进行注册和认证功能。
(4)用户:访问业务系统的人,身份认证系统的使用者。
1.2 流程设计
在本方案设计的认证系统中,用户的注册信息通过可信信道送到区块链网络中,并广播共识到所有区块链结点中,区块链网络中的任意服务节点均可获取用户的注册身份,从而能够实现对用户单点注册多点认证的功能,省去了重复注册用户账号密码的麻烦。用户认证信息包含以下几种数据,具体见表1。
表1 身份信息数据说明
1.2.1 注册身份流程
用户注册流程如下:
(1)用户U 在本地根据ECC 秘钥生成算法生成自己的公私钥对(UPK,USK),其中公钥为UPK,私钥为USK。
(2)用户U 在业务系统的注册接口输入自己的用户身份UID、用户认证信息UAI、公钥UPK。
(3)业务系统BS 接收到用户发来的注册信息(UID,UAI,UPK),核查UID 与UPK 是否和已有注册用户的身份或公钥冲突,如果至少有其中一项冲突,则向用户反馈注册失败信息,并返回第(1)步重新开始;若都不冲突,则向下进行。
(4)业务系统BS 将用户身份UID、用户认证信息UAI进行hash 运算得到用户的身份信息摘要IS,返回给用户,并通知用户注册身份信息正确。
(5)用户U 收到身份信息摘要IS 后,用自己的私钥USK 对身份信息摘要进行加密,生成数字签名DS,发送给业务系统。
(6)业务系统BS 收到用户数字签名DS 后,将其与用户身份UID、用户公钥UPK 发送给区块链节点s。
(7)区块链结点s 接收到业务系统发来的相关信息后,将信息打包共识到区块链网络,并由可信授权中心为用户发布数字证书DC。
(8)当区块链网络将注册信息共识成功后,由业务系统BS 通知用户U 注册成功,并将数字证书DC 返回给用户,由用户保存。
1.2.2 认证身份流程
用户认证流程如下:
(1)用户U 在业务系统认证接口输入用户身份UID、用户认证信息UAI 与数字证书DC。
(2)业务系统BS 接收到用户发来的认证信息(UID,UAI,DC)后,将其广播到联盟链上的所有业务系统中,一起对其进行验证。并由各系统对认证信息进行共识投票。
(3)业务系统BS 根据用户身份UID 到区块链节点s上查找注册时UID 对应的公钥UPK′。并判断链上用户公钥UPK′与数字证书DC 内的用户公钥UPK 是否一致。若UPK≠UPK′,则说明用户身份信息与注册时绑定的用户公钥不一致,在认证共识中投反对票;若UPK=UPK′,则说明用户身份信息与注册时绑定的用户公钥一致,进行下一步验证。
(4)业务系统BS 根据用户身份UID 进一步到区块链节点处获取注册时UID 对应的用户数字签名DS。并用用户数字证书DC 内的用户公钥UPK 对数字签名DS 进行解密,得到用户身份对比身份信息摘要IS′。
(5)业务系统BS 对用户身份UID 与用户认证信息UAI进行hash 计算,得到用户认证身份信息摘要UIS。若IS≠IS′,则说明用户输入的认证信息UAI 不正确,认证失败;若IS=IS′,则说明用户输入的身份信息与注册时无误,验证成功,在认证共识中投通过票。
(6)联盟链网络根据最终的认证共识投票情况给出认证结果,业务系统BS 根据认证结果判断是否为用户提供服务。
2 共识算法优化
为了使身份认证系统工作更加高效,提高其注册、认证的吞吐量,本节对PBFT 算法[13]进行优化,以满足分布式身份认证对共识效率的要求。
2.1 PBFT 算法改进思路
节点数为N 的传统PBFT 算法网络,可以容错f 个拜占庭节点,其中f=(N-1)/3。但是为了这个容错能力,产生了很多无效的通信[14]。因为节点在收到2f+1 个正确的消息之后就可以进入下一阶段,但是每个节点要向网络中广播大于3f 个消息[15]。无效的通信主要发生在准备阶段的全网广播。因此,改进的PBFT 算法引入动态权重机制,称其为“动态实用拜占庭容错算法(Dynamic Practical Byzantine Fault Tolerance,DPBFT)”,根据节点在共识过程中的表现情况来动态调整不同节点之间的权重值。每个共识节点维护一个权重向量表WT={w1,w2,…,wi,…,wN},其中权重p=n/N 反映出i 节点的动态通信性能和可信度。WT会随着共识的进行而不断更新,在每轮共识结束之后,每个共识节点会根据此次共识的投票和通信情况对自己维护的WT进行更新。共识期间选择权重最大的那几个节点来进行选择性广播。之后在共识流程的广播阶段,节点将在各自的广播域内进行投票消息广播,并且广播域将随着WT的更新而更新。引入一个动态参数p 来表示选择性广播域的大小,其中p=n/N。n 为选择性广播域中节点的个数。
2.2 算法设计
算法流程如图2 所示。首先初始化共识节点的投票权重,开始进行一次正常的PBFT 投票流程。然后根据每次投票的结果,动态调整权重,构建选择性广播域。改进的PBFT 算法与传统的PBFT 算法流程大体相似,只是在一致性协议的广播阶段进行相应改进。这里对改进后的算法一致性协议阶段进行主要功能描述:
图2 改进的PBFT 算法流程图
(1)PRE-PREPARE 阶段:主节点接收客户端发送的PRE-PREPARE 消息,并将消息广播给参与共识的所有节点。
(2)PREPARE 阶段:从节点收到主节点发送的PREPREPARE 消息后生成PREPARE 消息,根据WT和p 值去定一个选择性广播域,将PREPARE 消息选择性广播给自己的共识域内的节点。如果接收到超过2f+1 个正确的准备消息,则会进入COMMIT 阶段。
(3)COMMIT 阶段:节点生成COMMIT 消息并广播到共识域内节点,其他节点验证COMMIT 消息,验证通过后,进行ADJUST 阶段。
(4)ADJUST 阶段:根据共识结果给每个参与共识节点的情况进行打分。根据各个节点提交commit 的时间,为每个节点离散化0~100 分数。根据式(1):
式中Qi为i 节点本轮共识的得分,ti为i 节点提交commit的时间,T 为第一个commit 发生到共识结束总耗时。第一个提交commit 的节点得分100 分,未参加commit 的节点得分为0。并根据式(2)动态调整每个节点权重。
式中q 为上一状态权重在新权重中所占比例,wi为上一状态中i 节点权重值。
3 安全性分析
3.1 用户身份信息安全性分析
区块链节点上只保存用户认证信息的摘要,不保存用户认证信息UAI 的明文信息,攻击者即使攻破联盟链网络中的节点也无法获取用户对应的认证信息UAI。并且用户公钥由可信授权中心颁发数字证书,只有合法注册的公钥才能在业务系统上验证。攻击者很难同时获取用户的数字证书DC 和认证信息UAI 来伪造用户身份。因此本系统可以有效保证用户的身份信息安全。
3.2 系统稳定性分析
用户身份信息加密保存在区块链节点,每个业务系统都可以通过访问联盟链网络获取用户加密身份信息进行验证。当某个业务认证系统瘫痪后,用户可以选择就近业务系统进行验证。因此本系统可以实现单点注册,多点认证,提升可用性的同时有效防止中心化业务认证系统的易崩溃,不稳定的风险。
4 性能分析
基于GO 编程语言实现了一个多节点联盟链实验系统,用以模拟在本设计方案中用户注册以及用户行为上链共识过程。在该系统中对原PBFT 算法和本文提出的DPBFT 算法进行了性能测试。主要分析PBFT 与DPBFT在不同的p、q 值的选取上存在的性能差异。
4.1 认证时延
认证时延是指企业或授权中心向区块链网络发送上链信息到区块链网络完成共识的时间间隔。在不同节点数量的情况下,比较了PBFT 和DPBFT 算法的认证时延,同时引入影响广播域大小的因子p 和分数调整的衰减因子q 来观察其对认证时延的影响。每个数据都是重复测试20 次后取的平均值。实验结果如图3 所示,DPBFT 算法比PBFT 算法所产生的认证时延要小。当区块链网络节点数量和衰减因子q 确定时,p 的大小决定了节点选择性广播域的大小。从图中可以看出,p 越小,交易时延越小,共识效率越高。但不可为了追求共识效率设置很小的p 值,因为当p 值小于2/3 时,节点不能接收到足够的信息进入确认状态,导致全网不能共识。
图3 相同q 值不同p 值的DPBFT 算法与PBFT 算法的交易时延
衰减因子q 对选择性广播域的大小没有影响,因此其对共识效率也没有影响。在无网络波动的情况下,观察了区块链网络节点数量和影响广播域因子p 确定时,不同的衰减因子q 对网络共识时间的影响,结果如图4(a)所示。衰减因子q 越大,最近一次共识得分对整体分数的影响效果越大。因此,q 越大,网络收敛到最佳广播域的速度越快。但当存在网络波动时,如图4(b)所示,最近一次共识结果的得分不能象征整体网络中节点的可依靠程度。因此,q 越大,节点得分调整幅度过大,导致一直没法收敛到最佳状态,共识效率提升不高。所以,为了使共识效率达到最理想状态,应该根据网络波动情况,选择合适的q 值。
图4 相同p 值不同q 值的DPBFT 算法与PBFT 算法的共识时间
4.2 认证吞吐量
“吞吐量(Transaction Per Second,TPS)”指的是在单位时间内完成的认证的数量。实验中每秒向区块链网络发送100 条认证请求,记录每秒能够完成认证的数量,并在不同节点个数的情况下进行测试。图5 所示为改进前后的PBFT 的吞吐量对比图。可以看出,在相同节点数量和相同衰减因子q 的情况下,改进的PBFT 算法比PBFT 算法吞吐量高,随着网络节点数量的增加,每种算法的吞吐量都会下降,因为共识阶段需要广播的消息变多了。同时,在相同节点数量的情况下,p 越小,选择性广播域越小,每一条消息的共识时间越短,因此吞吐量越高。
图5 DPBFT 算法与PBFT 算法的吞吐量比较
5 结论
针对传统身份认证技术的弊端,提出了一种基于联盟链的分布式身份认证方法。用户在业务系统注册身份之后,身份信息加密广播共识到所有联盟链节点,每个节点都可以对注册的用户进行认证,达成用户单点注册多点登录的功能并有效防止了用户身份隐私泄露的风险。用户认证过程由全网共识投票,即使服务节点故障,也可依靠整个系统的分布式鲁棒性来保证认证系统的正常工作,提高系统的抗攻击能力。最后通过实验表明,本方法比传统联盟链共识效率更快,吞吐量更高。可根据网络情况调整p、q 值,达到效率最大化。