system: [SYSTEM]

user: 3. 基于无证书的跨域认证方案 基于苏航等 [ 17 ] 的无证书方案设计和CDH假设，提出了本文的协议。 3.1. 方案设计 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 ，确认 和 N ′ r 是不是相等，若相等，则可确定域B的身份，进而双方可用计算得到的会话密钥进行安全的通信。 用户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 ) 3.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能得到一样的会话密钥。 3.3. 安全性证明 下面给出本文提出的协议在eCK模型下的安全性的证明， H 1 和 是随机预言机。 引理1：由于CDH问题是困难问题，则本文协议在 A 1 的攻击下是安全的。 证明：假设 A 1 能 以不可忽略的优势 赢得2.3节中定义的游戏。那么挑战者C可以利用 A 1 的能力解决CDH问题。C随机选 P 0 ∈ G 1 ，设置 P 0 为协商用户所在域(域A)的公钥，并令 P p u b A = P 0 。令域A内全局系统参数为 { G 1 ， G 2 ， e ， q ， P ， H 1 ， H 2 ， P 0 } ，并把该参数发给 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 } ，选择 作为Test会话。 将敌手攻击的情况 [ 18 ] 分为以下几种来讨论： 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 ，设置 ，并在 L C 中存储 ( I D i ， ⊥ ， G i ， x i ， P i ) ，在 L H 1 中存储 ( I D i ， G i ， h i ) 。如果 i ≠ u ，随机选 k i ， x i ， h i ∈ Z q * ，计算 G i = ( k i P − P 0 ) h i − 1 ， P i = x i P ， 设置 H 1 ( I D i ∥ G i ) = h i ，并在 L C 中存储 ( I D i ， k i ， G i ， x i ， P i ) ，在 L H 1 中存储 。 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 ) 。 询问：C维护一个初始为空的列表 L H 2 ，记录的元组格式为 ( I D i ， T i ， T B ， Z 1 ， Z 2 ， s k ) 。如果查询的元组在 L H 2 中，则返回 s k 给 A 1 。否则按如下操作： 如果 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 检查分别输入 ， ( P 0 + G i H 1 ( I D i ∥ G 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 ) ，并返回 给 A 1 。 如果 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 中的值。否则随机选 ，在 L H 2 中存储 ( I D i ， T i ， T B ， Z 1 ， Z 2 ， s k ) ，并返回 s k 给 A 1 。 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 为 和 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 检查分别输入 ， ( P 0 + G i H 1 ( I D i ∥ G 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 中的值。否则，随机选 ，在 L S 中存储 ( I D i ， T i ， T B ， p k i ， s k ) 。 如果 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 1 ( I D i ∥ G i ) = h i ，并在 L C 中存储 ( I D i ， k i ， G i ， x i ， P i ) ，在 L H 1 中存储 ( I D i ， G i ， h i ) 。 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 检查分别输入 ， ( 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 ) ， 为 L S 中的值。如果计算错误，则随机选 s k ∈ K ，在 L H 2 中存储 ( I D i ， T i ， T B ， Z 1 ， Z 2 ， s k ) ，并返回 给 A 1 。 若没有找到，则随机选 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( )：如果 ∏ i ， j s = ∏ u ， B t ，或者 ∏ i ， j s = ∏ B ， u t ，则C 停止模拟，否则C 发送临时密钥给 A 1 。 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 ，其中存储的元组格式为 ，如果 i = u ，C 随机选 g i ， h i ∈ Z q * ，计算 G i = g i P ， P i = U ， k i = s + g i h i ，设置 H 1 ( I D i ∥ G i ) = h i ，并在 L C 中存储 ( I D i ， k i ， G i ， ⊥ ， P i ) ，在 L H 1 中存储 ( I D i ， G i ， h i ) 。如果 i ≠ u ，随机选 x i ， g i ， h i ∈ Z q * ，计算 G i = g i P ， P i = x i P ， k i = s + g i h i ，设置 H 1 ( I D i ∥ G i ) = h i ，并在 L C 中存储 ( I D i ， k i ， G i ， x i ， P i ) ，在 L H 1 中存储 ( I D i ， G i ， h i ) 。 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模型下是安全的。