发明名称 一种三方密钥协商产生方法
摘要 本发明属于通信技术领域,涉及网络通信的安全问题,特别涉及“用户-服务器-用户”网络结构的基于口令认证的三方密钥交换协议——3PAKE协议。本发明基于CDH假设,利用离散对数的难解性和哈希函数的单向性,包括下述三大核心步骤:1.服务器对请求通信的双方用户进行身份验证;2.请求通信的双方用户对服务器身份进行验证;3.请求通信的用户双方相互进行身份验证。本发明克服了现有的S-3PAKE协议存在的发起者伪装攻击、响应者伪装攻击、中间人攻击和在线口令猜测攻击的漏洞,具有抗平凡攻击、抗中间人攻击、抵御发起者伪装攻击、响应者伪装攻击、抗离线猜测攻击、抗重放攻击、前向安全性和已知密钥安全性,它还具有完美的抗在线猜测攻击的特性。
申请公布号 CN101252577A 申请公布日期 2008.08.27
申请号 CN200810044225.1 申请日期 2008.04.17
申请人 电子科技大学 发明人 许春香;罗淑丹;张敏
分类号 H04L29/06(2006.01);H04L9/08(2006.01);H04L9/32(2006.01) 主分类号 H04L29/06(2006.01)
代理机构 代理人
主权项 1、一种三方密钥协商产生方法,该方法基于“用户-服务器-用户”的网络结构,其中:“服务器S”代表一个可靠的服务器,“用户A”和“用户B”分别表示在一次三方密钥协商产生过程中的发起者与接收者;“S”代表服务器S的身份信息,“A”和“B”分别代表用户A和用户B的身份信息;“pwA”表示只在用户A与服务器S之间共享的用于认证用户A身份的口令,“pwB”表示只在用户B与服务器S之间共享的用于认证用户B身份的口令;“S”、“A”、“B”、“pwA”和“pwB”均为已转化为数值形式的信息;(G,g,p)表示有限循环群G,<math><mrow><mi>G</mi><mo>&SubsetEqual;</mo><msup><msub><mi>Z</mi><mi>p</mi></msub><mo>*</mo></msup><mo>,</mo></mrow></math>Zp *=[1,p-1],Zp是整数模p的一个剩余类,g是Zp的生成元,p为一个大素数;H()表示对任意一个0、1序列进行哈希函数运算,所得到的结果属于Zp-1的哈希函数;其特征是,包括以下顺序步骤:第一步:用户A向服务器S发出通信请求的消息A‖B:用户A将用户A与用户B的身份信息连接起来,作为一个整体信息发送给服务器S,告知服务器S,用户A想与用户B进行通信;第二步:服务器S收到消息A‖B以后,对用户A和用户B的身份进行验证,具体包括以下步骤:步骤1:服务器S分别选择随机数x1∈Z* p以及y1∈Z* p,并且运用与用户A共享的口令pwA和与用户B共享的口令pwB计算<math><mrow><msub><mi>X</mi><mi>S</mi></msub><mo>=</mo><msup><mi>g</mi><msub><mi>x</mi><mn>1</mn></msub></msup><mo>+</mo><msup><mi>g</mi><msub><mi>pw</mi><mi>A</mi></msub></msup></mrow></math>和<math><mrow><msub><mi>Y</mi><mi>S</mi></msub><mo>=</mo><msup><mi>g</mi><msub><mi>y</mi><mn>1</mn></msub></msup><mo>+</mo><msup><mi>g</mi><msub><mi>pw</mi><mi>B</mi></msub></msup><mo>,</mo></mrow></math>然后将消息XS发送给用户A,将消息YS发送给用户B;步骤2:用户A收到消息XS以后,首先运用口令pwA计算<math><mrow><msup><mi>g</mi><msub><mi>x</mi><mn>1</mn></msub></msup><mo>=</mo><msub><mi>X</mi><mi>S</mi></msub><mo>-</mo><msup><mi>g</mi><msub><mi>pw</mi><mi>A</mi></msub></msup><mo>,</mo></mrow></math>然后选择一个随机数x∈Z* p,计算<math><mrow><mi>X</mi><mo>=</mo><msup><mi>g</mi><mi>x</mi></msup><mo>+</mo><msup><mi>g</mi><msub><mi>pw</mi><mi>A</mi></msub></msup></mrow></math>和用于向服务器S验证自己身份的信息<math><mrow><msub><mi>X</mi><mn>1</mn></msub><mo>=</mo><mi>H</mi><mrow><mo>(</mo><msup><mi>g</mi><msub><mi>xx</mi><mn>1</mn></msub></msup><mo>,</mo><mi>A</mi><mo>)</mo></mrow><mo>,</mo></mrow></math> 并将消息A‖X‖X1发送给服务器S;用户B收到消息YS以后,首先运用口令pwB计算<math><mrow><msup><mi>g</mi><msub><mi>y</mi><mn>1</mn></msub></msup><mo>=</mo><msub><mi>Y</mi><mi>S</mi></msub><mo>-</mo><msup><mi>g</mi><msub><mi>pw</mi><mi>B</mi></msub></msup><mo>,</mo></mrow></math>然后选择一个随机数y∈Z* p,计算<math><mrow><mi>Y</mi><mo>=</mo><msup><mi>g</mi><mi>y</mi></msup><mo>+</mo><msup><mi>g</mi><msub><mi>pw</mi><mi>B</mi></msub></msup></mrow></math>和用于向服务器S验证自己身份的信息<math><mrow><msub><mi>Y</mi><mn>1</mn></msub><mo>=</mo><mi>H</mi><mrow><mo>(</mo><msup><mi>g</mi><msub><mi>yy</mi><mn>1</mn></msub></msup><mo>,</mo><mi>B</mi><mo>)</mo></mrow><mo>,</mo></mrow></math>并将消息B‖Y‖Y1发送给服务器S;步骤3:服务器S收到消息A‖X‖X1和消息B‖Y‖Y1以后,首先通过其与用户A共享的口令pwA计算<math><mrow><msup><mi>g</mi><mi>x</mi></msup><mo>=</mo><mi>X</mi><mo>-</mo><msup><mi>g</mi><msub><mi>pw</mi><mi>A</mi></msub></msup><mo>,</mo></mrow></math>通过其与用户B共享的口令pwB计算<math><mrow><msup><mi>g</mi><mi>y</mi></msup><mo>=</mo><mi>Y</mi><mo>-</mo><msup><mi>g</mi><msub><mi>pw</mi><mi>B</mi></msub></msup><mo>,</mo></mrow></math>接着运用H()分别算出<math><mrow><msub><msup><mi>X</mi><mo>&prime;</mo></msup><mn>1</mn></msub><mo>=</mo><mi>H</mi><mrow><mo>(</mo><msup><mi>g</mi><msub><mi>xx</mi><mn>1</mn></msub></msup><mo>,</mo><mi>A</mi><mo>)</mo></mrow></mrow></math>和<math><mrow><msub><msup><mi>Y</mi><mo>&prime;</mo></msup><mn>1</mn></msub><mo>=</mo><mi>H</mi><mrow><mo>(</mo><msup><mi>g</mi><msub><mi>yy</mi><mn>1</mn></msub></msup><mo>,</mo><mi>B</mi><mo>)</mo></mrow><mo>;</mo></mrow></math>如果X′1≠X1,或Y′1≠Y1,则用户A与用户B的身份不正确,服务器S终止此次三方密钥的协商产生过程;如果X′1=X1,且Y′1=Y1,即用户A与用户B的身份正确;第三步:服务器S对用户A和用户B的身份进行验证后,用户A和用户B对服务器S的身份进行验证,具体包括以下步骤:步骤4:服务器S选择一个随机数z∈Z* p,并计算<math><mrow><msub><mi>X</mi><mn>2</mn></msub><mo>=</mo><msup><mi>g</mi><mi>yz</mi></msup><mo>+</mo><msup><mi>g</mi><msub><mi>xx</mi><mn>1</mn></msub></msup><mo>,</mo></mrow></math> <math><mrow><msub><mi>Y</mi><mn>2</mn></msub><mo>=</mo><msup><mi>g</mi><mi>xz</mi></msup><mo>+</mo><msup><mi>g</mi><msub><mi>yy</mi><mn>1</mn></msub></msup><mo>,</mo></mrow></math> X3=H(gyz,S),Y3=H(gxz,S),其中X3和Y3是服务器S分别用来向用户A和用户B验证自己身份的信息;然后服务器S分别将消息S‖X2‖X3发送给用户A,将消息S‖Y2‖Y3发送给用户B;步骤5:用户A收到消息S‖X2‖X3以后,首先运用之前选择的随机数x计算<math><mrow><msup><mi>g</mi><mi>yz</mi></msup><mo>=</mo><msub><mi>X</mi><mn>2</mn></msub><mo>-</mo><msup><mi>g</mi><msub><mi>xx</mi><mn>1</mn></msub></msup><mo>,</mo></mrow></math>然后算出X′3=H(gyz,S),若X′3=X3,即服务器S的身份得到了验证;若X′3≠X3,则用户A终止此次三方密钥的协商产生过程;用户B收到消息S‖Y2‖Y3以后,首先运用之前选择的随机数y计算<math><mrow><msup><mi>g</mi><mi>xz</mi></msup><mo>=</mo><msub><mi>Y</mi><mn>2</mn></msub><mo>-</mo><msup><mi>g</mi><msub><mi>yy</mi><mn>1</mn></msub></msup><mo>,</mo></mrow></math>然后算出Y′3=H(gxz,S),若Y′3=Y3,即服务器S的身份得到了验证;若尸Y′3≠Y3,则用户B终止此次三方密钥的协商产生过程;第四步:用户A和用户B对服务器S的身份进行验证后,用户A和用户B之间进行相互认证,具体包括以下步骤:步骤6:用户A计算gxyz=(gyz)x,以及用户A用于向用户B验证自己身份的信息MA=H(A,B,gxyz),并将消息MA发送给用户B;用户B计算gxyz=(gxz)y,以及用户B用于向用户A验证自己身份的信息MB=H(B,A,gxyz),并将消息MB发送给用户A;步骤7:用户A收到消息MB以后,计算M′B=H(B,A,gxyz),若M′B=MB,即用户B的身份得到了验证;若M′B≠MB,则用户A终止此次三方密钥协商产生过程;用户B收到消息MA以后,计算M′A=H(A,B,gxyz),若M′A=MA,即用户A的身份得到了验证;若M′A≠MA,则用户B终止此次三方密钥协商产生过程;第五步:用户A和用户B之间进行相互认证后,用户A和用户B分别计算产生此次安全通信的会话密钥SKA和SKB,且SKA=SKB:用户A计算SKA=H(A,B,S,gxyz)作为之后与用户B进行安全通信的会话密钥;用户B计算.SKB=H(A,B,S,gxyz)作为之后与用户A进行安全通信的会话密钥。
地址 610054四川省成都市建设北路二段4号