APP下载

基于区块链和多因子结合的身份认证方案

2022-06-14缪文豪王健翔郑朝晖

计算机仿真 2022年5期
关键词:服务端拜占庭人脸识别

缪文豪,王健翔,郑朝晖

(苏州大学计算机科学与技术学院,江苏 苏州 215006)

1 引言

近年来,随着互联网技术的飞速发展和普遍应用,大规模分布式系统的数量急剧增长[1],网络安全问题也日益受到关注。认证技术是保障网络安全和隐私信息的关键,传统的认证方案都是基于中心化的模式[2],但这种方式也带来了许多网络安全风险,比如单点故障、隐私泄露、易受攻击等[3]。目前的网络身份认证系统大多采用口令认证和密钥体制认证的方案。Hwang[4]提出了前向哈希链的动态口令方案,虽无须重新注册,但不能抵抗重放攻击方案。王秦[5]提出一种基于公钥加密的一次性口令 (One-Time Password, OTP) 移动商务身份认证方案, 引入移动智能终端的唯一标识IMEI作为认证因素并利用伪随机数实现双向身份认证。该方案虽然安全性较高但对于密钥安全太过依赖, 且非对称密钥的计算量较大。文献[6]基于单钥体制使用质询设计了一个有效的适用于网络通信系统的身份认证方案, 克服了通常的质询响应认证方案的弱点, 能够防止重放攻击和冒充攻击。

2008年中本聪就提出了区块链的概念,但是直到2014年初,区块链技术才开始出现在人们的视野中,其被广泛应用于金融、物联网、公共服务、数字版权等领域[7]。区块链技术利用加密的块链式结构来存储数据,利用共识算法来生成和更新数据,具有去中心化、数据防篡改、可追溯等特性。尽管区块链技术最初主要应用在金融服务领域,但是近几年来,已有很多科研人员将区块链技术引入到身份认证领域中以解决面临的安全问题[8]。HAMMUDOGLU J S等人将区块链技术应用于基于生物特征的身份认证问题, 使用区块链技术存储指纹形成一个基于区块链的身份认证系统, 但是该方案直接将未加密的指纹存储在区块链上, 存在安全性与隐私性威胁。FROMKNECHT C等人将区块链技术应用于传统PKI身份认证领域, 解决了传统PKI领域存在单一CA (Certifacate Authority)节点故障和使用CRL (Certificate Revocation List) 造成通信量过大的问题, 但未提及跨PKI信任域的身份认证问题的解决方案。

基于上述研究,本文提出了一种基于区块链和多因子结合的身份认证方案。一方面,引入区块链技术,解决中心化面临的风险;另一方面,引入了人脸识别技术,将口令认证,密钥认证和生物特征认证三者结合,大大提高身份认证的安全性。同时就目前联盟链主流的实用拜占庭容错机制网络开销大、不具备扩展性的缺点,提出了一种分层可扩展的实用拜占庭容错机制(Layered and Scalable Practical Byzantine Fault Tolerance Mechanism,LSPBFT)。

2 技术概述

2.1 区块链

区块链是当今互联网时代的一种新型技术,其结合了分布式账本、非对称加密、共识机制、智能合约等技术。在P2P网络下,采用公开透明的准则,构建块链式的数据结构,具有去中心化、防篡改、可追溯等特点,其独有的技术特征能够解决身份认证中面临的诸多安全和隐私方面的问题[9]。

2.2 身份标识密码技术

为了降低公钥系统密钥和证书管理的复杂性,以色列密码学家Shamir在1984年引入了IBC (Identity-Based Cryptography) 的概念。其设计的思想是取代公钥密码系统中的数字证书,将用户在标识密码系统中的唯一身份标识作为用户的公钥,用户的私钥则由密钥生成中心通过某种私钥生成算法计算产生,这种系统模式本身就具备了密钥托管的功能。在IBC体系中,用户的公钥是代表其在系统中身份的一组字符串,可以是姓名、邮箱、手机号码、IP 地址等,这样极大的减轻了公私钥的管理[10,11,12]。

2.2.1 SM9密钥生成算法

1)系统主密钥生成

KGC产生随机数s∈[1,N-1]作为主私钥,计算G2中的元素Ppub=[s]P2作为主公钥。系统的主密钥对为(s,Ppub),KGC对外公开Ppub,私自保存s。

2)用户密钥对生成

KGC选择一个私钥生成函数标识符hid,用户U的标识为IDU,KGC首先在有限域FN上计算t1=H1(IDU‖hid,N)+s,如果计算出的t1为0,则重新生成主私钥,并计算和公开主公钥,同时更新已有用户的私钥。若t1不为0,则计算t2=s/t1,然后计算dU=[t2]P1,即dU=[s/(H1(IDU‖hid)+s)]P1,计算出的dU就是用户的私钥,而用户的公钥QU=[H1(IDU‖hid)]P+Ppub。

2.3 人脸识别技术

人脸识别是一种依据人脸特征信息进行分析从而得出结论的生物特征识别技术[13],其主要基于人的脸部特征,通过检测图像中是否存在人脸,进一步确定图像中人脸的大小、位置、角度等信息,并通过对比校验实现人脸的识别[14]。近年来,基于深度学习的人脸识别算法正在迅速发展,目前处于人脸识别领域的领先地位。深度学习算法的创新之处在于网络结构、损失函数、训练数据集等方面,并在这些方面做着不断的优化和改进,因而人脸识别的准度和效率不断提高。在众多基于深度学习的人脸识别算法中,Sphereface 是 Weiyang Liu 等人在 2017 年 CVPR (IEEE国际计算机视觉与模式识别会议)上提出的人脸识别新算法,该算法仅用 WebFace 作为训练集就在 LFW 上取得了99.42%的成绩。Sphereface模型是对open-set进行人脸识别,也就是测试的图像并没有在训练集中出现过。不同于其他深度学习的算法,Sphereface算法提出了新的损失函数——A-Softmax Loss(angular softmax loss),该损失函数是基于角度距离的,因此训练出的特征具有角度可分的特点[15]。

3 LSPBFT算法介绍

3.1 PBFT算法分析

实用拜占庭容错机制,简称为PBFT,英文全称为Practical Byzantine Fault Tolerance,是一种基于状态机复制的共识机制。在区块链系统中, 由于某种原因引起的操作错误、网络延迟、系统崩溃、恶意攻击等都会引起系统错误, 这样的错误被称为拜占庭错误[16]。PBFT的关键在于解决拜占庭错误,主要思想是在去中心化的网络中,各个分布式节点通过点对点的传输对传递的信息达成共识,最终生成区块。实用拜占庭容错机制的优点在于改变了原始拜占庭机制效率不高的缺陷,将机制的复杂度由指数级降到了多项式级,并使得拜占庭容错算法可以应用于实际的分布式系统中。尽管PBFT机制是目前联盟链常用的共识算法,但是其还是存在着很多不足,随着区块链技术的兴起,大规模区块链系统也随之出现,研究人员逐渐关注如何简化实用性拜占庭机制的设计,提高拜占庭协议的性能。PBFT算法的缺点如下:①PBFT算法是基于C/S架构, 整个系统中的节点数量是固定, 一旦节点数量发生改变系统无法感知, 不具备扩展性。如果某个节点想要加入该系统,则这个系统必须重启,因此会产生不必要的资源浪费,影响实用性和用户体验。②在视图切换协议中,没有对选举出的主节点的真伪性进行验证,因此很有可能把恶意节点选举作为主节点,恶意节点可能会给不同的请求编上相同的序号,或者不去分配序号,或者让相邻的序号不连续,这样会给系统带来极大的危险性。同时客户端重复请求会导致视图不停变换,从而影响正常的服务,甚至陷入宕机。③PBFT算法三阶段协议中点对点的通信将产生大量的网络开销,造成大量网络资源的消耗。

3.2 LSPBFT算法模型

基于3.1节PBFT算法存在的问题,本文对其进行了改进,提出了一种分层可扩展的实用拜占庭容错机制(Layered and Scalable Practical Byzantine Fault Tolerance Mechanism,LSPBFT)。在LSPBFT算法中,将整个网络中的节点分为三类:服务端节点、验证节点和客户端节点。其网络模型如图1所示。

图1 LSPBFT算法的模型图

这三种节点的数目分别表示为Ns,Nv,Nc。认定服务端节点只有一个,验证节点的个数为20个,而客户端节点的个数不收限制。那么,整个网络的节点总数可以由式(1)表示

Nall=Ns+Nv+Nc

(1)

另外, 从式 (1) 可以看出整个网络中只有客户端节点的个数可以改变。经过验证的节点自动成为客户端节点,客户端节点可以自由地进入和退出系统。验证节点从客户端节点中选举出来,个数是固定的20个,而服务端节点从验证节点中选举出来,个数为1个。参与整个共识过程的节点为服务端节点和验证节点,共21个节点。本模型参考EOS选举出的超级节点的个数[17]。正在进行共识过程的验证节点和服务端节点不能随意退出系统,只能等整个共识过程结束,才能退出系统。

3.3 LSPBFT算法流程

本方案采用了分阶段的共识算法,当网络条件优越并且选举出的服务端节点和验证节点不是拜占庭节点时(也就是诚实节点),采用本方案提出的快速共识算法FCA(Fast Consensus Algorithm),实现了优于 BFT 算法的吞吐量和共识效率,并且降低了算法的开销。在网络条件差并且共识过程中出现了拜占庭节点,切换到使用 PBFT算法来保证系统基本的容错能力和可用性。

3.3.1 第一阶段FCA算法

第一阶段的 FCA 算法使用场景为网络健壮性较好,参与共识过程中没有出现拜占庭节点,满足上述条件能够成功快速地达成共识。当共识未达成时,能够发现共识失败。第一阶段的 FCA 共识算法的流程图如图2所示。

图2 FCA算法流程图

1)请求阶段:客户端节点将验证请求发送给服务端节点,服务端节点校验该节点是否已注册过,如果未注册则返回“未注册”的提示信息;否则校验通过后,进入下一阶段。

2)验证阶段:服务端节点给请求加上编号,并将编号之后的请求转发给所有的验证节点验证节点收到请求后,直接对请求进行本地的处理并得到验证结果,然后将结果签名之后直接返回给客户端。进入下一阶段。

3)响应阶段:客户端独立地收到来自所有验证节点和服务端节点的响应,若所有的响应相同,则认为共识已经达成。

4)回复阶段:客户端节点将收到的签名响应一起返回给所有验证节点和服务端节点,服务端节点检查响应相同,则此阶段共识成功。

3.3.2 第二阶段PBFT算法

当第一阶段使用快速共识算法无法达成共识时,则判定系统中存在拜占庭节点,故系统切换到第二阶段共识过程。第二阶段共识过程中使用的是 PBFT 实用拜占庭容错算法。第二阶段的 PBFT 共识算法的流程图如图3所示。

图3 PBFT算法流程图

1)请求阶段:客户端节点将验证请求发送给服务端节点。

2)预准备阶段:服务端节点将请求转发给所有的验证节点。此阶段中,验证节点确保服务端节点不会发送两条具有相同的编号,但是内容不同的消息。

3)准备阶段:若验证节点收到服务端节点的请求后,对该请求进行签名并向其它节点广播准备消息,并从其他参与共识的节点接收准备消息。若收到至少2 f+1 条来自不同节点的消息,则进入提交阶段。如果验证节点为拜占庭节点,则不执行该操作。

4)提交阶段:所有参与共识的节点向其他节点发送提交信息,当收到包括自己的一共2f+1条提交消息时,可以认为大多数节点达成共识,然后执行验证请求。

5)回复阶段:参与共识的节点将验证请求的结果返回给客户端节点,当客户端节点收到超过 2f+1条不同节点的响应时,共识过程结束。

4 节点选择算法

本文通过采用节点选择算法,来挑选出合适的验证节点。为保证验证节点能够提供安全高效的认证服务,尽可能的在所有可选的验证节点中选取节点质量指标(Node Quality Index,NQI)较优的节点。假设所有验证节点的集合记作VC(Validation Node Collection),依据 VC 内节点的 NQI,选取综合排名前20的节点。NQI根据实际情况来抉择,比如平均在线时长,网络带宽,延时,参与共识的次数等条件。

VC={VC1,VC2,VC3,VC4,……,VCn}为VC内节点的集合。q={q1,q2,q3,……,qm}为NQI的各项指标的集合,每个指标用qi表示,i∈[1,m]。由于网络情况是实时变动的,调度节点应采用动态测量的方法[18],首先获取当前的验证节点的数据指标,再结合以往的数据指标,计算出新的数据指标矩阵。M为VC内节点对应的NQI的数据指标矩阵,如式(2)、(3)。

(2)

(3)

Mnow为当前的数据指标矩阵,Mpast为以往的数据指标矩阵。其中,第i行向量[qi1,qi2,……,qim]是VC中第i个节点VCi的m个NQI值。因此新的数据指标矩阵由式(4)计算得出。

Mnew=αMnow+βMpast

(4)

其中,α和β分别为当前数据指标和以往数据指标的权重,同时要满足α+β=1且0 <β<α<1。由于NQI的各项指标的单位不同,比如延迟的单位为ms,带宽的单位为bps等。为了更方便的处理VC内节点的NQI,需要将矩阵M进行归一化运算,将M中的每一行向量映射到[0,1]区间内。本文采用线性函数如式(5)进行计算。

(5)

其中,qij是M中第i行、第j列中的值,qmax和qmin分别为第j列[q1j,q2j,…,qnj]T中的最大值和最小值,qij映射到[0,1]区间里面的值记作q’ij。

权重集合w={w1,w2,…,wm},其中wj∈R+,j∈[1,m]且满足式(6)。权重集合w中的每一个元素对应为集合q中相应位置的指标的权重值。

(6)

因此每一个验证节点VCi的NQI可由式(7)计算得出

(7)

根据式(7)计算出每个验证节点的NQI,然后获得向量NQI={NQI1,NQI2,……,NQIn}。将向量NQI中的值按照从大到小的顺序排列,选取其中前20个节点最为最终的验证节点。

5 认证方案设计

用户个人信息属于敏感信息,系统有保护用户隐私的责任,但是同时身份管理也需要加强权威,因此本文采用的系统架构并不是完全去中心化的,但也不是完全中心化的,隶属于联盟链的框架。联盟链是部分去中心化的,由各个组织机构共同管理,用户需要得到认可,才可以加入。本文设计的认证方案,可以理解为有一个权威的中心,但是其不是负责管理整个系统,而是把验证的职责分离出来,交给验证节点来执行。本文设计方案里面的角色包括客户端节点、服务端节点、验证节点和区块链。具体的流程,如图4、5所示。

5.1 注册阶段

步骤 1:客户端用户向服务端发送注册请求;

步骤 2:服务端向客户端用户发送相应的注册要求;

步骤 3:客户端用户向服务端上传自己的身份证号和人脸照片;

步骤 4:服务端依据客户端用户的身份证号在本地数据库检索是否已存在,若存在则说明已注册过,返回给用户“已注册过,不可重复注册”的提示信息;否则采用SM9密钥生成算法,依据用户的身份证号生成用户的密钥对,同时使用人脸识别模型训练出用户的人脸特征值ID;

步骤5:服务端将用户的密钥对发送给客户端,同时将签名后的用户信息UserInfo存入区块链中。用户信息包含用户的身份证号和ID,UserInfo=s(Hash(HashInfo1-2))。其中s为系统的主私钥,HashInfo1-2为身份证号和ID的哈希值。

图4 注册流程图

5.2 验证阶段

步骤 1:客户端用户向服务端发送认证请求;

步骤 2:服务端向客户端发送相应的认证要求(包括一个随机口令);

步骤3:客户端用户向服务端发送自己的身份证号和随机口令,同时通过实时拍摄自己的人脸照片进行上传;

步骤4:服务端收到用户的认证信息后,将用户实时拍摄的人脸照片输入到人脸识别模型并训练出用户的人脸特征值ID’,将认证信息(包括身份证号、随机口令和ID’)发送给通过节点选择算法选出的验证节点;

步骤 5:验证节点和服务端通过LSPBFT算法对用户的认证请求进行验证并达成共识;

步骤 6:检验随机口令是否正确以及是否在有效期限内,如果随机口令不正确则验证失败,如果随机口令的时限不在有效期限内,则提示重新验证;

步骤 7:使用用户的公钥解密认证信息,提取出用户的身份证号和ID’;

步骤 8:使用用户的公钥在区块链中查找相应的UserInfo,利用系统的主公钥解密UserInfo,提取出用户的身份证号和ID;

步骤 9:比对步骤7 和步骤8中的身份证号和人脸特征值是否相等,如果有一项信息不相等则验证失败,否则验证成功,并将验证结果返回给客户端用户;

步骤 10:如果用户收到所有验证节点相同的验证结果,则共识过程结束,用户身份验证成功;如果用户收到验证结果不完全相同或者没有收到全部验证节点的验证结果,则验证失败,重新返回步骤5,再次进行共识过程。

图5 验证流程图

6 实验分析

本实验的硬件环境为Intel(R) Core(TM) i5的CPU,8G的内存和932G的硬盘,软件环境采用VMware Workstation 15 Player的虚拟机和Ubuntu 16.04的操作系统。本实验的开发语言为go语言,开发工具为LiteIDE,数据库为MySQL。实验通过MATLAB 2017a对LSPBFT算法和PBFT算法的运行结果进行数学计算仿真。

6.1 安全性分析

6.1.1 去中心化

由于本文的方案把服务端节点节点的认证业务分离,分配给验证节点来执行,因此认证时涉及到多个节点,并不像传统认证的单一服务器,所有业务只有中心服务器来完成。同时验证时并不知道哪些节点会成为验证节点,这也提高了攻击的难度,大大提高了系统的安全性。

6.1.2 防篡改

传统认证方式是把用户的信息存储在数据库中,而这会遭受黑客的大量攻击,如果数据库被攻破,那么用户的隐私也会受到威胁。而本文的方案是将节点的信息存入区块链中,当网络中的节点越多,存储数据的副本就越多。因此,一旦数据存入区块链就很难被篡改,如果想要修改数据,就需要攻击全网所有的节点并更改数据。

6.1.3 抗重放攻击

随机口令在认证时只使用一次, 攻击者即使截取了消息也无法进行重放攻击。并且随机口令附加上时间戳,由于时间戳无法篡改, 若攻击者重用截获消息, 因时间戳失效而验证失败, 因而有效防止重放攻击。

6.1.4 防泄漏

单因子认证最大的弊端就是隐私泄露,就比如用户的公私钥,随机口令或者人脸照片。而本方案将密钥认证,口令认证与人脸识别认证相结合,即使数据丢失或者被窃取,也不会造成任何影响。本方案认证时人脸识别认证是通过实时拍摄人脸照片上传,而不能通过选择图片上传,就算个人信息泄露,窃取者也无法认证成功,这大大提高了认证的安全性。

6.1.5 防暴力破解

若攻击者获取到存储在区块链中的用户信息UserInfo,并通过暴力破解的方式得到用户的身份证号和人脸特征值。 首先要尝试找到正确的公钥将UserInfo解密为HashInfo1-2 (假设公钥有m项选择需要遍历) ;接着尝试将HashInfo1-2拆解为HashInfo1和HashInfo2;最后, 暴力破解2个单项哈希加密的信息。但由于哈希加密算法不可逆的特点, 攻击者只能通过暴力破解等遍历的手段尝试找到2个单项HashInfo。因此, 其破解难度为n×n=n2(假设2个单项信息各有n项选择), 除此之外还要遍历m个公钥尝试解密。单因子认证暴力破解单项HashInfo和本方案破解UserInfo的难度对比见表1。

表1 单因子与多因子认证破解难度对比表

6.2 可扩展性分析

PBFT算法是基于状态机复制原理的, 采用C/S的请求响应模式, 无法动态地感知节点加入或离开网络, 当节点数目増加时需要重新启动系统, 重新开始计算、传输信息数据。一旦节点数目发生变化, 且未重新启动系统, 仍按照之前的节点数目进行运算, 将使得新加入的节点资源的浪费或为不存在节点占用一定的系统资源。LSPBFT算法在一定程度上解决了动态性的问题,LSPBFT算法将整个网络系统中的节点划分为三类,参与共识的节点只有验证节点和服务端节点,而PBFT算法全网所有节点都需要参与共识。客户端节点可以自由地进入或者退出系统,并不需要其他节点知道,并且不会影响整个系统的运行,但是正在参与共识的节点不可随意退出系统,若验证节点或者服务端节点要退出系统,系统会重新选出相应的节点代替。由此可见, 相对于PBFT算法, LSPBFT算法能够动态地感知节点加入或离开网络, 当节点数目増加时, 不需要重新启动系统, 不会出现新加入的节点资源的浪费或为不存在节点占用一定的系统资源的情况。

6.3 性能分析

当共识过程不存在拜占庭节点的情况下,LSPBFT 算法与PBFT 算法的共识时间对比如图6所示。从图中可以看出,两种算法的共识时间都会随着节点数量的增加而增加,且增加速度也越来越快。这是因为节点数量越多,则确认一笔请求所需发送的消息数量就越多,自然更耗时间。在节点数量较少的情况下,两种算法的共识完成时间相差不大,但当节点的数量逐渐增加,尤其是超过50 个节点以后,LSPBFT算法的共识时间相较 PBFT 算法显著减少。

图6 LSPBFT算法与PBFT算法共识时间对比(无拜占庭节点)

当共识过程存在拜占庭节点的情况下,LSPBFT 算法与PBFT 算法的共识时间对比如图7所示。尽管LSPBFT算法在共识过程存在拜占庭节点的情况下,先执行了第一阶段FCA算法,但是会迅速切换到第二阶段PBFT算法,并且参与共识的节点个数只有21个,并不想传统的PBFT算法需要全网所有节点参与,这也缩短了节点之间通信的时间,因此共识时间也会更快。

图7 LSPBFT算法与PBFT算法共识时间对比(有拜占庭节点)

相比于传统中心化的认证方案,只依靠中心服务器来验证用户的请求。图8为本方案与基于静态口令和基于PKI机制的认证在响应时间上的对比图。口令认证较为简单,常以“账号+密码”的形式认账,而PKI机制较为复杂,首先要获取CA证书,并且证书的发放与校验需要花费一定的时间。而本方案通过节点选择算法,将选出的认证节点来代替单一中心,并且选出的节点只会认证一个待验证的节点,这样大大减轻了中心服务器的认证负担,提高了认证的效率。

图8 平均响应时间对比

7 结语

随着分布式系统的不断增长,系统的安全性尤为重要。但仅仅依赖单一的集权中心来维护整个系统的运营和安全,这无疑会对其造成巨大的挑战,同时各种各样的问题也暴露出单一中心的缺陷和弊端。针对传统身份认证方式的不足,本文将区块链技术与密钥机制、口令认证和人脸识别技术相结合,提出了多因子结合的认证方案。既保留了集权中心的权威,同时通过节点选择算法减轻了集权中心的负担。在提高认证安全性的同时,本文提出的方法在庞大的分布式系统中也能提高认证的效率。

猜你喜欢

服务端拜占庭人脸识别
人脸识别的“国标”来了
中科视拓开放商业版本人脸识别算法
荣耀畅玩7C:人脸识别
多人联机对战游戏的设计与实现
基于三层结构下机房管理系统的实现分析
基于三层结构下机房管理系统的实现分析
第四次十字军东征前的东地中海世界
“人脸识别”人工智能测谎仪研发成功
拜占庭之光
君士坦丁堡的建立及其对东西方文化交流的影响