发明名称 一种基于身份的可认证动态群组密钥协商方法
摘要 本发明涉及一种基于身份的可认证动态群组密钥协商方法,属于网络通讯安全技术领域;包括以下步骤:一、系统初始化:PKG生成并公开系统参数;二、密钥提取生成:每个用户将公钥发送给PKG,PKG返回每个用户的私钥;三、进行两轮密钥协商:为认证群组用户左右邻居的合法性并传递自身的临时密钥进行第一轮协商;在左右邻居通过认证后进行第二轮协商以公布用于生成群组会话密钥的相关信息;四、利用上一步的消息计算会话密钥,然后用其对群间通信进行加解密。对比现有技术,本发明在实现密钥协商的同时,还支持用户动态事件,使网络具有良好的动态性和扩展性,同时能够检测出内部攻击者,在保证安全性的前提下具有较少的加密项,减少了计算量和通信量。
申请公布号 CN105959269A 申请公布日期 2016.09.21
申请号 CN201610262224.9 申请日期 2016.04.25
申请人 北京理工大学 发明人 郑军;杨诚;陈志福
分类号 H04L29/06(2006.01)I;H04L9/08(2006.01)I 主分类号 H04L29/06(2006.01)I
代理机构 代理人
主权项 一种基于身份的可认证动态群组密钥协商方法,其特征在于:包括以下步骤:一.进行系统网络的初始化:私钥生成器PKG生成并公开系统参数{q,G<sub>1</sub>,G<sub>2</sub>,P,e,P<sub>pub</sub>,H<sub>0</sub>,H<sub>1</sub>,E<sub>k</sub>,D<sub>k</sub>},即公共参数,s为PKG的私钥需秘密保存,P<sub>pub</sub>是PKG公钥,其中G<sub>1</sub>和G<sub>2</sub>是q阶加法循环群和q阶乘法循环群,P是G<sub>1</sub>的生成元,双线性映射e:G<sub>1</sub>×G<sub>1</sub>→G<sub>2</sub>,散列函数H<sub>0</sub>:{0,1}<sup>*</sup>→G<sub>1</sub>将任意长度的字符串映射到群G<sub>1</sub>的元素上,散列函数H<sub>1</sub>:{0,1}<sup>*</sup>→{0,1}<sup>k</sup>,将任意长度的字符串映射到长度为k的字符串上,E<sub>k</sub>和D<sub>k</sub>是对称加密和解密函数;二.密钥提取生成(1)在进入网络后,用户u<sub>i</sub>将自己的身份信息ID<sub>i</sub>公开,其中1≤i≤n,n表示用户数;(2)用户获取PKG的公共参数并保存,使用散列函数H<sub>0</sub>计算其公钥Q<sub>i</sub>=H<sub>0</sub>(ID<sub>i</sub>);(3)用户将公钥Q<sub>i</sub>发送给PKG,PKG使用其私钥计算出该用户的私钥S<sub>i</sub>=sQ<sub>i</sub>,并通过安全信道发送给用户u<sub>i</sub>;(4)用户u<sub>i</sub>收到私钥后可通过计算等式e(S<sub>i</sub>,P)=e(Q<sub>i</sub>,P<sub>pub</sub>)是否成立来验证该私钥的有效性;三.第一轮协商每个用户u<sub>i</sub>首先选取两个随机数a<sub>i</sub>,<img file="FDA0000973350040000011.GIF" wi="155" he="71" />其中<img file="FDA0000973350040000012.GIF" wi="55" he="71" />表示q阶整数循环集合,计算临时密钥P<sub>i</sub>=a<sub>i</sub>P,获取当前的时间戳T<sub>1</sub>;为了将P<sub>i</sub>秘密地发送给用户u<sub>i</sub>的左右两个邻居u<sub>i‑1</sub>和u<sub>i+1</sub>,需要进行如下步骤的操作,对于左邻居u<sub>i‑1</sub>:(1)获取用户u<sub>i‑1</sub>的公钥Q<sub>i‑1</sub>,计算w=e(r<sub>i</sub>S<sub>i</sub>,Q<sub>i‑1</sub>);(2)计算得到对称密钥K=H<sub>1</sub>(w|T<sub>1</sub>),其中“|”代表连接操作;(3)计算得到U<sub>i‑1</sub>=r<sub>i</sub>Q<sub>i</sub>;(4)计算得到W<sub>i‑1</sub>=(r<sub>i</sub>+H<sub>1</sub>(U<sub>i‑1</sub>))S<sub>i</sub>;(5)计算得到消息摘要m′=H<sub>1</sub>(P<sub>i</sub>|U<sub>i‑1</sub>|ID<sub>i</sub>);(6)使用对称密钥K加密消息和消息摘要V<sub>i‑1</sub>=E<sub>K</sub>(P<sub>i</sub>|m′);根据上述6步得到U<sub>i‑1</sub>、V<sub>i‑1</sub>和W<sub>i‑1</sub>,同理对于右邻居计算出U<sub>i+1</sub>、V<sub>i+1</sub>和W<sub>i+1</sub>,最后广播D<sub>i</sub>=(U<sub>i‑1</sub>,V<sub>i‑1</sub>,W<sub>i‑1</sub>,U<sub>i+1</sub>,V<sub>i+1</sub>,W<sub>i+1</sub>,T<sub>1</sub>);四.第二轮协商当用户u<sub>j</sub>收到广播消息D<sub>j‑1</sub>和D<sub>j+1</sub>时,分别对其计算ΔT=T<sub>c</sub>‑T<sub>1</sub>,其中T<sub>c</sub>为当前时间,若ΔT超过规定的延迟时间,那么就中止后续的操作并对该超时用户发送超时报文,以防止受到重放攻击,直到收到新的广播报文;否者的话,则对左右两个邻居u<sub>j‑1</sub>和u<sub>j+1</sub>进行认证和解密操作,对于左邻居u<sub>j‑1</sub>操作如下:1)通过验证等式e(P,W<sub>j</sub>)=e(P<sub>pub</sub>,U<sub>j</sub>+H<sub>1</sub>(U<sub>j</sub>)Q<sub>j</sub>)是否成立来认证u<sub>j‑1</sub>的身份;2)使用自身私钥S<sub>j</sub>计算出w=e(U<sub>j</sub>,S<sub>j</sub>);3)计算得到对称密钥K=H<sub>1</sub>(w|T<sub>1</sub>);4)使用对称解密算法对消息V<sub>j</sub>解密D<sub>K</sub>(V<sub>j</sub>),得到P<sub>j‑1</sub>和m’;5)通过验证等式m′=H<sub>1</sub>(P<sub>j‑1</sub>|U<sub>j</sub>|ID<sub>j‑1</sub>)是否成立来对u<sub>j‑1</sub>进行消息认证;这样用户u<sub>j</sub>就可获得到u<sub>j‑1</sub>正确的临时密钥P<sub>j‑1</sub>,用于之后的密钥生成计算;对于u<sub>j+1</sub>同理;然后u<sub>j</sub>通过以下过程计算包含左右邻居和自身临时密钥的秘密数并对其进行签名:1)计算秘密数X<sub>j</sub>=e(P<sub>j+1</sub>‑P<sub>j‑1</sub>,P<sub>j</sub>);2)选取一个随机数<img file="FDA0000973350040000021.GIF" wi="170" he="71" />计算Y<sub>j</sub>=t<sub>j</sub>Q<sub>j</sub>;3)计算消息摘要h<sub>j</sub>=H<sub>1</sub>(X<sub>j</sub>|Y<sub>j</sub>|T<sub>2</sub>|ID<sub>j</sub>),T<sub>2</sub>为当前的时间戳;4)计算Z<sub>j</sub>=(t<sub>j</sub>+h<sub>j</sub>)·S<sub>j</sub>;最后用户u<sub>j</sub>广播消息G<sub>j</sub>=(X<sub>j</sub>,Y<sub>j</sub>,Z<sub>j</sub>,T<sub>2</sub>);五.密钥计算并执行加解密操作当用户u<sub>i</sub>收到所有的第二轮广播消息G<sub>k</sub>(1≤k≤n,k≠i)后,首先对每个消息计算ΔT=T<sub>c</sub>‑T<sub>2</sub>,其中T<sub>c</sub>为当前时间;若ΔT超过规定的延迟时间,那么就中止后续的操作并对该超时用户发送超时报文,直到收到新的广播报文;否者的话,则通过下式进行批量身份验证:<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><mi>e</mi><mrow><mo>(</mo><munderover><mo>&Sigma;</mo><mrow><mi>k</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover><msub><mi>Z</mi><mi>k</mi></msub><mo>,</mo><mi>P</mi><mo>)</mo></mrow><mo>=</mo><mi>e</mi><mrow><mo>(</mo><munderover><mo>&Sigma;</mo><mrow><mi>k</mi><mo>=</mo><mn>1</mn></mrow><mi>n</mi></munderover><mo>(</mo><mrow><msub><mi>Y</mi><mi>k</mi></msub><mo>+</mo><msub><mi>h</mi><mi>k</mi></msub><msub><mi>Q</mi><mi>k</mi></msub></mrow><mo>)</mo><mo>,</mo><msub><mi>P</mi><mrow><mi>p</mi><mi>u</mi><mi>b</mi></mrow></msub><mo>)</mo></mrow><mo>;</mo></mrow>]]></math><img file="FDA0000973350040000022.GIF" wi="909" he="159" /></maths>其中h<sub>k</sub>=H<sub>1</sub>(X<sub>k</sub>|Y<sub>k</sub>|T<sub>2</sub>|ID<sub>k</sub>);如果上面的等式成立,即表示验证成功,接下来用户u<sub>i</sub>可通过下式计算出k:<maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><mi>k</mi><mo>=</mo><mi>e</mi><mrow><mo>(</mo><msub><mi>P</mi><mrow><mi>i</mi><mo>-</mo><mn>1</mn></mrow></msub><mo>,</mo><msub><mi>nP</mi><mi>i</mi></msub><mo>)</mo></mrow><msubsup><mi>X</mi><mi>i</mi><mrow><mi>n</mi><mo>-</mo><mn>1</mn></mrow></msubsup><msubsup><mi>X</mi><mrow><mi>i</mi><mo>+</mo><mn>1</mn></mrow><mrow><mi>n</mi><mo>-</mo><mn>2</mn></mrow></msubsup><mn>...</mn><msubsup><mi>X</mi><mi>n</mi><mrow><mi>i</mi><mo>-</mo><mn>1</mn></mrow></msubsup><msubsup><mi>X</mi><mn>1</mn><mrow><mi>i</mi><mo>-</mo><mn>2</mn></mrow></msubsup><mn>...</mn><msub><mi>X</mi><mrow><mi>i</mi><mo>-</mo><mn>2</mn></mrow></msub><mo>;</mo></mrow>]]></math><img file="FDA0000973350040000023.GIF" wi="1004" he="84" /></maths>最后得到一个共同的会话密钥K<sub>s</sub>=H<sub>1</sub>(k|G<sub>1</sub>|G<sub>2</sub>|…|G<sub>i</sub>|…|G<sub>n</sub>),此处G<sub>i</sub>=X<sub>i</sub>|Y<sub>i</sub>|Z<sub>i</sub>|T<sub>2</sub>(1≤i≤n),之后的群组通讯便使用该对称会话密钥进行加解密操作。
地址 100081 北京市海淀区中关村南大街5号