随着互联网和无线通信技术的快速发展, 用户对网络服务的需求也不断增长. 然而, 开放的互联网环境存在着巨大的安全隐患, 敌手通过篡改、窃听、重放等可以获取用户的个人信息. 因此, 身份认证和密钥协商对于安全通信至关重要. 传统的认证协议大多基于单服务器架构, 用户需要注册每个服务器并记住多个身份凭证, 这种方式效率低, 容易造成用户身份信息的泄露. 为解决这个问题, 研究者们提出了基于多服务器架构的认证协议. 在多服务器环境下, 用户仅需在注册中心注册一次, 就可以访问所有应用服务器. 但多服务器系统也会带来新的问题, 用户面临的攻击不仅有来自外部的, 还有来自内部的攻击. 因此, 在多服务器环境下设计一个安全高效的认证协议具有重大意义.
2001年, Li等人[1]首次提出一种基于神经网络的多服务器认证方案, 该方案计算量大, 存储成本高, 且不提供口令更新功能. 接着, Lin等人[2], Juang等人[3], Chang和Lee[4], Tsai[5]提出了他们自己的多服务器认证方案. 然而, 这些方案在登录阶段用户使用的ID是静态的, 无法实现用户身份的不可追踪性. 2009年, Liao和Wang [6]提出了一种基于哈希函数和动态ID的认证方案, 实现了用户的匿名性, 但容易遭受服务器欺骗攻击, 内部攻击和伪装攻击. 为解决这一问题, Hsiang和Shih[7]提出了一个改进方案. 很快Sood等人[8]和Lee等人[9]指出Hsiang和Shih的方案无法抵抗口令猜测攻击和重放攻击. 随后, 针对不同的应用环境, 提出了几种轻量级的认证协议[10-15], 这些协议中仅涉及哈希和对称加密运算, 计算成本低, 但不能提供一些重要的安全属性, 如前向安全性和双因素安全性. 为了提高安全性, 公钥密码被广泛用于多服务器架构下认证协议的设计. 2013年, Wang和Ma[16]提出一种基于椭圆曲线离散对数问题的认证协议, 但该协议无法抵抗服务器欺骗攻击和离线口令猜测攻击[17]. Truong等人[18]提出一种新方案, 该方案由注册中心选择一个随机数作为用户的口令. 然而, 该方案不能抵抗离线口令猜测攻击和假冒攻击. Kumari和Om[19]利用RSA签名设计了一个认证方案. Irshad等人[20]提出了一种基于椭圆曲线密码和对称加密的认证方案, 并使用GNY逻辑进行形式化安全分析. 随后, Ying和Nayak [21]提出了一种基于5G网络的椭圆曲线密码认证协议. 但Haq等人[22]发现该协议不能真正实现用户身份的不可追踪性, 提出了一个改进方案, 改进方案在认证和密钥协商阶段中, 参与者不传输任何静态参数.
最近, Andola等人[23]提出了一种基于智能卡和动态身份的匿名认证方案, 宣称所提出的方案可以抵抗各类已知的攻击. 然而, 经过分析发现该方案容易遭受离线口令猜测攻击, 服务器欺骗攻击, 同时无法实现用户匿名性以及前向安全性. 为解决上述问题, 本文设计了一个基于椭圆曲线密码的认证密钥协商协议.
给定两个大素数$ p $和$ q $, $ F_p $是一个有限域, $ E $是定义在$ F_p $上的椭圆曲线, $ G $是$ E $上的$ q $阶子群. 那么, 我们可以给出椭圆曲线上的两个困难问题[24]:
(1) 椭圆曲线离散对数问题(Elliptic curve discrete logarithm problem, ECDLP): 给定两个点$ P\in G $, $ Q\in G $, 求整数$ a\in Z_q^* $, 使得$ Q=aP $ 成立.
(2) 椭圆曲线计算性Diffie–Hellman问题(Elliptic curve computational Diffie–Hellman problem, ECDHP): 给定$ P\in G $, $ aP\in G $, $ bP\in G $ ($ a, b\in Z_q^* $是随机数), 计算$ abP \in G $.
在基于智能卡和口令的认证协议中, 为实现口令本地自由更新, 通常需要在智能卡中存储有关口令的安全参数, 来检测用户输入口令是否正确. 然而, 这种方法带来了新的安全问题, 如果智能卡丢失, 协议容易遭受离线口令猜测攻击. 为解决这一问题, 可以采用模糊验证器(fuzzy-verifier)[25].
假设$ A_i $是口令验证参数, 将$ A_i $修改为$ A_i \ mod \ n $, 其中$ 2^4 \leq n \leq 2^8 $. 如果敌手想要从$ A_i $中猜测口令, 将会得到$ \dfrac{{\lvert {\mathscr D}_{ID} \rvert}*{\lvert {\mathscr D}_{PW} \rvert}}{n} $个可能的$ ({ID}_i^*, {PW}_i^*) $, 他们都满足$ A_i^*=A_i $, 其中$ \lvert {\mathscr D}_{ID} \rvert $, $ \lvert {\mathscr D}_{PW} \rvert $分别表示用户身份和口令的空间规模. 因此, 敌手无法确定真正的$ ({ID}_i, {PW}_i) $, 可以有效抵抗离线口令猜测攻击.
Andola等人[23]的协议涉及三个参与方: 注册中心$ RC $, 服务器$ S_j $和用户$ U_i $. $ RC $选取系统主密钥$ x $和秘密参数$ y $, 计算$ h(y) $, $ h(x||y) $, 然后将这两个参数通过安全信道发送给$ S_j $, $ S_j $ 将其秘密保存.
协议由4个阶段组成: 注册阶段, 登录阶段, 认证阶段和口令更新阶段. 具体步骤如下:
用户$ U_i $通过安全信道向注册中心$ RC $申请注册, 过程如下:
步骤1. 用户$ U_i $选择身份$ {ID}_i $, 口令$ {PW}_i $, 以及随机数$ b $. 计算$ {RPW}_i=h(b\oplus{PW}_i) $, 然后将消息$ \{{ID}_i, {RPW}_i\} $通过安全信道发送给$ RC $.
步骤2. 注册中心$ RC $收到消息后, 选择一个随机数$ Z_i $, 计算$ A_i=h(x||{ID}_i) $, $ B_i=Z_i\oplus{ID}_i\oplus{RPW}_i $, $ C_i=h({RPW}_i||{ID}_i||Z_i)\oplus B_i $, $ E_i=h(h(x||y)||A_i)\oplus Z_i. $ 将$ \{A_i, B_i, C_i, E_i, h(y), h(\cdot)\} $写入智能卡$ {SC}_i $中, 并将$ {SC}_i $通过安全信道发送给$ U_i $.
步骤3. $ U_i $将$ b $存储到智能卡中.
登录阶段分为如下3个步骤:
步骤1. 当用户$ U_i $登录服务器$ S_j $时, 将智能卡$ {SC}_i $插入读卡机并输入$ {ID}_i $, $ {PW}_i $, 以及$ S_j $的身份$ {SID}_j $.
步骤2. $ {SC}_i $计算$ Z_i={ID}_i\oplus h(b\oplus {PW}_i)\oplus B_i $, $ C_i^{\prime}=h(h(b\oplus {PW}_i)||{ID}_i||Z_i)\oplus B_i $, 然后判断$ C_i^{\prime}\overset {\text{?}}{=} C_i $. 如果不相等, 会话终止.
步骤3. $ {SC}_i $选择随机数$ N_i $, 计算$ P_{ij}=h(N_i||h(y)||{SID}_j)\oplus A_i $, $ {CID}_i=E_i\oplus h(N_i||{SID}_j||A_i) $, $ M_1=h(Z_i||N_i||E_i) $, $ M_2=N_i\oplus h({SID}_j||h(y)) $. 然后通过公共信道将消息$ \{P_{ij}, {CID}_i, M_1, M_2\} $发送给服务器$ S_j $.
认证阶段分为如下4个步骤:
步骤1. 当收到登录请求$ \{P_{ij}, {CID}_i, M_1, M_2\} $后, $ S_j $计算$ N_i=M_2\oplus h({SID}_j||h(y)) $, $ A_i=h(N_i||h(y)||{SID}_j)\oplus P_{ij} $, $ E_i={CID}_i\oplus h(N_i||{SID}_j||A_i) $, $ Z_i^{\prime }=h(h(x||y)||A_i)\oplus E_i $, $ M_1^{\prime}=h(Z_i^{\prime}||N_i||E_i) $, 然后判断$ M_1^{\prime}\overset {\text{?}}{=}M_1 $. 如果不相等, 会话终止.
步骤2. $ S_j $选择随机数$ N_j $, 计算$ M_3=h(Z_i^{\prime}||N_i||{SID}_j||{CID}_i) $, $ M_4=N_i\oplus N_j\oplus A_i $. 然后通过公共信道将消息$ \{M_3, M_4\} $发送给用户$ U_i $.
步骤3. $ U_i $收到消息$ \{M_3, M_4\} $后, 计算$ N_j=M_4\oplus A_i\oplus N_i $, $ M_3^{\prime}=h(Z_i||N_i||{SID}_j||{CID}_i) $, 然后判断$ M_3^{\prime}\overset {\text{?}}{=} M_3 $. 如果不相等, 会话终止. 如果相等, 计算$ M_5=h(Z_i||N_j||{SID}_j||{CID}_i) $, 会话密钥$ SK=h(Z_i||{SID}_j||N_i||N_j||{CID}_i) $, 然后通过公共信道将消息$ \{M_5\} $发送给$ S_j $.
步骤4. $ S_j $收到消息$ \{M_5\} $后, 计算$ M_5^{\prime }=h(Z_i^{\prime }||N_j||{SID}_j||{CID}_i) $, 然后判断$ M_5^{\prime }\overset {\text{?}}{=} M_5 $. 如果不相等, 会话终止. 如果相等, $ S_j $和$ U_i $实现了相互认证并协商出共同的会话密钥$ SK=h(Z_i^{\prime}||{SID}_j||N_i||N_j||{CID}_i) $.
如果用户$ U_i $想要将口令$ {PW}_i $修改为$ {PW}_i^{new} $时, 执行如下过程:
步骤1. 用户将智能卡$ {SC}_i $插入读卡机, 输入$ {ID}_i $, $ {PW}_i $.
步骤2. $ {SC}_i $计算$ Z_i={ID}_i\oplus h(b\oplus {PW}_i)\oplus B_i $, $ C_i^*=h(h(b\oplus {PW}_i)||{ID}_i||Z_i)\oplus B_i $, 然后判断$ C_i^*\overset {\text{?}}{=} C_i $. 如果相等, 提示用户输入新口令$ {PW}_i^{new} $.
步骤3. $ {SC}_i $选择一个新的随机数$ b^{new} $, 计算$ {RPW}_i^{new}=h(b^{new}\oplus {PW}_i^{new}) $, $ B_i^{new}=Z_i\oplus{ID}_i\oplus{RPW}_i^{new} $, $ C_i^{new}=h({RPW}_i^{new}||{ID}_i||Z_i)\oplus B_i^{new} $. 然后, $ {SC}_i $用$ B_i^{new} $, $ C_i^{new} $, $ b^{new} $ 替换卡内的$ B_i, C_i, b $.
假设敌手$ \mathscr A $拿到了用户$ U_i $的智能卡, 通过边信道技术可以提取卡内的秘密信息$ \{B_i, C_i, h(\cdot), b\} $. 那么$ \mathscr A $可以发起离线口令猜测攻击, 得到用户的口令$ {PW}_i $, 具体过程如下:
步骤1. $ \mathscr A $从用户身份空间$ {\mathscr D}_{ID} $和口令空间$ {\mathscr D}_{PW} $中猜测$ ({ID}_i^*, {PW}_i^*) $.
步骤2. $ \mathscr A $计算$ {RPW}_i^*=h(b\oplus {PW}_i^*) $, $ Z_i^*=B_i\oplus {ID}_i^*\oplus {RPW}_i^* $, $ C_i^*=h({RPW}_i^*||{ID}_i^*||Z_i^*)\oplus B_i $.
步骤3. $ \mathscr A $检查$ C_i^*\overset {\text{?}}{=} C_i $. 若相等, 则$ \mathscr A $猜测的$ ({ID}_i^*, {PW}_i^*) $正确. 否则, 跳转步骤1.
假设敌手$ \mathscr A $拿到了用户$ U_i $的智能卡并提取卡内的秘密信息$ \{A_i, B_i, C_i, h(y), h(\cdot), b\} $, 同时, $ \mathscr A $拦截$ U_i $发送给服务器$ S_j $的登录信息$ \{{CID}_i, M_2\} $. 那么$ \mathscr A $可以发起服务器欺骗攻击, 假冒一个合法的服务器. 具体过程如下:
步骤1. 由4.1节可知, $ \mathscr A $可以通过离线口令猜测攻击得到用户的身份和口令$ ({ID}_i, {PW}_i) $, 从而可以计算出$ {RPW}_i=h(b\oplus {PW}_i) $, $ Z_i=B_i\oplus {ID}_i\oplus {RPW}_i $.
步骤2. $ \mathscr A $选取随机数$ N_j^* $, 计算$ N_i=M_2\oplus h({SID}_j||h(y)) $, $ M_3^*=h(Z_i||N_i||{SID}_j||{CID}_i) $, $ M_4^*=N_i\oplus N_j^*\oplus A_i $. 然后$ \mathscr A $将消息$ \{M_3^*, M_4^*\} $发送给用户$ U_i $.
步骤3. $ U_i $计算$ M_3^{\prime} $, 将会得到$ M_3^{\prime}=M_3^* $. 因此, $ U_i $和$ \mathscr A $协商出一个共同的会话密钥$ SK= h(Z_i||{SID}_j||N_i||N_j^*||{CID}_i) $.
假设敌手$ \mathscr A $是一个恶意用户, 可以提取自己智能卡中的参数$ h(y) $. 同时$ \mathscr A $可以窃听到用户$ U_i $发送给服务器$ S_j $的登录信息$ \{P_{ij}, M_2\} $. 所以, 可以计算出$ N_i=M_2\oplus h({SID}_j||h(y)) $, $ A_i=h(N_i||h(y)||{SID}_j)\oplus P_{ij} $. 因为$ A_i=h(x||{ID}_i) $, 是一个与用户身份$ {ID} _i $相关的固定参数, 可以追踪$ U_i $的访问行为. 因此, 用户匿名性失效.
假设敌手$ \mathscr A $可以从恶意服务器中获得长期私钥$ h(y) $和$ h(x||y) $, 同时$ \mathscr A $可以窃听到用户$ U_i $发送给服务器$ S_j $的登录信息$ \{P_{ij}, {CID}_i, M_2\} $以及$ S_j $发送给$ U_i $的响应消息$ \{M_4\} $. 那么, $ \mathscr A $可以计算出$ N_i=M_2\oplus h({SID}_j||h(y)) $, $ A_i=h(N_i||h(y)||{SID}_j)\oplus P_{ij} $, $ E_i={CID}_i\oplus h(N_i||{SID}_j||A_i) $, $ Z_i=h(h(x||y)||A_i)\oplus E_i $, $ N_j=M_4\oplus A_i\oplus N_i $. 因此, $ \mathscr A $可以获得会话密钥$ SK=h(Z_i||{SID}_j||N_i||N_j||{CID}_i) $. 因此, 无法实现前向安全性.
针对文献[23]的安全缺陷, 本文设计了一种基于椭圆曲线密码的认证密钥协商协议, 包括注册中心$ RC $, 服务器$ S_j $, 用户$ U_i $三个参与方. 以下是详细步骤:
$ RC $在素域$ F_p $上选择一个椭圆曲线$ E $, $ P $是$ E $上阶为$ q $的生成元. $ RC $选取私钥$ x $, 单向哈希函数$ h: {\{a, b\}^{*}}\to{Z_q^*} $, 和整数$ n $, 其中$ 2^4 \leq n \leq 2^8 $. $ RC $将参数$ \{E, P, h(\cdot), n\} $公开.
服务器$ S_j $通过安全信道向注册中心$ RC $申请注册, 其过程如图 1所示.
步骤1. 服务器$ S_j $选择身份$ {SID}_j $, 然后将消息$ \{{SID}_j\} $通过安全信道发送给$ RC $.
步骤2. 注册中心$ RC $收到消息后, 检查$ h({SID}_j||x) $是否存在于身份验证表$ {\Gamma }_1 $中. 如果存在, $ RC $拒绝$ S_j $的注册请求, 要求$ S_j $提供新的身份标识. 否则, $ RC $选择一个随机数$ r_j $, 计算$ S_j $的私钥$ x_j=h({SID}_j||x||r_j) $, 公钥$ Q_j=x_jP $. 然后, 把$ \{h({SID}_j||x) \} $存储到服务器身份验证表$ {\Gamma }_1 $中, 公开参数$ \{{SID}_j, Q_j \} $. 最后, 将$ \{x_j \} $通过安全信道发送给$ S_j $.
步骤3. $ S_j $秘密保存$ x_j $.
用户$ U_i $通过安全信道向注册中心$ RC $申请注册, 其过程如图 2所示.
步骤1. 用户$ U_i $选择身份$ {ID}_i $, 口令$ {PW}_i $, 以及随机数$ b $. 计算$ {RPW}_i=h({PW}_i||b) $, 然后将消息$ \{{ID}_i, {RPW}_i\} $通过安全信道发送给$ RC $.
步骤2. 注册中心$ RC $收到消息后, 检查$ h({ID}_i||x) $是否存在于身份验证表$ {\Gamma }_2 $中. 如果存在, $ RC $拒绝$ U_i $的注册请求, 要求$ U_i $提供新的身份标识. 否则, $ RC $选择一个随机数$ r_i $, 计算$ U_i $的私钥$ x_i=h({ID}_i||x||r_i) $, 公钥$ Q_i=x_iP $, $ A_i=h((h(ID_i)\oplus {{RPW}_i})\ mod \ n) $, $ B_i=x_i\oplus {RPW}_i $. $ RC $把$ \{h({ID}_i||x), T_i=1\} $存储到用户身份验证表$ {\Gamma }_2 $中, 其中$ T_i=1 $意味着用户$ U_i $只注册过一次并且智能卡处于激活状态. 然后, $ RC $公开参数$ \{{ID}_i, Q_i \} $, 将$ \{A_i, B_i, n, h(\cdot)\} $写入智能卡$ {SC}_i $中, 并将$ {SC}_i $通过安全信道发送给$ U_i $.
步骤3. $ U_i $收到智能卡$ {SC}_i $后, 计算$ \tilde{b}=b\oplus(h({ID}_i||{PW}_i)\ mod\ n) $, 然后将$ \tilde{b} $存储到智能卡$ {SC}_i $中.
图 3描述了方案的登录与认证阶段. 登录阶段分为如下3个步骤:
步骤1. 当用户$ U_i $登录服务器$ S_j $时, 将智能卡$ {SC}_i $插入读卡机并输入$ {ID}_i $, $ {PW}_i $和$ {SID}_j $.
步骤2. $ {SC}_i $计算$ b=\tilde{b} \oplus(h({ID}_i||{PW}_i)\ mod\ n) $, $ {RPW}_i^*=h({PW}_i||b) $, $ A_i^*=h((h(ID_i)\oplus {{RPW}_i^*})\ mod \ n) $, 然后判断$ A_i^*\overset {\text{?}}{=} A_i $. 如果不相等, 会话终止.
步骤3. $ {SC}_i $选择两个随机数$ a_i $, $ b_i $, 计算$ x_i=B_i\oplus {RPW}_i $, $ C_i=a_iP=(C_x, C_y) $, $ D_{ij}=a_iQ_j $, $ E_i=x_ih({ID}_i)+a_iC_x\ mod\ q $, $ F_i=b_iP $, $ {CID}_i=({ID}_i||E_i)\oplus h(D_{ij}) $. 然后通过公共信道将消息$ \{C_i, F_i, {CID}_i\} $发送给服务器$ S_j $.
步骤1. 当收到登录请求$ \{C_i, F_i, {CID}_i\} $后, $ S_j $计算$ D_{ji}=x_jC_i $, $ (C_x, C_y)=C_i $, $ {ID}_i||E_i={CID}_i \oplus h(D_{ji}) $, 然后判断$ E_iP\overset {\text{?}}{=}Q_ih({ID}_i)+C_xC_i $. 如果不相等, 会话终止.
步骤2. $ S_j $选择随机数$ d_j $, 计算$ H_j=d_jP $, $ K_{ji}=d_jF_i $, 会话密钥$ SK=h(K_{ji}||E_i) $, $ L_j=h(SK||D_{ji}||F_i) $. 然后通过公共信道将消息$ \{H_j, L_j\} $发送给用户$ U_i $.
步骤3. $ U_i $收到消息$ \{H_j, L_j\} $后, 计算$ K_{ij}=b_iH_j $, $ SK=h(K_{ij}||E_i) $, $ L_j^*=h(SK||D_{ij}||F_i) $, 然后判断$ L_j^*\overset {\text{?}}{=} L_j $. 如果不相等, 会话终止. 如果相等, 计算$ N_i=h(D_{ij}||SK||H_j) $, 然后通过公共信道将消息$ \{N_i\} $发送给服务器$ S_j $.
步骤4. $ S_j $收到消息$ \{N_i\} $后, 计算$ N_i^*=h(D_{ji}||SK||H_j) $, 然后判断$ N_i^*\overset {\text{?}}{=} N_i $. 如果不相等, 会话终止. 如果相等, $ S_j $和$ U_i $实现了相互认证并协商出共同的会话密钥$ SK $.
步骤2. $ {SC}_i $计算$ b^*=\tilde{b} \oplus(h({ID}_i||{PW}_i)\ mod\ n) $, $ {RPW}_i^*=h({PW}_i||b^*) $, $ A_i^*=h((h(ID_i)\oplus {{RPW}_i^*})\ mod \ n) $, 然后判断$ A_i^*\overset {\text{?}}{=} A_i $. 如果相等, 提示用户输入新口令$ {PW}_i^{new} $.
步骤3. $ {SC}_i $选择一个新的随机数$ b^{new} $, 计算$ {RPW}_i^{new}=h({PW}_i^{new}|| b^{new}) $, $ A_i^{new}=h((h(ID_i)\oplus {{RPW}_i^{new}})\ mod \ n) $, $ B_i^{new}=B_i\oplus {RPW}_i^*\oplus {RPW}_i^{new} $, $ {\tilde{b}}^{new}=b^{new}\oplus(h({ID}_i||{RPW}_i^{new}mod\ n) $. 然后, $ {SC}_i $用$ A_i^{new} $, $ B_i^{new} $, $ {\tilde{b}}^{new} $ 替换卡内的$ A_i, B_i, \tilde{b} $.
当用户$ U_i $的智能卡丢失或被盗时, $ U_i $可以撤销智能卡并使用同一身份$ {ID}_i $ 重新进行注册.
在智能卡撤销阶段, 用户需要向注册中心$ RC $提交注销申请和身份凭证. $ RC $收到申请后, 更新验证表$ {\Gamma }_2 $中的数据$ \{h({ID}_i||x), T_i=0\} $, 其中$ T_i=0 $ 意味着用户$ U_i $被撤销, 智能卡处于未激活状态.
如果$ U_i $想要使用身份$ {ID}_i $重新注册, 需要向注册中心$ RC $提交重新注册申请和身份凭证. $ RC $收到申请后, 按照用户注册阶段的步骤进行注册, 更新验证表$ {\Gamma }_2 $中的数据$ \{h({ID}_i||x), T_i=T_i+1\} $, 公开用户新的公钥信息$ \{{ID}_i, Q_i^{new} \} $, 并且给$ U_i $颁发一个新的智能卡.
本文利用$ BAN $逻辑[26]对协议进行形式化安全分析. 表 1为$ BAN $逻辑的基本符号与含义, 表 2为$ BAN $逻辑的推理规则.
本文方案的具体分析过程如下所示:
(1) 协议模型的理想化
消息1. $ U_i \to S_j $: $ {\{{ID}_i, {\{{ID}_i, a_i, C_i\}}_{x_i}\}}_{U_i\stackrel{D_{ij}}\longleftrightarrow S_j} $, $ C_i $, $ F_i $
消息2. $ S_j \to U_i $: $ {\{U_i\stackrel{SK}\longleftrightarrow S_j, F_i\}}_{U_i\stackrel{D_{ij}}\longleftrightarrow S_j} $, $ H_j $
消息3. $ U_i \to S_j $: $ {\{U_i\stackrel{SK}\longleftrightarrow S_j, H_j\}}_{U_i\stackrel{D_{ij}}\longleftrightarrow S_j} $
(2) 安全目标
目标1. $ U_i|\equiv S_j | \equiv (U_i\stackrel{SK}\longleftrightarrow S_j) $
目标2. $ U_i | \equiv (U_i\stackrel{SK}\longleftrightarrow S_j) $
目标3. $ S_j|\equiv U_i| \equiv (U_i\stackrel{SK}\longleftrightarrow S_j) $
目标4. $ S_j|\equiv (U_i\stackrel{SK}\longleftrightarrow S_j) $
(3) 初始化假设
假设1. $ U_i|\equiv \sharp (b_i) $
假设2. $ S_j|\equiv \sharp (d_j) $
假设3. $ U_i | \equiv (U_i\stackrel{D_{ij}}\longleftrightarrow S_j) $
假设4. $ S_j | \equiv (U_i\stackrel{D_{ij}}\longleftrightarrow S_j) $
假设5. $ U_i|\equiv S_j |\Rightarrow (U_i\stackrel{SK}\longleftrightarrow S_j) $
假设6. $ S_j|\equiv U_i |\Rightarrow (U_i\stackrel{SK}\longleftrightarrow S_j) $
(4) 证明过程
步骤1. 根据消息2有: $ U_i\triangleleft {\{U_i\stackrel{SK}\longleftrightarrow S_j, F_i\}}_{U_i\stackrel{D_{ij}}\longleftrightarrow S_j} $.
步骤2. 根据步骤1, 假设3和消息含义规则有: $ U_i|\equiv S_j |\sim (U_i\stackrel{SK}\longleftrightarrow S_j, F_i) $.
步骤3. 根据假设1和新鲜性规则有: $ U_i|\equiv \sharp (U_i\stackrel{SK}\longleftrightarrow S_j, F_i) $.
步骤4. 根据步骤2, 步骤3和临时值校验规则有: $ U_i|\equiv S_j |\equiv (U_i\stackrel{SK}\longleftrightarrow S_j, F_i) $.
步骤5. 根据步骤4和信念规则有: $ U_i|\equiv S_j |\equiv (U_i\stackrel{SK}\longleftrightarrow S_j) $, 从而目标1得证.
步骤6. 根据步骤5, 假设5和管辖权规则有: $ U_i|\equiv (U_i\stackrel{SK}\longleftrightarrow S_j) $, 从而目标2得证.
步骤7. 根据消息3有: $ S_j \triangleleft {\{U_i\stackrel{SK}\longleftrightarrow S_j, H_j\}}_{U_i\stackrel{D_{ij}}\longleftrightarrow S_j} $.
步骤8. 根据步骤7, 假设4和消息含义规则有: $ S_j|\equiv U_i |\sim (U_i\stackrel{SK}\longleftrightarrow S_j, H_j) $.
步骤9. 根据假设2和新鲜性规则有: $ S_j|\equiv \sharp (U_i\stackrel{SK}\longleftrightarrow S_j, H_j) $.
步骤10. 根据步骤8, 步骤9和临时值校验规则有: $ S_j|\equiv U_i |\equiv (U_i\stackrel{SK}\longleftrightarrow S_j, H_j) $.
步骤11. 根据步骤10和信念规则有: $ S_j |\equiv U_i |\equiv (U_i\stackrel{SK}\longleftrightarrow S_j) $, 从而目标3得证.
步骤12. 根据步骤11, 假设6和管辖权规则有: $ S_j|\equiv (U_i\stackrel{SK}\longleftrightarrow S_j) $, 从而目标4得证.
(1) 相互认证与密钥协商
在认证过程中, 服务器$ S_j $通过检查$ E_iP\overset {\text{?}}{=}Q_ih({ID}_i)+C_xC_i $, 来验证用户$ U_i $身份的合法性. 由于$ E_i $ 是由$ U_i $的私钥$ x_i $生成的签名, 基于ECDLP问题是不可解的, 只有合法用户才能生成正确签名通过服务器的认证. 用户$ U_i $通过检查$ L_j^*\overset {\text{?}}{=} L_j $, 来验证$ S_j $身份的合法性. 事实上, $ L_j=h(SK||a_ix_jP||F_i) $, 只有用户$ U_i $和拥有私钥$ x_j $的服务器才能计算出合法的验证消息$ L_j $. 因此, 本文方案实现了用户和服务器的相互认证. 另一方面, $ U_i $和$ S_j $共同协商出一个会话密钥$ SK=h(K_{ij}||E_i) $. 由于$ K_{ij}=b_iH_j=d_jF_i $, 基于ECDHP问题是不可解的, 保证会话密钥的正确性.
(2) 用户匿名性
在登录和认证阶段, 敌手可以窃听会话信息, 其中, 与用户身份相关的消息有: $ {CID}_i $, $ L_j $, $ N_i $. $ L_j $和$ N_i $受到单向哈希函数的保护, 无法从中得到$ {ID}_i $. 而$ {CID}_i=({ID}_i||E_i)\oplus h(D_{ij}) $且$ D_{ij}=a_ix_jP $, 由于ECDHP问题是不可解的, 敌手无法通过$ a_iP $和$ x_jP $计算出$ D_{ij} $. 因此, 不能解密$ {ID}_i $. 另一方面, $ {CID}_i $, $ L_j $和$ N_i $中有随机数$ a_i $, $ b_i $, $ d_j $ 参与运算, 具有动态性, 无法判断两次会话是否由同一用户发起, 可以实现用户身份的不可追踪.
(3) 前向安全性
用户$ U_i $和服务器$ S_j $通过相互认证协商出会话密钥$ SK=h(b_id_jP||E_i) $, 而敌手只能通过窃听公共信道中的消息得到$ F_i=b_iP $, $ H_j=d_jP $, 由于ECDHP问题是不可解的, 敌手无法计算出$ b_id_jP $, 可以实现前向安全性.
(4) 抗离线口令猜测攻击
假设敌手可以获取用户智能卡, 并通过侧信道技术提取卡内存储的秘密信息$ \{A_i, B_i, n, h(\cdot), \tilde{b}\} $. 同时, 敌手可以窃听公共信道中传输的消息$ \{C_i, F_i, {CID}_i\} $. 我们从以下两个方面阐述本文方案可以抵抗离线口令猜测攻击.
一方面, 如果敌手利用$ A_i $来进行离线口令猜测攻击, 需要计算$ b=\tilde{b} \oplus(h({ID}_i^*||{PW}_i^*) mod\ n) $, $ {RPW}_i^*=h({PW}_i^*||b) $, $ A_i^*=h((h(ID_i^*)\oplus {{RPW}_i^*})\ mod \ n) $, 通过$ A_i^* $是否等于$ A_i $来判断$ ({ID}_i^*, {PW}_i^*) $的正确性. 根据2.2节, 由于模糊验证因子的存在, 满足等式成立的$ ({ID}_i^*, {PW}_i^*) $ 有很多, 无法通过猜测得到正确的口令.
另一方面, 如果敌手利用$ {CID}_i=({ID}_i||E_i)\oplus h(D_{ij}) $来进行离线口令猜测攻击, 需要计算出$ D_{ij}=a_ix_jP $, 这对敌手来说相当于解决ECDHP问题. 因此, 这种方式也是不可行的.
因此, 本文方案可以抵抗离线口令猜测攻击.
(5) 抗重放攻击
敌手截获合法用户$ U_i $发给服务器$ S_j $的登录消息$ \{C_i, F_i, {CID}_i\} $, 将同样的消息发送给$ S_j $, 可以通过$ S_j $的认证. 但只有知道该会话中的随机数$ a_i $, $ d_j $, 才能计算出会话密钥$ SK $以及验证值$ M_i $. 因而, 敌手无法完成后续流程, 会话终止. 另一方面, 敌手重放$ S_j $的响应消息$ \{H_j, L_j\} $也是不可行的, 因为该消息依赖于之前用户选择的随机数$ a_i $和$ b_i $, 而随机数在每个会话中都不一样, 此消息无法通过当前用户的认证. 因此, 本文方案可以抵抗重放攻击.
(6) 抗服务器欺骗攻击
敌手可以截获用户发送给合法服务器$ S_j $的登录消息, 由于敌手不知道$ S_j $的私钥$ x_j $或者随机数$ a_i $, 无法计算出$ D_{ij}=a_ix_jP $, 也就不能伪造出合法的响应消息$ \{H_j, L_j\} $. 因此, 可以抵抗服务器欺骗攻击.
在本节中, 从安全性能, 计算成本两个方面将本文方案与近年来提出的5个方案进行比较, 即Jangirala等人的方案[14], Kumari等人的方案[19], Irshad等人的方案[20], Haq等人的方案[22], Andola等人的方案[23].
从表 3安全性能对比可以看出, 本文方案可以满足列出的所有安全属性, 而其他方案或多或少存在着一些安全缺陷. 比如, 方案[14, 19, 20, 22, 23]不能提供相互认证, 也不能抵抗服务器欺骗攻击. 方案[14, 19, 22, 23]不能实现用户匿名性. 方案[19, 20, 22, 23]不能抵抗离线口令猜测攻击. 方案[14, 22]不能抵抗重放攻击. 方案[23]不能实现前向安全性. 因此, 本文方案拥有更高的安全性.
表 4, 表 5分别展示了本文与相关方案在计算量和运行时间上的对比结果. 由于用户和服务器仅需注册一次, 且口令更新操作不会频繁发生, 我们只考虑了登录与认证阶段的计算成本. 下面给出所用到的符号——$ T_e $: 模幂运算的时间复杂度; $ T_m $: 椭圆曲线点乘运算的时间复杂度; $ T_a $: 椭圆曲线点加运算的时间复杂度; $ T_s $: 对称加密/解密的时间复杂度; $ T_h $: 单向哈希函数的时间复杂度. 为了便于评估计算成本, 本文采用了文献[27]中的实验数据: $ T_e\approx 3.85\ ms $, $ T_m\approx2.226\ ms $, $ T_a\approx0.0288\ ms $, $ T_s\approx0.0046\ ms $, $ T_h\approx0.0023\ ms $. 相比于这些运算, 异或运算和连接运算可以忽略不计[25].
从表 4可以看出, 本文方案和方案[20, 22]使用椭圆曲线点乘运算, 方案[19]使用模幂运算, 方案[14, 23]使用哈希运算. 表 5显示, 基于哈希的方案(即[14, 23])拥有更低的计算成本. 在其他基于公钥密码的方案中(即[19, 20, 22]), 本文方案的计算成本最低.
本文分析了Andola等人[23]提出的认证协议, 并指出该协议的安全漏洞: 无法抵抗离线口令猜测攻击, 服务器欺骗攻击, 缺乏用户匿名性以及前向安全性. 本文利用椭圆曲线离散对数问题和计算性Diffie–Hellman问题, 提出一个改进方案, 克服了上述缺陷. 通过对比分析, 本文方案满足各类安全属性, 具有更好的安全性能, 其计算效率也比同类型的协议有所提升, 更加适用于多服务器环境.