Page 263 - 《软件学报》2020年第10期
P. 263
张启慧 等:改进的三方口令验证元认证密钥交换协议 3239
当今,以移动互联网、云计算、大数据为代表的信息技术日新月异,使人们的日常生活不断网络化,资产不
断数字化,构造安全的身份认证和密钥交换(AKE)协议逐渐成为保障用户数字化资产安全的关键.在所有的认
[1]
证方式中,口令认证由于简单易用、方便部署,成为目前应用最为普遍的一种 .
[2]
早在 1992 年,Bellovin 等人 就开创性地提出第一个真正意义上能够抵抗离线字典攻击的两方口令认证密
钥交换(PAKE)协议,其中,用户和服务器利用共享的低熵口令进行认证并生成高熵的会话密钥.PAKE 协议仅仅
要求用户记住一个较短的口令,避免了传统的基于对称密钥的 AKE 协议对存储初始对称密钥的专用硬件的需
求,也无需网络中配有复杂的公钥基础设施,非常方便实际使用.随后,为进一步提高两方 PAKE 协议的安全性和
效率,密码学家针对两方 PAKE 协议的设计与分析进行了深入的探索,基于可证明安全理论构建了适用于 PAKE
的安全模型 [3−6] ,分别设计了在随机预言模型下安全的两方 PAKE 协议 [3,4,7,8] 和在标准模型下安全的两方 PAKE 协
议 [9−14] .国际标准化组织(ISO)等机构还颁布了 ISO/IEC 11770-4、IEEE Std 1363.2 等系列相关安全标准,进一步
推动了 PAKE 协议的广泛应用.
两方 PAKE 协议比较适合“用户-服务器”架构下的两方通信,却不适合用在大规模用户相互通信的场合.此
时,任何两个需要相互通信的用户都需要预先共享一个口令,从而导致每个用户需要记住多个口令才能支持安
全通信.为了降低这一情形下用户记忆和管理口令的负担,三方 PAKE 协议随即被提出,其中每个用户仅仅需要
和服务器共享一个口令,就可以在服务器的协助下与他人进行安全的密钥交换.由于这类协议在大规模通信中
较为实用,密码学家基于不同假设构造了一系列实用的三方 PAKE 协议 [15,16] ,并在安全模型下严格地证明了协
议的安全性 [17−21] .
尽管两方、三方 PAKE 协议已经得到深入而广泛的研究,密码学家提出了诸多安全、高效的构造方案,满
足了不同场合的安全应用,然而,多数已有口令协议关注的是服务器利用明文存储用户口令的情形,没有考虑服
务器口令文件泄露所造成的巨大威胁.而现实中关于服务器端存储的口令文件被泄露的案例却是层出不穷 [22] ,
亟待在 PAKE 协议设计中增加减弱服务器文件泄露造成危害的措施.针对服务器文件泄露问题,常见的解决方
案有验证元 [23−25] 、泄露检测 [26] 、慢哈希 [27] 、口令硬化 [28] 等技术.作为防止服务器文件泄露所造成攻击的技术
的典型代表,验证元技术是指服务器端使用口令的变换值而非口令本身进行认证,使得攻击者在获得服务器口
令文件后至少需要进行离线字典攻击才能获得原始的口令,有效地减弱了服务器口令文件泄露所造成的危害.
针对基于验证元的三方 PAKE 协议,杨等人 [29] 提出了首个标准模型下的协议构造.他们利用带标签的公钥
加密体制、平滑投射哈希函数等组件构造了一个基于验证元的三方 PAKE 协议,并在标准模型下分析了所提出
协议的安全性.本文中,我们分析指出该协议并未达到所声称的安全性,难以抵抗离线字典攻击.其次,在分析已
有协议缺陷的基础上,通过借鉴标准模型下 PAKE 协议设计的新技术,我们利用改进的平滑投射哈希函数构造
了一个新的基于验证元的三方 PAKE 协议,并在广泛接受的安全模型中对其进行了严格的安全性证明.最后,还
将所提出的基于验证元的三方 PAKE 协议与已有协议进行了安全性和效率比较,结果表明,新提出的协议在提
供了更高安全性的同时具有可接受的计算和通信效率.
1 相关密码学组件和假设
1.1 公钥加密体制
一个公钥加密体制含有 3 个算法 PKE=(KG,Enc,Dec),其中,密钥生成算法 KG 在输入安全参数 k 时,输出公
k
私钥对 (pk sk ← KG (1 ), 加密算法 Enc 在输入公钥 pk、明文 m 以及随机数 r 时,输出对应的密文 c ← Enc (pk , ; ),m r
,
)
解密算法 Dec 在输入私钥 sk、合法密文 c 时,输出对应的明文 m ← Dec (, ),sk c 如果输入的密文不合法,解密算法
输出⊥.
如果公钥加密算法能够抵御选择密文攻击(CCA),则称它是 CCA 安全的.在 CCA 攻击中,攻击者 A 除了能
够获得加密公钥 pk 外,还具有访问解密预言 O dec (c)=Dec(sk,c)的能力.攻击者 A 自适应地选择两个明文 m 0 和 m 1 ,
*
*
模拟者选择随机的比特 b∈{0,1}并计算挑战密文 c =Enc(pk,m).如果攻击者在不向解密预言询问 c 的条件下,输