主权项 |
1、一种基于身份的数字签名方法,其特征在于,依次经过以下几个模块操作步骤:A、系统参数生成模块:PKG运行系统参数生成算法:首先系统选取大素数p,p阶乘法循环群G和G<sub>T</sub>,双线性映射e:G×G→G<sub>T</sub>,从G中选择一个生成元g,随机选择g<sub>2</sub>∈G,α∈Z<sub>p</sub>,计算g<sub>1</sub>=g<sup>α</sup>∈G,随机选择u′∈Z<sub>p</sub>,m′∈Z<sub>p</sub>,n<sub>u</sub>维向量U<sub>v</sub>=(u<sub>i</sub>),n<sub>m</sub>维向量M<sub>v</sub>=(m<sub>i</sub>),其中u<sub>i</sub>∈Z<sub>p</sub>,m<sub>i</sub>∈Z<sub>p</sub>。计算z<sub>1</sub>=e(g<sub>1</sub>,g<sub>2</sub>),z<sub>2</sub>=e(g,g<sub>2</sub>);综合上述信息,系统参数生成算法生成系统参数,其中系统公开参数为params=(p,g,g<sub>1</sub>,g<sub>2</sub>,u′,U<sub>v</sub>,m′,M<sub>v</sub>,z<sub>1</sub>,z<sub>2</sub>),系统主密钥为α∈Z<sub>p</sub>;B、用户密钥生成模块:步骤1:在线任务分配器用待签名的用户身份发送给密钥生成器;步骤2:密钥生成器将用户的身份信息发送给Hash运算器进行运算,计算得到身份的Hash值u,即:<maths num="0001"><![CDATA[<math><mrow><msub><mi>H</mi><mi>u</mi></msub><mo>:</mo><msup><mrow><mo>{</mo><mn>0,1</mn><mo>}</mo></mrow><mo>*</mo></msup><mo>→</mo><msup><mrow><mo>{</mo><mn>0,1</mn><mo>}</mo></mrow><msub><mi>n</mi><mi>u</mi></msub></msup><mo>,</mo></mrow></math>]]></maths>其中H<sub>u</sub>是{0,1}<sup>*</sup>到<img file="A2009100273750002C2.GIF" wi="110" he="63" />的密码学哈希函数,{0,1}<sup>*</sup>表示有不确定个集合{0,1}的笛卡尔积,<img file="A2009100273750002C3.GIF" wi="109" he="62" />表示有n<sub>u</sub>个集合{0,1}的笛卡尔积;步骤3:Hash运算器将计算得到的用户身份Hash值u发送给密钥生成器;步骤4:密钥生成器对得到的用户身份Hash值u进行以下处理:u为一个长度为n<sub>u</sub>的比特串,即经过抗碰撞哈希函数映射之后的Hash值,令U为u中比特值为1的位置的集合,则<maths num="0002"><![CDATA[<math><mrow><mi>U</mi><mo>⊆</mo><mo>{</mo><mn>1</mn><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><msub><mi>n</mi><mi>u</mi></msub><mo>}</mo><mo>,</mo></mrow></math>]]></maths>计算<img file="A2009100273750002C5.GIF" wi="201" he="96" />随机选择t∈Z<sub>p</sub>,计算用户的密钥<maths num="0003"><![CDATA[<math><mrow><msub><mi>d</mi><mi>u</mi></msub><mo>=</mo><mrow><mo>(</mo><msub><mi>d</mi><mn>0</mn></msub><mo>,</mo><msub><mi>d</mi><mn>1</mn></msub><mo>)</mo></mrow><mo>=</mo><mrow><mo>(</mo><msubsup><mi>g</mi><mn>2</mn><mrow><mi>α</mi><mo>+</mo><mi>t</mi><mrow><mo>(</mo><msup><mi>u</mi><mo>′</mo></msup><mo>+</mo><munder><mi>Σ</mi><mrow><mi>i</mi><mo>∈</mo><mi>U</mi></mrow></munder><msub><mi>u</mi><mi>i</mi></msub><mo>)</mo></mrow></mrow></msubsup><mo>,</mo><msubsup><mi>z</mi><mn>2</mn><mi>t</mi></msubsup><mo>)</mo></mrow><mo>,</mo></mrow></math>]]></maths>并通过安全信道把密钥传给在线任务分配器,若<maths num="0004"><![CDATA[<math><mrow><mi>α</mi><mo>+</mo><mi>t</mi><mrow><mo>(</mo><msup><mi>u</mi><mo>′</mo></msup><mo>+</mo><munder><mi>Σ</mi><mrow><mi>i</mi><mo>∈</mo><mi>U</mi></mrow></munder><msub><mi>u</mi><mi>i</mi></msub><mo>)</mo></mrow><mo>=</mo><mn>0</mn><mi>mod</mi><mi>p</mi><mo>,</mo></mrow></math>]]></maths>则密钥生成器重新选择随机数t∈Z<sub>p</sub>,计算用户的私钥,发送给在线任务分配;C、签名模块:步骤5:在线任务分配器将得到的用户密钥通过安全信道发送给相应的用户;步骤6:用户得到密钥后,利用密钥验证器对密钥进行验证。密钥验证器将用户的身份信息发送给Hash运算器;步骤7:Hash运算器将计算得到的用户的定长身份比特串u发送给密钥验证器;密钥验证器验证等式:<maths num="0005"><![CDATA[<math><mrow><mi>e</mi><mrow><mo>(</mo><mi>g</mi><mo>,</mo><msub><mi>d</mi><mn>0</mn></msub><mo>)</mo></mrow><mo>=</mo><msub><mi>z</mi><mn>1</mn></msub><mo>·</mo><msubsup><mi>d</mi><mn>1</mn><mrow><mo>(</mo><msup><mi>u</mi><mo>′</mo></msup><mo>+</mo><munder><mi>Σ</mi><mrow><mi>i</mi><mo>∈</mo><mi>U</mi></mrow></munder><msub><mi>u</mi><mi>i</mi></msub><mo>)</mo></mrow></msubsup><mo>,</mo></mrow></math>]]></maths>若等式不成立,执行步骤8;反之,则用户可以确认密钥是由PKG产生的,执行步骤9;步骤8:密钥验证器重新向PKG询问密钥,在线任务分配器重新执行步骤1;步骤9:密钥验证器将验证通过的用户密钥d<sub>u</sub>发送给签名运算器;步骤10:签名运算器将待签名的消息比特串发送给Hash运算器进行运算,计算得到消息Hash值m,即:<maths num="0006"><![CDATA[<math><mrow><msub><mi>H</mi><mi>m</mi></msub><mo>:</mo><msup><mrow><mo>{</mo><mn>0,1</mn><mo>}</mo></mrow><mo>*</mo></msup><mo>→</mo><msup><mrow><mo>{</mo><mn>0,1</mn><mo>}</mo></mrow><msub><mi>n</mi><mi>m</mi></msub></msup><mo>,</mo></mrow></math>]]></maths>其中H<sub>m</sub>是{0,1}<sup>*</sup>到<img file="A2009100273750003C3.GIF" wi="117" he="63" />的密码学哈希函数,{0,1}<sup>*</sup>表示有不确定个集合{0,1}的笛卡尔积,<img file="A2009100273750003C4.GIF" wi="117" he="62" />表示有n<sub>m</sub>个集合{0,1}的笛卡尔积;步骤11:Hash运算器将计算得到的Hash值m发送给签名运算器,签名运算器进行类似上面身份处理方法,令M为m中比特值为1的位置的集合,则<maths num="0007"><![CDATA[<math><mrow><mi>M</mi><mo>⊆</mo><mo>{</mo><mn>1</mn><mo>,</mo><mo>.</mo><mo>.</mo><mo>.</mo><mo>,</mo><msub><mi>n</mi><mi>m</mi></msub><mo>}</mo><mo>,</mo></mrow></math>]]></maths>计算<img file="A2009100273750003C6.GIF" wi="243" he="101" />随机选择s∈Z<sub>p</sub>,计算消息的签名,共3个部分,即:<maths num="0008"><![CDATA[<math><mrow><mi>σ</mi><mo>=</mo><mrow><mo>(</mo><mi>w</mi><mo>,</mo><mi>x</mi><mo>,</mo><mi>y</mi><mo>)</mo></mrow><mo>=</mo><mrow><mo>(</mo><msub><mi>d</mi><mn>0</mn></msub><mo>·</mo><msubsup><mi>g</mi><mn>2</mn><mrow><mi>s</mi><mrow><mo>(</mo><msup><mi>m</mi><mo>′</mo></msup><mo>+</mo><munder><mi>Σ</mi><mrow><mi>j</mi><mo>∈</mo><mi>M</mi></mrow></munder><msub><mi>m</mi><mi>j</mi></msub><mo>)</mo></mrow></mrow></msubsup><mo>,</mo><msubsup><mi>z</mi><mn>2</mn><mi>s</mi></msubsup><mo>,</mo><msub><mi>d</mi><mn>1</mn></msub><mo>)</mo></mrow><mo>;</mo></mrow></math>]]></maths>步骤12:签名运算器将消息的签名σ发送给在线任务分配器;D、验证模块:步骤13:在线任务分配器将待验证消息签名发送给验证者;步骤14:签名验证器首先将消息和签名者身份发送给Hash运算器,进行Hash映射;步骤15:Hash运算器将身份的映射结果u、和消息的映射结果m发送给签名验证器;步骤16:签名验证器用PKG公开参数(p,g,g<sub>1</sub>,g<sub>2</sub>,u′,U<sub>v</sub>,m′,M<sub>v</sub>,z<sub>1</sub>,z<sub>2</sub>)和签名用户的身份对消息的签名σ进行验证,若等式<maths num="0009"><![CDATA[<math><mrow><mi>e</mi><mrow><mo>(</mo><mi>g</mi><mo>,</mo><mi>w</mi><mo>)</mo></mrow><mo>=</mo><msub><mi>z</mi><mn>1</mn></msub><mo>·</mo><msup><mi>x</mi><mrow><mo>(</mo><msup><mi>m</mi><mo>′</mo></msup><mo>+</mo><munder><mi>Σ</mi><mrow><mi>j</mi><mo>∈</mo><mi>M</mi></mrow></munder><msub><mi>m</mi><mi>j</mi></msub><mo>)</mo></mrow></msup><mo>·</mo><msup><mi>y</mi><mrow><mo>(</mo><msup><mi>u</mi><mo>′</mo></msup><mo>+</mo><munder><mi>Σ</mi><mrow><mi>i</mi><mo>∈</mo><mi>U</mi></mrow></munder><msub><mi>u</mi><mi>i</mi></msub><mo>)</mo></mrow></msup></mrow></math>]]></maths>成立,则签名有效,反之无效。 |