发明名称 一种使用椭圆曲线进行的大集群安全实时通讯方法
摘要 本发明公开了一种使用椭圆曲线进行的大集群安全实时通讯方法,属于网络实时通讯领域。其包括如下步骤:初始化通讯组、注册协议、组密钥管理协议、重新注册协议和源认证协议;本方法中涉及的通讯组是由一组控制器/主要服务器、接受者和发送者构成,该方法是基于椭圆曲线理论设计的一种新型用于实时通讯的组密钥管理和源认证协议,它支持密钥的重分配和撤销等级过程,在等级和撤销过程中,组管理服务器向发送者和接受者发送一些基于椭圆曲线的密钥材料,在后面的组密钥建立过程中,发送者和接受者可以使用这些密钥材料建立一个共享的组密钥而不需要和组管理服务器进行协商。本方法能够节约存储空间,更安全且效率更高。
申请公布号 CN101488958A 申请公布日期 2009.07.22
申请号 CN200910025108.5 申请日期 2009.02.20
申请人 东南大学 发明人 万长胜;周侃;胡爱群
分类号 H04L29/06(2006.01)I;H04L9/32(2006.01)I;H04L9/30(2006.01)I;H04L9/08(2006.01)I;G06F7/72(2006.01)I 主分类号 H04L29/06(2006.01)I
代理机构 南京经纬专利商标代理有限公司 代理人 魏学成
主权项 1、一种使用椭圆曲线进行的大集群安全实时通讯方法,其特征在于包括如下步骤:第一步:初始化通讯组(1)组管理服务器GCKS在有限域P内创建一个椭圆曲线T;(2)定义两个素数集合分别为第一素数集合SINIT和第二素数集合RINIT,创建第一素数SEN<sub>init</sub>并放入第一素数集合SINIT,创建第二素数REC<sub>init</sub>并放入第二素数集合RINIT;(3)从椭圆曲线T中取第一基点G<sub>ks</sub>和第一私钥k<sub>ks</sub>,计算第一数值<maths num="0001"><![CDATA[<math><mrow><msub><mi>G</mi><msub><mi>k</mi><mi>ks</mi></msub></msub><mo>=</mo><msub><mi>k</mi><mi>ks</mi></msub><msub><mi>G</mi><mi>ks</mi></msub><mo>,</mo></mrow></math>]]></maths>第一私钥k<sub>ks</sub>和第一数值<img file="A200910025108C00022.GIF" wi="74" he="54" />形成了第一公私钥对<img file="A200910025108C00023.GIF" wi="241" he="56" />第二步:注册协议当一个用户想注册成为该通讯组的接受者R<sub>i</sub>时,这个用户随机取出一个第三素数<img file="A200910025108C00024.GIF" wi="132" he="53" />然后在组管理服务器GCKS和注册用户间安全关系的保护下将第三素数<img file="A200910025108C00025.GIF" wi="105" he="54" />发送给组管理服务器GCKS,组管理服务器GCKS接收到第三素数<img file="A200910025108C00026.GIF" wi="104" he="53" />后检查它是否和第二素数集合RINIT中的元素冲突,若不冲突,则将其加入到第二素数集合RINIT中,计算第二数值<maths num="0002"><![CDATA[<math><mrow><msub><mi>G</mi><msub><mi>R</mi><mi>i</mi></msub></msub><mo>=</mo><msub><mi>PRI</mi><msub><mi>R</mi><mi>i</mi></msub></msub><msub><mi>G</mi><mn>0</mn></msub><mo>=</mo><msub><mi>PRI</mi><msub><mi>R</mi><mi>i</mi></msub></msub><mi>mod</mi><mi>n</mi><msub><mi>G</mi><mn>0</mn></msub><mo>,</mo></mrow></math>]]></maths>并分发第一数值组<maths num="0003"><![CDATA[<math><mrow><mo>&lt;</mo><msub><mi>G</mi><mi>ks</mi></msub><mo>,</mo><msub><mi>G</mi><msub><mi>k</mi><mi>ks</mi></msub></msub><mo>,</mo><msub><mi>G</mi><msub><mi>R</mi><mi>i</mi></msub></msub><mo>,</mo><mi>p</mi><mo>,</mo><mi>a</mi><mo>,</mo><mi>b</mi><mo>,</mo><mi>n</mi><mo>,</mo><mi>h</mi><mo>></mo></mrow></math>]]></maths>给新的接受者;组管理服务器GCKS将第三素数<img file="A200910025108C00029.GIF" wi="103" he="54" />用第一公私钥对<img file="A200910025108C000210.GIF" wi="222" he="55" />中的第一私钥k<sub>ks</sub>签名后广播给发送者;当一个用户想注册成为该通讯组的发送者S<sub>i</sub>时,这个用户随机取出一个第四素数<img file="A200910025108C000211.GIF" wi="132" he="54" />然后在组管理服务器GCKS和注册用户间安全关系的保护下将第四素数<img file="A200910025108C000212.GIF" wi="102" he="52" />发送给组管理服务器GCKS,组管理服务器GCKS接收到第四素数<img file="A200910025108C000213.GIF" wi="101" he="53" />后检查它是否和第一素数集合SINIT中的元素冲突;若不冲突,则将其加入到第一素数集合SINIT中,计算第三数值<maths num="0004"><![CDATA[<math><mrow><msub><mi>G</mi><msub><mi>S</mi><mi>i</mi></msub></msub><mo>=</mo><msub><mi>PRI</mi><msub><mi>S</mi><mi>i</mi></msub></msub><msub><mi>G</mi><mn>0</mn></msub><mo>=</mo><msub><mi>PRI</mi><msub><mi>S</mi><mi>i</mi></msub></msub><mi>mod</mi><mi>n</mi><msub><mi>G</mi><mn>0</mn></msub><mo>;</mo></mrow></math>]]></maths>用随机创建的第五素数PRI<sub>X</sub>取代第一素数SEN<sub>init</sub>,然后计算第一素数集合SINIT中所有元素的乘积M;计算第四数值G<sub>M</sub>=MG<sub>0</sub>=(M mod n)G<sub>0</sub>,并分发第二数值组<img file="A200910025108C000215.GIF" wi="541" he="55" />给新的发送者;组管理服务器GCKS将密钥&lt;M,G<sub>M</sub>&gt;用第一公私钥对<img file="A200910025108C000216.GIF" wi="222" he="55" />中的第一私钥k<sub>ks</sub>签名后广播给发送者和接受者,当发送者接收到密钥&lt;M,G<sub>M</sub>&gt;后计算第二私钥<maths num="0005"><![CDATA[<math><mrow><msub><mi>k</mi><msub><mi>S</mi><mi>i</mi></msub></msub><mo>=</mo><mi>M</mi><mo>/</mo><msub><mi>PRI</mi><msub><mi>S</mi><mi>i</mi></msub></msub><mi>mod</mi><mi>n</mi><mo>;</mo></mrow></math>]]></maths>其中:p,a,b,n,h为构成椭圆曲线T的参数,G<sub>0</sub>为椭圆曲线T上的一个基点;第三步:组密钥管理协议A.对于会话j,发送者S<sub>i</sub>通过如下方法生成会话的组密钥k<sub>j</sub>:(1)选定一部分接受者组成一个子组,计算该子组中所有成员对应的第四素数<img file="A200910025108C000218.GIF" wi="101" he="53" />的乘积N;(2)随机从会话j中选取第六素数r<sub>j</sub>,计算第五数值<maths num="0006"><![CDATA[<math><mrow><msub><mi>v</mi><mi>j</mi></msub><mo>=</mo><msub><mi>r</mi><mi>j</mi></msub><mo>*</mo><mi>N</mi><mo>*</mo><msub><mi>PRT</mi><msub><mi>S</mi><mi>i</mi></msub></msub><mo>;</mo></mrow></math>]]></maths>(3)计算第六数值<maths num="0007"><![CDATA[<math><mrow><msub><mi>G</mi><msub><mi>v</mi><mi>j</mi></msub></msub><mo>=</mo><msub><mi>v</mi><mi>j</mi></msub><msub><mi>G</mi><mn>0</mn></msub><mo>=</mo><mrow><mo>(</mo><msub><mi>v</mi><mi>j</mi></msub><mo>/</mo><msub><mi>PRI</mi><msub><mi>S</mi><mi>i</mi></msub></msub><mo>)</mo></mrow><mrow><mo>(</mo><msub><mi>PRI</mi><msub><mi>S</mi><mi>i</mi></msub></msub><msub><mi>G</mi><mn>0</mn></msub><mo>)</mo></mrow><mo>=</mo><mrow><mo>(</mo><msub><mi>r</mi><mi>j</mi></msub><mo>*</mo><mi>N</mi><mo>)</mo></mrow><msub><mi>G</mi><msub><mi>S</mi><mi>i</mi></msub></msub><mo>=</mo><mrow><mo>(</mo><msub><mi>r</mi><mi>j</mi></msub><mo>*</mo><mi>N</mi><mi>mod</mi><mi>n</mi><mo>)</mo></mrow><msub><mi>G</mi><msub><mi>S</mi><mi>i</mi></msub></msub><mo>;</mo></mrow></math>]]></maths>(4)计算组密钥<maths num="0008"><![CDATA[<math><mrow><msub><mi>k</mi><mi>j</mi></msub><mo>=</mo><mi>HMAC</mi><mo>-</mo><mi>SHA</mi><mn>256</mn><mrow><mo>(</mo><msub><mi>G</mi><msub><mi>v</mi><mi>j</mi></msub></msub><mo>,</mo><mi>nonce</mi><mo>)</mo></mrow><mo>;</mo></mrow></math>]]></maths>(5)通过第二公私钥对<img file="A200910025108C000222.GIF" wi="216" he="55" />的保护将消息<maths num="0009"><![CDATA[<math><mrow><mi>KEYMSG</mi><mo>=</mo><msub><mrow><mo>{</mo><msub><mi>v</mi><mi>j</mi></msub><mo>,</mo><msub><mi>G</mi><msub><mi>S</mi><mi>i</mi></msub></msub><mo>,</mo><mi>nonce</mi><mo>}</mo></mrow><msub><mi>k</mi><msub><mi>S</mi><mi>i</mi></msub></msub></msub></mrow></math>]]></maths>广播给网络中所有接受者;B.对于子组中的接受者R<sub>i</sub>,它使用发送者的公钥来验证消息,通过如下方法计算组密钥k<sub>j</sub>:(1)计算第六数值<maths num="0010"><![CDATA[<math><mrow><msub><mi>G</mi><msub><mi>v</mi><mi>j</mi></msub></msub><mo>=</mo><msub><mi>v</mi><mi>j</mi></msub><msub><mi>G</mi><mn>0</mn></msub><mo>=</mo><mrow><mo>(</mo><msub><mi>v</mi><mi>j</mi></msub><mo>/</mo><msub><mi>PRI</mi><msub><mi>R</mi><mi>i</mi></msub></msub><mo>)</mo></mrow><mrow><mo>(</mo><msub><mi>PRI</mi><msub><mi>R</mi><mi>i</mi></msub></msub><msub><mi>G</mi><mn>0</mn></msub><mo>)</mo></mrow><mo>=</mo><mrow><mo>(</mo><msub><mi>v</mi><mi>j</mi></msub><mo>/</mo><msub><mi>PRI</mi><msub><mi>R</mi><mi>i</mi></msub></msub><mi>mod</mi><mi>n</mi><mo>)</mo></mrow><msub><mi>G</mi><msub><mi>PRI</mi><msub><mi>R</mi><mi>i</mi></msub></msub></msub><mo>;</mo></mrow></math>]]></maths>(2)计算组密钥<maths num="0011"><![CDATA[<math><mrow><msub><mi>k</mi><mi>j</mi></msub><mo>=</mo><mi>HMAC</mi><mo>-</mo><mi>SHA</mi><mn>256</mn><mrow><mo>(</mo><msub><mi>G</mi><msub><mi>v</mi><mi>j</mi></msub></msub><mo>-</mo><mi>nonce</mi><mo>)</mo></mrow><mo>;</mo></mrow></math>]]></maths>其中:nonce是由发送者S<sub>i</sub>创建的一次性数字,HMAC是一种hash算法,SHA256是指256位的SHAL哈希算法;第四步:重新注册协议当组管理服务器GCKS想要从该通讯组中删除接受者R<sub>i</sub>时,它先从第二素数集合RINIT中删除第三素数<img file="A200910025108C00031.GIF" wi="130" he="54" />然后通过第二公私钥对<img file="A200910025108C00032.GIF" wi="217" he="55" />的保护将被撤销的接受者的第三素数<img file="A200910025108C00033.GIF" wi="103" he="54" />广播给发送者,发送者重新计算它们第七数值v<sub>j</sub>′和新组密钥k<sub>j</sub>′并向其他接受者重新分发新组密钥k<sub>j</sub>′;当组管理服务器GCKS想要从该通讯组中删除发送者S<sub>i</sub>时,它先从第一素数集合SINIT中删除第四素数<img file="A200910025108C00034.GIF" wi="130" he="53" />然后重新计算第一素数集合SINIT中所有元素的乘积M′和第八数值G<sub>M</sub>′并通过第二公私钥对<img file="A200910025108C00035.GIF" wi="217" he="54" />的保护向发送者和接受者广播新密钥&lt;M′,G<sub>M</sub>′&gt;;第五步:源认证协议当发送者给接受者发送消息时需要消息认证码MAC时,第二公私钥对<img file="A200910025108C00036.GIF" wi="215" he="55" />形成了发送者的有着第三数值<img file="A200910025108C00037.GIF" wi="52" he="54" />的公私钥对,其中:第三数值<img file="A200910025108C00038.GIF" wi="52" he="53" />同时被看做发送者的身份证明和它的基点。
地址 210096江苏省南京市玄武区四牌楼2号