基于椭圆曲线上的离散对数难题和双线性对运算,提出了一个云计算中基于无证书的跨域认证密钥交换协议,并且在eCK (extended Canetti-Krawczyk)模型下证明所提出协议的安全性。该协议满足了不同云之间的认证,一个云中用户的私钥由用户自己生成的秘密值和该云中的认证服务器生成的部分私钥两部分组成,充分保证了用户私钥的安全。用户身份认证的计算交由云认证服务器完成,用户认证和密钥协商经由一次交互完成,提高了协议执行效率。 Based on the discrete logarithm problem and bilinear pairings on the elliptic curve, this paper proposed a certificateless cross-domain authentication key exchange protocol in cloud computing environment and was proved secure in extended eCK model. The protocol satisfied the authentication between the different clouds and the user’s private key in a cloud consisted of a secret value selected by the user and a partial private key generated by the authentication server in the cloud. It’s fully guaranteed the security of the user’s private key. The calculation in user identity authentication finished by the cloud authentication server and user authentication and key agreement were completed in an interaction. It has improved the execution efficiency of the agreement.
张兴兰,黎丁玲*
北京工业大学信息学部,北京
收稿日期:2018年4月12日;录用日期:2018年4月26日;发布日期:2018年5月3日
基于椭圆曲线上的离散对数难题和双线性对运算,提出了一个云计算中基于无证书的跨域认证密钥交换协议,并且在eCK (extended Canetti-Krawczyk)模型下证明所提出协议的安全性。该协议满足了不同云之间的认证,一个云中用户的私钥由用户自己生成的秘密值和该云中的认证服务器生成的部分私钥两部分组成,充分保证了用户私钥的安全。用户身份认证的计算交由云认证服务器完成,用户认证和密钥协商经由一次交互完成,提高了协议执行效率。
关键词 :云计算,无证书,跨域认证,密钥交换,eCK模型
Copyright © 2018 by authors and Hans Publishers Inc.
This work is licensed under the Creative Commons Attribution International License (CC BY).
http://creativecommons.org/licenses/by/4.0/
云计算作为一种新兴的资源共享模式,充分利用了分布式计算 [
云计算依照部署模型可分为:公有云、私有云、社区云和混合云四种类型 [
针对云计算中存在的跨域认证 [
本文提出了一个基于无证书的跨域认证方案,并且在eCK模型 [
双线性对 [
1) 双线性:对于任意 P , Q ∈ G 1 , a , b ∈ Z q * ,满足 e ( a P , b Q ) = e ( P , Q ) a b ;对于任意 P 1 , P 2 , Q ∈ G 1 ,有 e ( P 1 + P 2 , Q ) = e ( P 1 , Q ) × e ( P 2 , Q ) 。
2) 非退化性:若P是 G 1 的生成元,则 e ( P , P ) ∈ G 2 是 G 2 的生成元,即 e ( P , P ) ≠ 1 。
3) 可计算性:有多项式时间算法可计算映射e。
CDH(Computational Diffie-Hellman)问题:G为q阶的循环加法群,P为G的生成元,给定 P , a P , b P ∈ G (其中 a , b ∈ Z q * ),计算
定义1:在安全参数λ 下多项式时间算法A解决CDH问题的优势为 A d v A C D H ( λ ) = Pr [ A ( P , a P , b P ) = a b P | P ∈ G , a , b ∈ Z q * ]
定义2:CDH假设:对于任意多项式时间算法A , A d v A C D H ( λ ) 是可忽略的。
针对无证书认证密钥交换协议,有两种类型的敌手 [
∏ i , j s 表示参与者i和j的第s个会话。
Lippold [
阶段1:敌手可以以任何顺序进行以下查询。
Create(i):C为身份是 I D i 的协议参与者i生成公钥和私钥对。
RevealMasterKey:C 把系统主密钥返回给敌手A。
RevealSessionKey( ∏ i , j s ):如果该会话已计算出会话密钥,则把该会话密钥返回,否则返回 ⊥ 。
RevealPartialPrivateKey(i):C把参与者i的部分私钥返回给敌手A。
RevealSecretValue(i):C把参与者i的秘密值返回给敌手A。
ReplacePublicKey(i,pk):C把参与者i的公钥更换为A所选的值pk。
RevealEphemeralKey( ∏ i , j s ):C把参与者i的临时密钥返回给A。
Send( ∏ i , j s ,m):A向会话发送消息m,然后依据协议的执行得到相应的响应信息。
如果A认为第一个阶段的查询结束了,则A选一个新鲜会话,然后进行游戏的第二阶段,执行Test()查询。
阶段2:Test():第一阶段询问结束,A选一个新鲜会话 ∏ i , j s 执行Test查询。随机选 b ∈ { 0 , 1 } ,如果 b = 0 ,则返给A会话密钥,如果 b = 1 ,则在会话密钥空间里选一个随机的值返回给A。
在游戏的最后,A输出对b的猜测 b ′ ,如果 b ′ = b ,则A赢得游戏。A赢得该游戏的优势为
定义3:新鲜会话。为参与者i和j已经结束的会话。如果下面的条件都不成立,则称是新鲜的。
1) A查询了的会话密钥。
2) A查询了i拥有的部分私钥或秘密值和会话的临时密钥。
定义4:安全性。当认证密钥交换协议达到如下条件 [
1) 若攻击者诚实的转发消息,且参与者接受该会话,则参与者能获得在会话密钥空间内均匀分布的密钥。
2) 对于任意的多项式时间敌手A,能够赢得游戏的概率是可忽略的。
基于苏航等 [
1) 系统初始化算法
选取满足安全常数λ的阶为q的椭圆曲线循环群 G 1 和 G 2 ,即 | q | = λ , G 1 的生成元为P。 G 1 和 G 2 分别是加法循环群和乘法循环群,e是 G 1 × G 1 → G 2 的双线性映射。选取安全散列函数 H 1 : { 0 , 1 } * × G 1 → Z q * , H 2 : G 1 → K ,其中K是会话密钥空间。
域A和域B分别选取 s A ∈ Z q * , s B ∈ Z q * 作为系统主私钥即 m s k A = s A , m s k B = s B ,计算公钥 P p u b A = s A P , P p u b B = s B P 。域A和域B在各自域内公开系统参数 p a r a m s A = { G 1 , G 2 , e , q , P , H 1 , H 2 , P p u b A } 和 p a r a m s B = { G 1 , G 2 , e , q , P , H 1 , H 2 , P p u b B } 。
2) 用户部分私钥生成算法
域A内用户user向域A发出注册请求并发送自己的身份信息 I D U ,域A随机选 g ∈ Z q * ,计算 k = s A + g H 1 ( I D U ∥ g P ) 并把它作为用户的部分私钥,并把 { g P , k } 发送给user。
user验证 k P = P p u b A + g P H 1 ( I D U ∥ g P ) ,相等则接收k。若等式不成立,则拒绝此部分私钥。
3) 用户公私钥生成算法
用户user随机选 ,计算私钥 d U = k + x ,输出公钥 p k U : { g P , x P } 。
4) 密钥协商算法
用户user选择临时密钥 t U ∈ Z q * ,计算临时信息 T U = t U d U P , T ′ U = t U P 。选随机数 N r ,同时用域B的公钥加密 H 1 ( I D U ∥ g P ) 和随机数 N r ,得到 e U = { H 1 ( I D U ∥ g P ) , N r } P p u b B ,把 T U , T ′ U , e U , p k U 发送给域B。
域B解密 e U 得到 H 1 ( I D U ∥ g P ) 和 N r 验证等式 e ( T U , P ) = e ( T ′ U , P p u b A ) e ( g P H 1 ( I D U ∥ g P ) , T ′ U ) e ( T ′ U , x P ) ,验证通过则选择临时密钥 t B ∈ Z q * , 计算临时信息 T B = t B s B P ,计算出会话密钥 s k B 后用该会话密钥加密 N r 得到 e B = { N r } s k B ,把 { T B , e B , P p u b B } 发送给用户user。
用户user解密 e B 得到 N ′ r ,确认
用户user计算:
k U 1 = d U T B + d U t U s B P
k U 2 = t U d U T B = t U t B d U s B P
会话密钥 s k U = H 2 ( T U ∥ T B ∥ k U 1 ∥ k U 2 )
域B计算:
k B 1 = s B T U + t B s B ( P p u b A + g P H 1 ( I D U ∥ g P ) + x P )
k B 2 = t B s B T U = t B t U s B d U P
会话密钥 s k B = H 2 ( T U ∥ T B ∥ k B 1 ∥ k B 2 )
1) 域B验证用户的正确性
e ( T U , P ) = e ( t U d U P , P ) = e ( t U ( k + x ) P , P ) = e ( t U ( s A + g H 1 ( I D U ∥ g P ) + x ) P , P ) = e ( ( t U s A + t U g H 1 ( I D U ∥ g P ) + t U x ) P , P ) = e ( t U s A P , P ) e ( t U g H 1 ( I D U ∥ g P ) P , P ) e ( t U x P , P ) = e ( P , P ) t U s A e ( P , P ) t U g H 1 ( I D U ∥ g P ) e ( P , P ) t U x
e ( T ′ U , P p u b A ) e ( g P H 1 ( I D U ∥ g P ) , T ′ U ) e ( T ′ U , x P ) = e ( t U P , s A P ) e ( g P H 1 ( I D U ∥ g P ) , t U P ) e ( t U P , x P ) = e ( P , P ) t U s A e ( P , P ) t U g H 1 ( I D U ∥ g P ) e ( P , P ) t U x
2) 协议的正确性
协议正确,则需证明用户user和域B计算得到了相同的会话密钥,即证明 s k U = s k B 。
用户user的计算如下:
k U 1 = d U T B + d U t U s B P = d U t B s B P + d U t U s B P = ( t B + t U ) d U s B P
域B的计算如下:
k B 1 = s B T U + t B s B ( P p u b A + g P H 1 ( I D U ∥ g P ) + x P ) = s B T U + t B s B ( k P + x P ) = s B T U + t B s B d U P = s B t U d U P + t B s B d U P = ( t U + t B ) d U s B P
由计算结果可知,用户user和域B能得到一样的会话密钥。
下面给出本文提出的协议在eCK模型下的安全性的证明, H 1 和
引理1:由于CDH问题是困难问题,则本文协议在 A 1 的攻击下是安全的。
证明:假设 A 1 能 以不可忽略的优势
令 n 0 为参与方可拥有的最多会话数, n 1 为最多激活的用户数, n 2 为最多进行的哈希询问次数。令 A d v C C D H 为C 解决CDH问题的优势。为了解决CDH问题,给定CDH挑战 U = u P , V = v P ( u , v ∈ Z q * ) 和一个预言机DDH(*,*,*),C 的任务是计算 C D H ( U , V ) = u v P 。C 模拟2.3节中定义的游戏,在游戏中C要回答 A 1 的所有询问。
在游戏开始前,C 随机选 u ∈ { 1 ⋯ n 1 } ,代表参与跨域认证的用户。随机选 t ∈ { 1 ⋯ n 0 } ,选择
将敌手攻击的情况 [
1) 不知道用户的部分私钥和域B的临时密钥。
Create(i):C维护一个初始为空的列表 L C ,其中存储的元组格式为 ( I D i , k i , G i , x i , P i ) ,如果 i = u ,C随机选 x i , h i ∈ Z q * ,计算 G i = ( U − P 0 ) h i − 1 , P i = x i P ,设置
H 1 ( I D i , G i ) 询问:C维护一个初始为空的列表 L H 1 ,其中存储的元组格式为 ( I D i , G i , h i ) 。如果 ( I D i , G i ) 在 L H 1 中,则返回 h i 给 h i 。否则随机选择 h i ∈ Z q * 返回给 A 1 ,并在 L H 1 中存储 ( I D i , G i , h i ) 。
如果 i = u ,C 在列表 L S 中找形如 ( I D i , T i , T B , p k i , s k ) 的元祖,若找到,则计算
Z 1 ¯ = Z 1 − x i ( T B + t i P p u b B )
Z 2 ¯ = Z 2 − x i t i T B
C 检查分别输入
如果 i ≠ u ,在列表 L S 中找形如 ( I D i , T i , T B , p k i , s k ) 的元祖,若找到,则在 L H 2 中存储 ( I D i , T i , T B , Z 1 , Z 2 , s k ) , s k 为 L S 中的值。否则随机选
RevealMasterKey:C 停止模拟。
RevealSessionKey( ∏ i , j s ):如果 ∏ i , j s = ∏ u , B t ,则C 停止模拟,否则把会话密钥 s k 返回给 A 1 。
RevealPartialPrivateKey(i):如果 i = u ,则C停止模拟,否则把部分私钥 k i 返回给 A 1 。
RevealSecretValue(i):C查找 L C 列表,若找到形如 ( I D i , ∗ , ∗ , ∗ , ∗ ) 的元组,则返回 x i 给 A 1 。否则执行Create(i),返回 x i 给 A 1 。
ReplacePublicKey(i,pk):C查找 L C 列表,若找到形如 ( I D i , ∗ , ∗ , ∗ , ∗ ) 的元组,则替换 x i 和 P i 为 和 P ′ i ,其中 p k = P ′ i , P ′ i = x ′ i P 。若没有找到,则执行Create(i),再替换 x i 和 P i 为
RevealEphemeralKey(i):如果 ∏ i , j s = ∏ u , B t ,则C停止模拟,否则C发送临时密钥给
Send( ∏ i , j s ,m):C维护一个初始为空的列表 L S ,其中存储的元组格式为 ( I D i , T i , T B , p k i , s k ) 。
如果 ∏ i , j s = ∏ u , B t ,则返回 T B = V 给 A 1 。
如果 i = u ,C 随机选择 t i ∈ Z q * ,并计算
Z 1 ¯ = Z 1 − x i ( T B + t i P p u b B )
Z 2 ¯ = Z 2 − x i t i T B
C 检查分别输入
如果 i ≠ u ,则按协议规则进行回答。
Test():如果 ∏ i , j s = ∏ u , B t ,则C停止模拟,否则,C随机选 s k ∈ K ,并把 s k 返回给 A 1 。
假设 A 1 能够 赢该游戏,那么 A 1 一定计算出了准确的 Z 1 和 Z 2 。C 有 1 n 2 的概率在 L H 2 中找到正确的元组。 C 计算:
Z 2 ¯ = Z 2 − x i t i T B = t i C D H ( U , V )
C D H ( U , V ) = t i − 1 ( Z 2 − x i t i V )
则 C 解决CDH问题的优势 A d v C C D H ≥ 1 n 0 n 1 n 2 A d v A 1 ,C以不可忽略的优势解决了CDH问题,这与CDH假设冲突。
2) 不知道用户的临时密钥和域B的临时密钥。
Create(i):C 维护一个初始为空的列表 L C ,其中存储的元组格式为 ( I D i , k i , G i , x i , P i ) ,C 随机选 k i , x i , h i ∈ Z q * ,计算 G i = ( k i P − P 0 ) h i − 1 ,
H 2 ( I D i , T i , T B , Z 1 , Z 2 ) 询问:C 维护一个初始为空的列表 L H 2 ,其中存储的元组格式为 ( I D i , T i , T B , Z 1 , Z 2 , s k ) 。如果查询的元组在 L H 2 中,则返回 s k 给 A 1 。否则按如下操作:
C 在列表 L S 中找形如 ( I D i , T i , T B , p k i , s k ) 的元祖,若找到,则计算
Z 1 ¯ = Z 1 − ( k i + x i ) T B
C 检查分别输入
若没有找到,则随机选 s k ∈ K ,在 L H 2 中存储 ( I D i , T i , T B , Z 1 , Z 2 , s k ) ,并返回 s k 给 A 1 。
RevealPartialPrivateKey(i):C 查找列表 L C ,把相应的部分私钥 k i 返回给 A 1 。
RevealEphemeralKey(
Send( ∏ i , j s ,m):C维护一个初始为空的列表 L S ,其中存储的元组格式为 ( I D i , T i , T B , p k i , s k ) 。
如果 ∏ i , j s = ∏ u , B t ,C返回 T i = U 给 A 1 ,如果 ∏ i , j s = ∏ B , u t ,则返回 T B 给 A 1 。否则按协议规则进行回答。
除以上询问外,其它情况和1)中相同。
假设 A 1 能够 赢该游戏,则 A 1 一定计算出了准确的 Z 1 和 Z 2 。C有 1 n 2 的概率在 L H 2 中找到正确的元组。 C D H ( U , V ) = Z 2 。
则 C 解决CDH问题的优势 A d v C C D H ≥ 1 n 0 n 1 n 2 A d v A 1 ,C以不可忽略的优势解决了CDH问题,这与CDH假设冲突。
引理2:由于CDH问题是困难问题,则本文协议在 A 2 的攻击下是安全的。
证明:假设 A 2 能 以不可忽略的优势 A d v A 2 赢得2.3节中定义的游戏。那么挑战者C可以利用 A 2 的能力解决CDH问题。
C随机选 s ∈ Z q * ,设置 s P 作为用户所在域(域A)的系统公钥,并发送s给 A 2 。其它参数的设置和引理1的证明相同。
将敌手攻击的情况分为以下几种来讨论:
不知道用户的私有秘密值和域B的临时密钥。
Create(i):C 维护一个初始为空的列表 L C ,其中存储的元组格式为
H 2 ( I D i , T i , T B , Z 1 , Z 2 ) 询问:C 维护一个初始为空的列表 L H 2 ,其中存储的元组格式为 ( I D i , T i , T B , Z 1 , Z 2 , s k ) 。如果查询的元组在 L H 2 中,则返回 s k 给 。否则按如下操作:
如果 i = u ,C 在列表 L S 中找形如 ( I D i , T i , T B , p k i , s k ) 的元祖,若找到,则计算
Z 1 ¯ = Z 1 − k i ( T B + t i P p u b B )
Z 2 ¯ = Z 2 − k i t i T B
C检查分别输入 ( P i , T B + t i P p u b B , Z 1 ¯ ) , ( P i , t i T B , Z 2 ¯ ) ,DDH预言机是否输出1。如果 Z 1 和 Z 2 计算正确,在 L H 2 中存储 ( I D i , T i , T B , Z 1 , Z 2 , s k ) , s k 为 L S 中的值。如果计算错误,则随机选 s k ∈ K ,在 L H 2 中存储 ( I D i , T i , T B , Z 1 , Z 2 , s k ) ,并返回 s k 给 A 2 。
如果 i ≠ u ,在列表 L S 中找形如 ( I D i , T i , T B , p k i , s k ) 的元祖,若找到,则在 L H 2 中存储 ( I D i , T i , T B , Z 1 , Z 2 , s k ) , s k 为 L S 中的值。否则随机选 s k ∈ K ,在 L H 2 中存储 ( I D i , T i , T B , Z 1 , Z 2 , s k ) ,并返回 s k 给 A 2 。
RevealMasterKey:C把主私钥返回给 A 2 。
RevealPartialPrivateKey(i):C把部分私钥 k i 返回给 A 2 。
RevealSecretValue(i):如果 i = u ,则停止模拟,否则C查找 L C 列表,若找到形如 ( I D i , ∗ , ∗ , ∗ , ∗ ) 的元组,则返回 x i 给 A 2 。否则执行Create(i),返回 x i 给 A 2 。
Send( ∏ i , j s ,m):C维护一个初始为空的列表 L S ,记录的元组格式为 ( I D i , T i , T B , p k i , s k ) 。
如果 ∏ i , j s = ∏ u , B t ,则返回 T B = V 给 A 2 。
如果 i = u ,C随机选择 t i ∈ Z q * ,并计算
Z 1 ¯ = Z 1 − k i ( T B + t i P p u b B )
Z 2 ¯ = Z 2 − k i t i T B
C检查分别输入 ( P i , T B + t i P p u b B , Z 1 ¯ ) , ( P i , t i T B , Z 2 ¯ ) ,DDH预言机是否输出1。如果 Z 1 和 Z 2 计算正确,则在 L S 中记录 ( I D i , T i , T B , p k i , s k ) , s k 为 L H 2 中的值。否则,随机选 s k ∈ K ,在 L S 中存储 ( I D i , T i , T B , p k i , s k ) 。
如果 i ≠ u ,则按协议规则进行回答。
除以上询问外,其它情况和引理1的证明1)中相同。
假设 A 2 能够 赢得该游戏,则 A 2 一定计算出了准确的 Z 1 和 Z 2 。C有 1 n 2 的概率在 L H 2 中找到正确的元组。C计算:
Z 2 ¯ = Z 2 − k i t i T B = t i C D H ( U , V )
C D H ( U , V ) = t i − 1 ( Z 2 − k i t i V )
则C解决CDH问题的优势 A d v C C D H ≥ 1 n 0 n 1 n 2 A d v A 2 ,C以不可忽略的优势解决了CDH问题,这与CDH假设冲突。
剩余情况和引理1类似。
由以上引理的证明,可知本文所提出的协议在eCK模型下是安全的。
本文协议和文献 [
性能 | 文献 [ | 文献 [ | 本文方案 |
---|---|---|---|
方案交互次数 | 5 | 8 | 4 |
加解密次数 | 3 | 5 | 2 |
密钥托管问题 | 是 | 是 | 否 |
表1. 各方案性能比较
三个方案。
和文献 [
本文基于无证书提出了一个云计算下的跨域认证密钥交换协议。实现了用户的跨域认证,降低了服务器的压力,充分保证了用户的密钥安全,与同类协议相比(表1),提高了认证和密钥协商的效率。
国家自然科学基金(10007016201201)。
张兴兰,黎丁玲. 云计算下基于无证书的跨域认证密钥交换协议Cross-Domain Authentication Key Exchange Protocol Based on Certificateless in Cloud Computing Environment[J]. 计算机科学与应用, 2018, 08(05): 591-600. https://doi.org/10.12677/CSA.2018.85067