计算机系统应用  2021, Vol. 30 Issue (11): 298-303   PDF    
基于口令和智能卡的认证与密钥协商协议
洪璇, 王鹏飞     
上海师范大学 信息与机电工程学院, 上海 201400
摘要:因为身份验证的过程有概率会让使用者的秘密信息暴露, 导致恶意敌手可能会追踪到用户的秘密信息, 并对其进行不法利用产生危害和利益损失. 比如在基于SmartCard的匿名PAKA协议方案中, SmartCard遗失后便没有办法防御敌手的离线字典攻击. 因此, 将双线性配对操作、D-H困难和椭圆曲线运算等操作与注册和认证过程相结合, 分别基于口令和智能卡进行改进设计了新方案. 并将智能卡与改进的基于口令AKA方案相结合, 提出了基于智能卡和口令结合的AKA协议方案, 给了出安全性证明. 进一步提高了基于SmartCard和密码的PAKA协议的可靠安全性.
关键词: 密钥协商协议    身份验证和密钥    密码    智能卡    抗临时密钥泄漏    
Key Agreement Protocol Based on Password and Smart Card
HONG Xuan, WANG Peng-Fei     
College of Information, Mechanical and Electrical Engineering, Shanghai Normal University, Shanghai 201400, China
Abstract: Since there is a chance to expose the user’s secret information during authentication, malicious adversaries may trace the user’s secret information and make illegal use of it, causing harm and loss of interest. For example, in the anonymous PAKA protocol based on SmartCard, there is no way to defend against the offline dictionary attack from adversaries after the SmartCard is lost. Therefore, the bilinear pairing operation, D-H difficulty and elliptic curve operation are combined with the registration and authentication, and then a new scheme is improved and designed utilizing password and smart card respectively. On the basis of the combination of a smart card with the improved password-based AKA scheme, an AKA protocol scheme relying on both the smart card and password is proposed, with the security proof given. It further improves the reliability and security of the PAKA protocol based on SmartCard and password.
Key words: key agreement protocol     authentication and key     password     smart card     anti temporary key leakage    

随着社会科技手段的快速进步, 社会步入了通信发展时代, 秘密通话在大家的生活中尤为重要. 身份验证和密钥协商协议作为通信安全的重要领域, 可以确保用户在不安全的信道上进行安全的信息验证和传输. 它不仅是加密通信的重要组成部分, 而且还允许两个或更多使用者通过敌手控制的非加密通信安全通话, 并产生出公共会话密钥以实现开放网络中的通信安全性. 然而对应的, 我们依然无法忽视恶意攻击者的各种手段, 因此众多学者在认证密钥协商协议上进行探讨与改进, 为密钥协商协议的研究发展做出重大贡献[1].

文献[2]针对临时秘钥泄露问题, 设计出解决此问题的eCK方案模型, 并给出一套针对此攻击的Naxos方案. 但是, eCK模型仅思考了协议将被哪些攻击手段攻击, 而没有思考协议的强前向安全性. 顾兆军等人则是考虑了协议的前向安全性, 并将双线性对方法引入到协议中形成新的方案, 使得协议安全强度更高[3]. 文献[4]在基于困难问题的DDA协议下设计了新的可信匿名方案协议, 使得通信双反实现可匿名并且安全通信. 曹阳等人在文献[5]中为了使得SIP协议的安全性进一步提升, 同样是基于椭圆曲线离散对数等困难操作下设计了新的AKA协议. 黄朝阳更是于文献[6]中更加具体的将困难问题函数结合到公钥密码协议的认证过程里, 提升运算复杂程度来增加可靠性. 曾继强等则是为了更高效地解决群组秘钥的生成, 基于三叉树方案提出了新的协议, 高效可靠地解决了群组会话通信问题[7]. 赵广强等人为了抵抗DDOS手段与薛峰等人协议方案中某一阶段存在的问题, 设计出基于双线性对计算的新方法, 使得协议更加安全可靠[8].

本文研究了匿名两方AKA协议, 发现其不能防御离线字典攻击, 于是将抗离线字典攻击安全属性引入设计的AKA协议同时, 还将椭圆曲线运算、双线性配对操作、D-H困难操作等与注册和认证方案过程结合, 再将智能卡与口令的协议方案相结合, 可以有效使得协议运行的安全性显著提升, 并将加密的密码存在服务器的身份验证表中, 同时在认证过程进行调整, 使得方案可以实现双方互相认证. 最后进行了安全性证明, 在安全与轻量化计算过程方面更有优势.

1 背景知识 1.1 椭圆曲线间隙假设(ECCDH假设)

$Q$ 是在有限域 ${F_q}$ 上的椭圆曲线, $q$ 是基于秘密参数 $k$ 的大素数, 在 $Q$ 中一个阶为大素数 $x$ 中选取一个点 $p$ , 并且通过 $p$ 生成一个循环加法群 $G$ . 其中 $G \subset {F_q}$ , 由此可以:

定义1. ECCDH假设(Elliptic Curve Computational Diffie-Hellman, ECCDH). 假如有秘密参数 $k$ 并且 $k$ 足够大, 给定任何概率多项式时间算法A解决问题的优势函数为:

$Adv_Z^{\rm{ECCDH}}(A) = Pr\left[ {A(G,P,aP,bP) = abP} \right] \le \varepsilon (k)$ (1)

则称循环加法群G满足ECCDH假设, 其中, 等式左边表示算法A解决椭圆曲线问题的优势, $\varepsilon ( \cdot )$ 是可以忽略的函数, $(a,b) \in Z_q^ * $ .

1.2 安全模型

协议参与者和初始化. 我们在系统中设置了3种类型的实体: 使用者U,敌手A和服务器S, Set Authentication和密钥协议P, P和操作协议称为协议P. 服务器跟使用者之间可以有很多实例. 我们用 $\prod _U^i$ 表示用U的第 $i$ 次协议实例, S的第 $j$ 次实例用 $\prod _s^j$ 来标识. 假如敌手A能够操控所有通信环境. 他想要使U的认证阶段失败, 或是窃得S跟用户U的协商密钥, 这里使用敌手查询P的例子来反映敌手的能力. 具体来说, 敌手可以如下查询协议实例:

Execute $(\prod _U^i,\prod _s^j)$ 里对A的被动攻击进行模拟, 实例 $\prod _U^i$ $\prod _s^j$ 的详细会话进度将被A全部监听到. 并且返回信息为P的一次实例的所有会话信息.

Send $(\prod _U^i,\prod _s^j,m)$ : 这里对A的主动攻击进行模拟, A会给实例 $\prod _U^i$ 或者 $\prod _s^j$ 传输一个已经修改过的信息m, 然后把P的运行结果输出给A.

Corrupt (U, password): 这里对密码遗失攻击进行模拟, A可以使用此查询来得到U的密码.

Corrupt (U, smartcard): 这里对智能卡遗失攻击进行模拟, A可以使用此查询来得到智能卡里存放的秘密消息.

Reveal $(\prod _U^i,\prod _s^j)$ : 这种查询模拟实例 $\prod _U^i$ $\prod _s^j$ 会话密钥泄漏, 会输出询问实例的秘钥sk. 如果实例返回结果不是 $(accept)$ , 那么终止. 执行了本查询的实例状态是打开的 $ (opened)$ .

Test $(\prod _U^i,\prod _s^j)$ : 这里的目的是测试出A可以掌握多少从实例中得到秘钥信息, 也就是来表达出我们会话密钥过程的安全性. 不管A执行多少次上面的查询, 最后都要执行这个查询过程. 并且最终结果如下: 假如测试过程并没有得到会话密钥, 那么结束本次查询; 否则, 开始掷硬币, 如果是数字面, 设置B=1, 并输出实际的会话密钥; 否则为国徽面, 设置B=0, 并输出从键空间里一个随机拿出的随机数. 此时A可以继续上诉来确认本次查询得到的数是真还是假. 需要补充的是此查询只可以在新对话中执行而且仅可以执行一次.

定义2. 假如A执行Test查询后得到的 ${b'} = b$ , 那么敌手取胜, 并设定A取胜的优势如下:

$Adv_{p,d}^{ake}(A) = 2 \cdot pr\left[ {b = b'} \right] - 1$ (2)

如果:

$Adv_{p,d}^{ake}(A) = o({q_{{\text{send}}}})/|{D_{pw}}|$ (3)

则称协议P为语义安全. 其中, ${q_{{\text{send}}}}$ 表示敌手进行send询问的次数, $\left| {{D_{pw}}} \right|$ 表示口令空间的大小.

2 匿名PAKA协议安全性分析

Sun等人提出了基于SmartCard和密码的匿名PAKA协议, 该方案由于使智能卡的计算与存储成本大大降低, 因此在基于智能卡的AKA协议中被广泛应用, 该方案还指出其在智能卡遗失时攻击是没有威胁的[9]. 然而, 实验验证表明该方法在SmartCard遗失后没有办法防御离线字典的攻击, 也容易发生密码泄露和伪装. 本文模拟敌手使用口令猜测攻击进行攻击验证:

如果敌手A已经得到U的SmartCard, 此时A便能够掌握卡中全部秘密消息 $\left\{ {IM,{G_B}} \right\}$ , 接着A便能够使用一种能够避开服务器检测的攻击手段来展开离线的密码猜测进攻.

$A:{r^B} \in \left[ {1,n} \right],{G_B} = {r_B} \cdot G$
$A \to S:\left\{ {IM,{G_B}} \right\}$

S验证U的身份后选择 ${G_S} = {r_s} \times G$

$S:{K_{SU}} = {h_1}(h(I{D_U}\left\| {{K_S}} \right.)\left\| {{r_s} \times {G_B}} \right.)$
$S:{M_S} = {h_2}({K_{SU}}\left\| {{G_B}} \right.\left\| {{G_S}} \right.)$
$S \to U:\left\{ {{G_S},{M_S}} \right\}$

A: 敌手A截获信息 $\left\{ {{G_S},{M_S}} \right\}$ , 在密码空间里随机选取一个U的潜在密码 $PW'$ .

$ \begin{array}{l}A:{V}^{\prime }=V\oplus h(PW)| \text{, } {K}_{su}={h}_{1}({V}^{\prime }\Vert {r}_{B}\times {G}_{S})\\ {{K}^{\prime }}_{su}={h}_{1}({V}^{\prime }{\Vert {r}_{B}\times G}_{S}) \text{, } {{M}^{\prime }}_{s}={h}_{2}({K}_{su}\Vert {G}_{B}\Vert {G}_{S})\end{array}$
$A:{M'_s}? = {M_s}$

如果敌手A验证正确, 说明他选的 $PW'$ 即为用户的 $PW$ , 否则将其在原空间中删去并再次选取潜在密码开始验证, 这个过程持续到验证 ${M'_s}? = {M_s}$ 为止. A完全可以脱机运行此操作, 所以可以避免服务器的检测与查验, 这样A就能得到U的密码.

3 改进工作 3.1 针对基于口令的AKA协议改进

为了提升协议的安全属性, 本文进行设计, 将椭圆曲线运算、单向散列函数、D-H困难操作等结合到协议的注册与认证过程, 并添加密码加密后存放到服务器的身份验证表中. 协议分为两个部分: 注册阶段和认证阶段.

在注册阶段做出如下改进设计: 先由S选择一个大素数 ${{p}} \; (p > 3)$ 和常数ab使得 $4{a^3} + 27{b^2} \ne 0\boldsymbolod p$ , 定义在 ${{Z}}_P^ * $ 上的椭圆曲线 $E:{y^2} = {x^3} + ax + b$ 由一个无穷远点O和一个基于同余式 ${y^2} = {x^3} + ax + b\boldsymbolod p$ 的解集构成, 设pE上阶为素数q (q>2k)的基点, 使得在群 $G = \left\langle P \right\rangle $ 上的离散对数问题是难解的. 服务器选择私钥 ${d_s} \in Z_p^ * $ , 公钥 ${U_S} = {d_s} \cdot p$ , 选择适当的单向散列函数 $H( \cdot ): $ $ {\{ 0,1\} ^ * } \to Z_p^ * $ . 使协议的运算过程是难解的, 增加了协议的可靠性, 执行过程如图1.

图 1 基于口令的新方案的注册阶段

在认证阶段做出如下改进设计: 用户A输入 $ I{D}_{A}{\text{、}} $ $ P{W}_{A}$ , 选取随机数 ${r_A} \in Z_p^ * $ , 利用随机数计算 ${W_A} = {r_A} \cdot P{W_A} \cdot $ $ {U_S}$ ${R_A} = {r_A} \cdot {U_A} = \left( {{k_x},{k_y}} \right)$ ${Y_A} = {r_A} \cdot p$ . 用 ${k_x}$ 作为对称加密算法的密钥, 对 $(I{D_A},{Y_A})$ 加密, 得到 ${M_1} = {E_{{k_x}}}(I{D_A},{Y_A})$ , 然后将信息 $(I{D_A},{W_A},{M_1})$ 发送给S. 接收到使秘密信息之后, S使用私钥ds计算私钥ds计算 ${R'_{A\_x001D}} = {W_A} \cdot {d_s}^{ - 1} = $ $ ({k'_x},{k'_y})$ , 接着用 ${k'_x}$ 解密信息M1,得到 $I{D'_A}$ ${Y'_A}$ , 服务器先检查等式是否相等, 即 $I{D'_A} = I{D_A}$ $e({Y'_A},{U_A}) = e({R'_A},P)$ , 如果等式不相等, S将终止会话. 反之服务器S选择一个随机数 ${r_s} \in Z_P^ * $ , 计算 $ {M}_{2}={{R}^{\prime }}_{A}+{W}_{S}{\text{、}}{M}_{3}=H({W}_{S})$ . 其中 ${W_S} = {r_s}{U_s}$ , 并将 $\left\{ {{M_2} + {M_3}} \right\}$ 发送给用户A.

得到信息M2后, 用户A计算 ${W'_S} = {M_2} - {R_A}$ , 并检查 $H({W'_S}) = {M_3}$ 是否相等, 如果不相等则终止通话, 若相等, A ${M_4} = H'({R_A},{W'_S})$ 发送给S.

S接收来自使用者的消息后, 第一步检查 $H({W'_S}) = $ $ {M_4}$ 是否相等, 假如不相等, S否定A的会话请求, 假如等式相等, S将通过使用者的会话请求. 此时得到 $SK = $ $ {r_s} \cdot {W_A} = {r_A} \cdot P{W_A} \cdot {r_S} \cdot {d_S} \cdot P$ , 然后认证完成.

3.2 针对基于智能卡的AKA协议改进

同样的, 针对智能卡丢失后不能防御敌手的离线密码猜测这一问题, 我们将身份认证和会话密钥相结合的双向认证方案改进到基于智能卡的协议方案中, 给协议增加了抗离线字典攻击安全属性. 协议分为两个部分: 注册阶段和认证阶段.

在注册阶段做出如下改进: 用户选择自己的标识 $I{D_i}$ , 口令 $P{W_i}$ 并计算 $h(P{W_i})$ , 使用可信通道发给S.

服务器计算 $h(I{D_i},x)$ , 用 $h(P{W_i})$ , 对 $h(I{D_i},x)$ 加密, 用私钥x $I{D_i}$ 加密, 结果分别为 ${E_{h(P{W_i})}}\left[ {h(I{D_i},x)} \right]$ ${E_x}(I{D_2})$ 计算 ${A_i} = h(h(ID) \oplus h(P{W_i}))\boldsymbolod n$ . 然后将信息 $ \left\{{E}_{x}(I{D}_{i}),{A}_{i},{E}_{h(p{w}_{i})}\left[h(I{D}_{i},x),h(\cdot),n\right]\right\}$ 写入智能卡.

最后SSC通过可信通道交给用户, 如图2.

图 2 基于智能卡的新方案的注册阶段

在认证阶段做出如下改进:服务器S收到信息 $\left\{ {{C_1},{E_x}(I{D_i})} \right\}$ 后, 首先用私钥x解密 ${E_x}(I{D_i})$ 得到用户身份 $I{D_i}$ 并判断它的有效性, 如果有效则继续下面的操作. 选择一个随机数 ${x_B}$ , 计算 ${C_2} = h{(I{D_i},x)^{{x_B}}}$ , $k = h{(I{D_i},x)^{x_A^{{x_B}}}} = $ $ {C_1}^{{X_B}}$ , ${B_1} = h(I{D_s}\left\| {K\left\| 0 \right.} \right.)$ . 将 $\left\{ {{B_1},{C_2}} \right\}$ 发送给SC(智能卡), SC接收S的信息 $\left\{ {{B_1},{C_2}} \right\}$ 之后, 计算 $K' = C_2^{{x_A}}$ , $B_1^ * = $ $ h(I{D_S}\left\| {K'\left\| 0 \right.} \right.)$ . 验证 $B_1^ * = {B_1}$ , 若不成立, 那么对S的验证失败, 并结束通话, 否则计算 ${B_2} = h(I{D_s}\left\| {K'\left\| 0 \right.} \right.)$ ; 并把 ${B_2}$ 发给服务器, 服务器收到 ${B_2}$ 后, 计算 $B_2^ * = h(I{D_S}\left\| {K\left\| 0 \right.} \right.)$ , 并验证 $B_2^ * = {B_2}$ , 若不成立, 则结束通话, 否则对用户的信息验证便为通过并协商公共通信私钥为 $SK = $ $ h(I{D_s}\left\| {I{D_i}\left\| {k\left\| {2) = h(I{D_s}\left\| {I{D_i}\left\| {h'\left\| 2 \right.} \right.} \right.)} \right.} \right.} \right.$ . 认证完成.

4 基于智能卡和口令结合的AKA协议方案

在上面的协议基础上, 我们将智能卡与上面设计的匿名口令AKA协议注册过程相结合并在认证过程进行改进, 使得方案的安全可靠性进一步提升. 协议包括两个阶段: 用户注册阶段和用户认证阶段.

4.1 注册阶段

SC先选择一个大素数 ${{p}} \; (p > 3)$ 和常数ab使得 $4{a^3} + 27{b^2} \ne 0\boldsymbolod p$ , 定义在 ${{Z}}_P^ *$ 上的椭圆曲线 $E:{y^2} = $ $ {x^3} + ax + b$ 由一个无穷远点O和一个基于同余式 ${y^2} = {x^3} + $ $ ax + b\boldsymbolod p$ 的解集构成, 设pE上阶为素数q(q>2k)的基点, 使得在群 $G = \left\langle P \right\rangle $ 上的离散对数问题是难解的.

用户A选择 $P{W_A}$ 当做密码口令. SC选取随机数 $b \in {\{ 0,1\} ^{1024}}$ 使得 $P{W_A}$ 的熵值提升. 并将秘密信息发送给S, S选择私钥 ${d_s} \in Z_p^ * $ , 公钥 ${U_S} = {d_s} \cdot p$ , 选择适当的单向散列函数 $H( \cdot ):{\{ 0,1\} ^ * } \to Z_p^ * $ .

$A :h(P{W_A},b)$

${{A}} \to {{S}}:{\rm{\{ }}h(P{W_A},b),I{D_A}{\rm{,}}h(p){\rm{\} }}$

S: ${U_S} = {d_{\rm{s}}} \cdot P$ , $I{D_A} = \left. {I{D_A}} \right\|{U_S}$

S: 利用私钥 ${d_s}$ 计算 ${W_A} = h({d_s},I{D_A}) \oplus (P{W_A},b)$ , 将 $\left\{ {I{D_A},{W_A}} \right\}$ 存入SC内发送给A.

A将随机数b和大素数p发送到SC. 此时, SC中的信息为 $\{ I{D_A},b,p,{W_A}\} $ .

4.2 认证阶段

A想要访问S, AS之间开始相互认证.

A→Smart Card: $\left\{ {P{W_A},I{D_A}} \right\}$

Smart Card: ${V_A} = {W_A} \oplus h(P{W_A},b,p) = ({d_s},I{D_A},p)$

Smart Card: 选随机数 $y \in Z_p^ * $ , $Y = {g^y}$ ,

$k = {H_1}({X^y},{V_A}),K = {g^k}$

Smart Card→S: $\left\{ {I{D_A},Y,K} \right\}$ //临时密钥为用户所选取的秘密值 y

S: 验证 $I{D_A}$ 是否正确, 若正确执行下一步

S: 利用私钥 ${d_s}$ 计算 ${V'_A} = h({d_s},I{D_A},p)$

S验证 $K = {g^{{H_1}({X^y},{{V'}_A})}}$ 是否成立, 若成立, 则继续

S: ${\textit{z}} \in Z_p^ * $ , $Z = {g^{\textit{z}}}$

S: $Aut{h_s} = {H_2}({K^x},{Y^{\textit{z}}},I{D_A},Z)$ //S认证信息

SA: ${\rm{\{ }}I{D_S},Z,Aut{h_s}{\rm{\} }}$

A: 验证A的秘密信息, 若通过, 则继续

Smart Card: 计算AS会话密钥 $sk = {H_2} ({X^k}, {Z^y}, $ $ I{D_A},I{D_s},X,Y,K,Z)$

Smart Card: $Aut{h_A} = {H_2}({X^{{k}}},{Z^y},I{D_s},Y)$

Smart Card→S: $\left\{ {Aut{h_A}} \right\}$

S: 验证 $Aut{h_s} = {H_2}({K^x},{Y^{\textit{z}}},I{D_A},Z)$

S: 验证 $Aut{h_A} = {H_2}({X^{{k}}},{Z^y},I{D_s},Y)$

S: $sk = {H_2}({k^x},{Y^{\textit{z}}},I{D_A},I{D_s},X,Y,K,Z)$ //所有认证通过, 计算出会话密钥如上 $sk$ , 认证完毕.

5 安全证明

定理1. 在1.2节的模型下, 令 ${{Q}}$ 是在有限域Fq上的椭圆曲线, $q$ 是基于秘密参数 $k$ 的大素数, $p$ Q中大素数 $x$ 的一个点并且生成循环加法群G. 敌手使用的 $\rm{Execute}$ 查询, $\rm{Reveal}$ 查询, $\rm{Send}$ 查询以及 $\rm{Oracle}$ 查询的次数分别用 ${q_{{\rm{excute}}}},{q_{\rm{reveal}}},{q_{{\rm{send}}}},{q_{\rm{oracle}}}$ 来标识, 假设 ${{G}}$ 在ECCDH假设条件下满足条件, 那么该协议语义是安全的. 如下:

$\begin{split} & Adv_{{{g}},G}^{ake}(A) \le 2({q_{{\text{send}}}} + {q_{{\text{execute}}}})Adv_{{{g}},G}^{hddh} \\ & + 4\left( {\frac{{2{q_{{\text{send}}}} + {q_{{\text{execute}}}}}}{q}} \right) \\ & + 2\left( {\frac{{{q_{{\text{send}}}}}}{{\left| {{D_{pw}}} \right|}}} \right) + \frac{{q_{{\text{oracle}}}^2 + q_{{\text{send}}}^2 + q_{{\text{execute}}}^2}}{{(q - 1)}} \\ & + 2\min\{ ({q_{{\text{send}}}} + {q_{{\text{execute}}}}),{q_{{\text{reveal}}}}\} Adv_{{{g}},G}^{hddh} \end{split} $ (4)

证明. 在进行数次循环实例实验后( ${\prod }_{{P}}^{0}, {\prod }_{{P}}^{1}, {\prod }_{{P}}^{2},\mathrm{\cdots}$ ), 实例按照协议运行并且返回敌手的查询, 敌手A在多次修改查询方式情况下使用pr[Si]来代表敌手在某次实例中的概率.

$\prod _P^i(i = 0)$ : 本次实例攻击, 假设敌手成功, 那么 ${{\textit{S}}_0}$ 代表敌手在Test查询中成功使得硬币返回为B=1, 则可以得到:

$Adv_{{{g}},{{G}}}^{ake}(A) = 2 \cdot pr\left[ {b = b'} \right] - 1$ (5)

$ {\prod }_{P}^{i}(i=1)$ : 本次实例攻击, 敌手使用随机数代替认证中的消息Y, 则可以在ECCDH下得到:

$\left| {pr[{{\textit{S}}_1}] - pr[{{\textit{S}}_0}]} \right| \le {q_{{\text{execute}}}}Adv_{g,G}^{ake}(A)$ (6)

$\prod _P^i(i = 2)$ : 本次实例攻击, 敌手使用随机数代替服务器向用户认证中的消息Z, 执行Execute查询, 可以得到:

$ \left|pr[{\textit{S}}_{2}]-pr[{\textit{S}}_{1}]\right|\le 1/2\left( {\frac{{{q}}_{{\text{execute}}}^{2}+{{q}}_{{\text{oracle}}}^{2}}{q-1}} \right)$ (7)

$\prod _P^i\left( {i = 3} \right)$ : 本次实例攻击, 敌手使用Send $(\prod _{\rm{P}}^i,null)$ 查询, 随机选择Y并在ECCDH下混合证明得到:

$\left| {pr[{{\textit{S}}_3}] - pr[{{\textit{S}}_2}]} \right| \le {q_{{\rm{send}}}}Adv_{g,G}^{{{hddh}}}(A)$ (8)

$ {\prod }_{P}^{i}(i=4)$ : 本次实例攻击, 假设敌手验证失败, 那么执行(i=3)时的实例, 否则便假设敌手已经验证成功, 使用Send( $ {{S}}^{{j}}, {{ID}}_{i}\Vert Y\Vert K$ )查询验证成功. 至此, 如果敌手一直重复攻击查询, 那么他获得的消息数目最多为 ${{{q}}_{{\text{execute}}}} + {{{q}}_{{\text{send}}}}$ , 那么他成功的概率则是 $\dfrac{{{{{q}}_{{\text{execute}}}} + {{{q}}_{{\text{send}}}}}}{{{q}}}$ . 如果敌手口令验证正确, 并且使用了 ${Corrupt }({U,2})$ 查询, 并且所有消息都与正确口令无关, 则他的成功率即为 $\dfrac{{{{{q}}_{\rm{send}}}}}{{\left| {{D_{pw}}} \right|}}$ .

如果他验证密码一直不成功, 但是却执行了一个满足条件需求的新查询, 此时他没有一条和正确密码有关的消息, 他选定的秘密信息Y,K也被唯一的确定下来, 则此时的成功率为 $\dfrac{{{{{q}}_{{\text{send}}}}}}{{{q}}}$ . 综上可得:

$\left| {pr[{{\textit{S}}_4}] - pr[{{\textit{S}}_3}]} \right| \le \frac{{{q_{{\text{send}}}}}}{{\left| {{D_{pw}}} \right|}} + \frac{{2{q_{{\text{send}}}} + {q_{{\text{execute}}}}}}{q}$ (9)

$\prod _P^i(i = 5)$ :本次实例攻击, 敌手使用生日攻击, 随机选择秘密信息Z, 执行Send( ${{S}}^{{j}}, {{ID}}_{i}\Vert Y\Vert K$ )得到:

$\left| {pr[{{\textit{S}}_5}] - pr[{{\textit{S}}_4}]} \right| \le \frac{1}{2} \cdot \frac{{q_{{\rm{oracle}}}^2 + q_{{\rm{send}}}^2}}{{q - 1}}$ (10)

$\prod _P^i(i = 6)$ : 本次实例攻击, 假设在上次实例中敌手没有猜中口令, 即排除概率 $\dfrac{{{{{q}}_{{\text{send}}}}}}{{\left| {{D_{pw}}} \right|}}$ 事件, 本次使用随机数代替会话秘钥并使用Reveal操作, 假如执行Execute和Send后不使用Reveal, 那么就与i=5实例中获得信息相同, 则综合可以得到:

$\left| {pr[{{\textit{S}}_6}] - pr[{{\textit{S}}_5}]} \right| \le \\ \min\{ ({q_{{\text{send}}}} + {q_{{\text{execute}}}}),{q_{{\text{reveal}}}}\} Adv_{{{g}},G}^{hddh}$ (11)

本次实例里, 敌手无法获得任何和密码相关的信息, 那么在执行Test时, 他可以正确预测模型硬币的概率是 $\dfrac{1}{2}$ , B(b=0, b=1). 因此包含所有实例事件结果的综合概率即为:

$\begin{split} & Adv_{{{g}},G}^{ake}(A) \le 2({q_{{\text{send}}}} + {q_{{\text{execute}}}})Adv_{{\rm{g}},G}^{hddh} \\ & + 4\left( {\frac{{2{q_{{\text{send}}}} + {q_{{\text{execute}}}}}}{q}} \right) \\ & + 2\left( {\frac{{{q_{{\text{send}}}}}}{{\left| {{D_{pw}}} \right|}}} \right) +\frac{{q_{{\text{oracle}}}^2 + q_{{\text{send}}}^2 + q_{{\text{execute}}}^2}}{{(q - 1)}} \\ & + 2\min\{ ({q_{{\text{send}}}} + {q_{{\text{execute}}}}),{q_{{\text{reveal}}}}\} Adv_{{{g}},G}^{hddh} \end{split} $ (12)

由此, 可以得出定理1正确, 协议可证明安全.

6 性能分析

由于安全性能的提升往往伴随着算法复杂度的提升, 这就意味着可能会牺牲小部分效率, 因此, 我们将本文所提方案与传统协议和最新的协议进行比较和性能分析.

我们以文献[9]作为传统协议的代表, 再以文献[3]作为最近的改进协议作为代表与本文方案进行对比, 完成一次哈希运算的效时为 ${E_h}$ , 完成一次乘法运算与次方运算为 ${E_p}$ , 假设在相同等级系统中运行交换, 那么数据交换次数越多, 用时越长, 我们使用 ${E_c}$ 来表示. 并且已知椭圆曲线运算的效率约比双线性运算节约近二十倍. 我们将运行效率结果通过表格展示.

表1表2可以看出, 本文方案在运行效率上明显略优于文献[3]和文献[9], 相比较而言文献[3]的数据交换次数略多, 并且从安全性上, 本文方案强度显然是高于文献[3]和文献[9]. 实际中, 我们将口令与智能卡相结合, 增加安全强度的同时, 用户的使用体验也会更加方便, 因此, 总体上我们的方案具有一定优势.

表 1 效率对比

表 2 性能对比

7 结束语

本文设计了一种基于口令的AKA协议方案. 并利用单向hash函数和椭圆曲线上的D-H问题来保证系统的安全与可靠. 针对基于SmartCard的AKA方案容易因为SmartCard被盗并无法防御离线密码猜测手段. 给出了一个将通信密钥和身份验证相结合的双向认证方案, 最后对协议进行了安全性证明. 该方案能防范多种攻击, 并且效率运行高、实际计算量较小、实际实用性强. 下一步将致力于在保证安全可用的基础下提出效率更高的认证方法.

参考文献
[1]
胡志言, 杜学绘, 曹利峰. 会话密钥协商协议研究进展. 计算机应用与软件, 2018, 35(5): 1-9, 72. DOI:10.3969/j.issn.1000-386x.2018.05.001
[2]
LaMacchia B, Lauter K, Mityagin A. Stronger security of authenticated key exchange. Proceedings of the 1st International Conference on Provable Security. Wollongong: Springer-Verlag, 2007. 1–16.
[3]
顾兆军, 刘东楠. 基于身份的无证书双线性对密钥协商方案. 中国民航大学学报, 2019, 37(1): 55-59.
[4]
关晨至, 石永革. 基于DAA的可信双向匿名认证密钥协商协议. 计算机系统应用, 2009, 18(12): 59-61. DOI:10.3969/j.issn.1003-3254.2009.12.014
[5]
曹阳. 基于ECDLP的SIP认证密钥协商协议. 计算机系统应用, 2016, 25(3): 225-228.
[6]
黄朝阳. 无双线性对双向认证密钥协商协议. 计算机系统应用, 2016, 25(7): 192-195. DOI:10.15888/j.cnki.csa.005157
[7]
曾继强, 史国振. 基于ECC的三叉树群组密钥协商方案. 计算机应用与软件, 2018, 35(9): 311-316. DOI:10.3969/j.issn.1000-386x.2018.09.055
[8]
赵广强, 凌捷. 两个基于智能卡口令认证方案的改进. 计算机应用与软件, 2015, 32(5): 278-282. DOI:10.3969/j.issn.1000-386x.2015.05.068
[9]
Sun DZ, Huai JP, Sun JZ, et al. Improvements of Juang’s password-authenticated key agreement scheme using smart cards. IEEE Transactions on Industrial Electronics, 2009, 56(6): 2284-2291. DOI:10.1109/TIE.2009.2016508