基于口令和智能卡的认证与密钥协商协议①
2022-01-06王鹏飞
洪 璇, 王鹏飞
(上海师范大学 信息与机电工程学院, 上海 201400)
随着社会科技手段的快速进步, 社会步入了通信发展时代, 秘密通话在大家的生活中尤为重要.身份验证和密钥协商协议作为通信安全的重要领域, 可以确保用户在不安全的信道上进行安全的信息验证和传输.它不仅是加密通信的重要组成部分, 而且还允许两个或更多使用者通过敌手控制的非加密通信安全通话,并产生出公共会话密钥以实现开放网络中的通信安全性.然而对应的, 我们依然无法忽视恶意攻击者的各种手段, 因此众多学者在认证密钥协商协议上进行探讨与改进, 为密钥协商协议的研究发展做出重大贡献[1].
文献[2]针对临时秘钥泄露问题, 设计出解决此问题的eCK方案模型, 并给出一套针对此攻击的Naxos方案.但是, eCK模型仅思考了协议将被哪些攻击手段攻击, 而没有思考协议的强前向安全性.顾兆军等人则是考虑了协议的前向安全性, 并将双线性对方法引入到协议中形成新的方案, 使得协议安全强度更高[3].文献[4]在基于困难问题的DDA协议下设计了新的可信匿名方案协议, 使得通信双反实现可匿名并且安全通信.曹阳等人在文献[5]中为了使得SIP协议的安全性进一步提升, 同样是基于椭圆曲线离散对数等困难操作下设计了新的AKA协议.黄朝阳更是于文献[6]中更加具体的将困难问题函数结合到公钥密码协议的认证过程里, 提升运算复杂程度来增加可靠性.曾继强等则是为了更高效地解决群组秘钥的生成, 基于三叉树方案提出了新的协议, 高效可靠地解决了群组会话通信问题[7].赵广强等人为了抵抗DDOS手段与薛峰等人协议方案中某一阶段存在的问题, 设计出基于双线性对计算的新方法, 使得协议更加安全可靠[8].
本文研究了匿名两方AKA协议, 发现其不能防御离线字典攻击, 于是将抗离线字典攻击安全属性引入设计的AKA协议同时, 还将椭圆曲线运算、双线性配对操作、D-H困难操作等与注册和认证方案过程结合,再将智能卡与口令的协议方案相结合, 可以有效使得协议运行的安全性显著提升, 并将加密的密码存在服务器的身份验证表中, 同时在认证过程进行调整, 使得方案可以实现双方互相认证.最后进行了安全性证明,在安全与轻量化计算过程方面更有优势.
1 背景知识
1.1 椭圆曲线间隙假设(ECCDH假设)
令Q是在有限域Fq上的椭圆曲线,q是基于秘密参数k的大素数, 在Q中一个阶为大素数x中 选取一个点p,并且通过p生成一个循环加法群G.其中G⊂Fq, 由此可以:
定义1.ECCDH假设(Elliptic Curve Computational Diffie-Hellman, ECCDH).假如有秘密参数k并且k足够大, 给定任何概率多项式时间算法A解决问题的优势函数为:
则称循环加法群G满足ECCDH假设, 其中, 等式左边表示算法A解决椭圆曲线问题的优势, ε (·)是可以忽略的函数,.
1.2 安全模型
协议参与者和初始化.我们在系统中设置了3种类型的实体: 使用者U,敌手A和服务器S,Set Authentication和密钥协议P,P和操作协议称为协议P.服务器跟使用者之间可以有很多实例.我们用表示用U的第i次协议实例,S的第j次实例用来标识.假如敌手A能够操控所有通信环境.他想要使U的认证阶段失败, 或是窃得S跟用户U的协商密钥, 这里使用敌手查询P的例子来反映敌手的能力.具体来说, 敌手可以如下查询协议实例:
Corrupt (U, password): 这里对密码遗失攻击进行模拟,A可以使用此查询来得到U的密码.
Corrupt (U, smartcard): 这里对智能卡遗失攻击进行模拟,A可以使用此查询来得到智能卡里存放的秘密消息.
定义2.假如A执行Test查询后得到的b′=b, 那么敌手取胜, 并设定A取胜的优势如下:
如果:
则称协议P为语义安全.其中,qsend表示敌手进行send询问的次数,表示口令空间的大小.
2 匿名PAKA协议安全性分析
Sun等人提出了基于SmartCard和密码的匿名PAKA协议, 该方案由于使智能卡的计算与存储成本大大降低, 因此在基于智能卡的AKA协议中被广泛应用, 该方案还指出其在智能卡遗失时攻击是没有威胁的[9].然而, 实验验证表明该方法在SmartCard遗失后没有办法防御离线字典的攻击, 也容易发生密码泄露和伪装.本文模拟敌手使用口令猜测攻击进行攻击验证:
如果敌手A已经得到U的SmartCard, 此时A便能够掌握卡中全部秘密消息{IM,GB}, 接着A便能够使用一种能够避开服务器检测的攻击手段来展开离线的密码猜测进攻.
S验证U的身份后选择
A: 敌手A截获信息 {GS,MS}, 在密码空间里随机选取一个U的潜在密码PW′.
如果敌手A验证正确, 说明他选的PW′即为用户的PW, 否则将其在原空间中删去并再次选取潜在密码开始验证, 这个过程持续到验证?=Ms为止.A完全可以脱机运行此操作, 所以可以避免服务器的检测与查验, 这样A就能得到U的密码.
3 改进工作
3.1 针对基于口令的AKA协议改进
为了提升协议的安全属性, 本文进行设计, 将椭圆曲线运算、单向散列函数、D-H困难操作等结合到协议的注册与认证过程, 并添加密码加密后存放到服务器的身份验证表中.协议分为两个部分: 注册阶段和认证阶段.
在注册阶段做出如下改进设计: 先由S选择一个大素数p(p>3)和常数a与b使得 4a3+27b2≠0modp,定义在上的椭圆曲线E:y2=x3+ax+b由一个无穷远点O和一个基于同余式y2=x3+ax+bmodp的解集构成, 设p是E上阶为素数q(q>2k)的基点, 使得在群G= 〈P〉上的离散对数问题是难解的.服务器选择私钥, 公钥US=ds·p, 选择适当的单向散列函数H(·):使协议的运算过程是难解的, 增加了协议的可靠性, 执行过程如图1.
图1 基于口令的新方案的注册阶段
在认证阶段做出如下改进设计: 用户A输入IDA、PWA, 选取随机数,利用随机数计算WA=rA·PWA·用kx作为对称加密算法的密钥, 对 (IDA,YA)加密, 得到M1=Ekx(IDA,YA),然后将信息 (IDA,WA,M1)发送给S.接收到使秘密信息之后,S使用私钥ds计算私钥ds计算接着用解密信息M1,得到服务器先检查等式是否相等, 即如果等式不相等,S将终止会话.反之服务器S选择一个随机数rs∈, 计算M2=+WS、M3=H(WS).其中WS=rsUs, 并将{M2+M3}发送给用户A.
得到信息M2后, 用户A计算=M2-RA, 并检查H()=M3是否相等, 如果不相等则终止通话, 若相等,A将M4=H′(RA,)发送给S.
S接收来自使用者的消息后, 第一步检查H()=M4是否相等, 假如不相等,S否定A的会话请求, 假如等式相等,S将通过使用者的会话请求.此时得到SK=rs·WA=rA·PWA·rS·dS·P, 然后认证完成.
3.2 针对基于智能卡的AKA协议改进
同样的, 针对智能卡丢失后不能防御敌手的离线密码猜测这一问题, 我们将身份认证和会话密钥相结合的双向认证方案改进到基于智能卡的协议方案中,给协议增加了抗离线字典攻击安全属性.协议分为两个部分: 注册阶段和认证阶段.
在注册阶段做出如下改进: 用户选择自己的标识IDi, 口令PWi并计算h(PWi), 使用可信通道发给S.
服务器计算h(IDi,x), 用h(PWi), 对h(IDi,x)加密,用私钥x对IDi加密, 结果分别为Eh(PWi)[h(IDi,x)]、Ex(ID2)计算Ai=h(h(ID)⊕h(PWi))modn.然后将信息写入智能卡.
最后S把SC通过可信通道交给用户, 如图2.
图2 基于智能卡的新方案的注册阶段
在认证阶段做出如下改进:服务器S收到信息{C1,Ex(IDi)}后, 首先用私钥x解密Ex(IDi)得到用户身份IDi并判断它的有效性, 如果有效则继续下面的操作.选择一个随机数xB, 计算,B1=h(IDs‖K‖0).将{B1,C2}发送给SC(智能卡),SC接收S的信息 {B1,C2}之后, 计算K′=,=h(IDS‖K′‖0).验证=B1, 若不成立, 那么对S的验证失败, 并结束通话, 否则计算B2=h(IDs‖K′‖0); 并把B2发给服务器, 服务器收到B2后, 计算=h(IDS‖K‖0),并验证=B2, 若不成立, 则结束通话, 否则对用户的信息验证便为通过并协商公共通信私钥为SK=h(IDs‖IDi‖k‖2)=h(IDs‖IDi‖h′‖2).认证完成.
4 基于智能卡和口令结合的AKA协议方案
在上面的协议基础上, 我们将智能卡与上面设计的匿名口令AKA协议注册过程相结合并在认证过程进行改进, 使得方案的安全可靠性进一步提升.协议包括两个阶段: 用户注册阶段和用户认证阶段.
4.1 注册阶段
由SC先选择一个大素数p(p>3)和常数a与b使得4a3+27b2≠0modp, 定义在上的椭圆曲线E:y2=x3+ax+b由一个无穷远点O和一个基于同余式y2=x3+ax+bmodp的解集构成, 设p是E上阶为素数q(q>2k)的基点, 使得在群G= 〈P〉上的离散对数问题是难解的.
用户A选择PWA当做密码口令.SC选取随机数b∈{0,1}1024使得PWA的熵值提升.并将秘密信息发送给S,S选择私钥ds∈, 公钥US=ds·p, 选择适当的单向散列函数H(·):{0,1}*→.
S: 利用私钥ds计算WA=h(ds,IDA)⊕(PWA,b), 将{IDA,WA}存入SC内发送给A.
A将随机数b和大素数p发送到SC.此时,SC中的信息为{IDA,b,p,WA}.
4.2 认证阶段
当A想要访问S,A和S之间开始相互认证.
A→Smart Card:{PWA,IDA}
Smart Card:VA=WA⊕h(PWA,b,p)=(ds,IDA,p)
Smart Card: 选随机数y∈,Y=gy,
Smart Card→S: {IDA,Y,K}//临时密钥为用户所选取的秘密值y
S: 验证IDA是否正确, 若正确执行下一步
S: 利用私钥ds计算=h(ds,IDA,p)
S验证K=是否成立, 若成立, 则继续
S:z∈,Z=gz
S:Auths=H2(Kx,Yz,IDA,Z)//S认证信息
S→A:{IDS,Z,Auths}
A: 验证A的秘密信息, 若通过, 则继续
Smart Card: 计算A与S会话密钥sk=H2(Xk,Zy,IDA,IDs,X,Y,K,Z)
Smart Card:AuthA=H2(Xk,Zy,IDs,Y)
Smart Card→S:{AuthA}
S: 验证Auths=H2(Kx,Yz,IDA,Z)
S: 验证AuthA=H2(Xk,Zy,IDs,Y)
S:sk=H2(kx,Yz,IDA,IDs,X,Y,K,Z)//所有认证通过, 计算出会话密钥如上sk, 认证完毕.
5 安全证明
定理1.在1.2节的模型下, 令Q是在有限域Fq上的椭圆曲线,q是基于秘密参数k的大素数,p为Q中大素数x的一个点并且生成循环加法群G.敌手使用的Execute 查询, R eveal 查询, S end 查询以及 O racle查询的次数分别用qexcute,qreveal,qsend,qoracle来标识, 假设G在ECCDH假设条件下满足条件, 那么该协议语义是安全的.如下:
如果他验证密码一直不成功, 但是却执行了一个满足条件需求的新查询, 此时他没有一条和正确密码有关的消息, 他选定的秘密信息Y,K也被唯一的确定下来, 则此时的成功率为.综上可得:
本次实例里, 敌手无法获得任何和密码相关的信息, 那么在执行Test时, 他可以正确预测模型硬币的概率是,B(b=0,b=1).因此包含所有实例事件结果的综合概率即为:
由此, 可以得出定理1正确, 协议可证明安全.
6 性能分析
由于安全性能的提升往往伴随着算法复杂度的提升, 这就意味着可能会牺牲小部分效率, 因此, 我们将本文所提方案与传统协议和最新的协议进行比较和性能分析.
我们以文献[9]作为传统协议的代表, 再以文献[3]作为最近的改进协议作为代表与本文方案进行对比,完成一次哈希运算的效时为Eh, 完成一次乘法运算与次方运算为Ep, 假设在相同等级系统中运行交换, 那么数据交换次数越多, 用时越长, 我们使用Ec来表示.并且已知椭圆曲线运算的效率约比双线性运算节约近二十倍.我们将运行效率结果通过表格展示.
由表1和表2可以看出, 本文方案在运行效率上明显略优于文献[3]和文献[9], 相比较而言文献[3]的数据交换次数略多, 并且从安全性上, 本文方案强度显然是高于文献[3]和文献[9].实际中, 我们将口令与智能卡相结合, 增加安全强度的同时, 用户的使用体验也会更加方便, 因此, 总体上我们的方案具有一定优势.
表1 效率对比
表2 性能对比
7 结束语
本文设计了一种基于口令的AKA协议方案.并利用单向hash函数和椭圆曲线上的D-H问题来保证系统的安全与可靠.针对基于SmartCard的AKA方案容易因为SmartCard被盗并无法防御离线密码猜测手段.给出了一个将通信密钥和身份验证相结合的双向认证方案, 最后对协议进行了安全性证明.该方案能防范多种攻击, 并且效率运行高、实际计算量较小、实际实用性强.下一步将致力于在保证安全可用的基础下提出效率更高的认证方法.