发明名称 利用无穷维超混沌构造单向散列函数进行密码保护的方法
摘要 本发明公开了一种利用无穷维超混沌构造单向散列函数进行密码保护的方法,首先把明文和密钥作为两个具有延迟反馈的超混沌Chen系统的初始值,按照系统的混沌动力学特性进行演化,将演化的最终结果进行量化,将量化值代入密钥流进行迭代,实现明文和密钥信息的混淆和扩散,并基于密码块链接方式产生任意长度明文的128位Hash值。本发明方法通过构造Hash函数来进行密码保护,充分利用了无穷维超混沌系统产生的信号提高了信号的置乱性能和参数的敏感性,对预测攻击具有更强的抗击能力和更好的安全性。
申请公布号 CN101237320A 申请公布日期 2008.08.06
申请号 CN200810017496.8 申请日期 2008.02.04
申请人 西安理工大学 发明人 任海鹏;庄元
分类号 H04L9/00(2006.01) 主分类号 H04L9/00(2006.01)
代理机构 西安弘理专利事务所 代理人 罗笛
主权项 1.一种利用无穷维超混沌构造单向散列函数进行密码保护的方法,首先把明文和密钥进行拆分和数值变换,作为两个具有延迟反馈的超混沌Chen系统的初始值,按照系统的混沌动力学特性进行演化,将演化的最终结果进行量化,将量化值代入密钥流进行迭代,实现明文和密钥信息的混淆和置乱,并基于密码块链接方式产生任意长度明文的128位Hash值,将待认证的密码与该Hash值进行比对,判断其真伪,其特征在于,该方法按以下步骤进行,步骤1、对待保护的密码作为明文进行分组、拆分和数值变换将需要保护的密码作为明文,对该明文按128位进行分组,最后一个分组不足128位时,明文后面补上待处理明文的长,然后补0使其达到128位,再将每一组的128位明文,拆分成40bit、40bit、48bit的三个二进制数,将上述每组拆分后得到的三个数的前两个数除以2<sup>40</sup>、后一个数除以2<sup>42</sup>进行变换,分别变换得到3个[0,1]区间上的小数;步骤2、对密钥进行拆分和数值变换设定一个128位的初始密钥,将该128位初始密钥按先后顺序分别拆分成40bit、40bit、48bit的三个二进制数,对上述每组拆分后得到的三个数的前两个数除以2<sup>40</sup>、后一个数除以2<sup>42</sup>进行变换,分别变换得到3个[0,1]区间上的小数;步骤3、待保护密码明文带入超混沌系统进行演化将步骤1最后变换得到的分组明文的3个[0,1]区间上的小数作为延迟反馈Chen系统的初始值,带入下列直接延迟反馈控制的Chen电路数学模型中:<maths num="0001"><![CDATA[<math><mrow><mover><mi>x</mi><mo>&CenterDot;</mo></mover><mo>=</mo><mi>a</mi><mrow><mo>(</mo><mi>y</mi><mo>-</mo><mi>x</mi><mo>)</mo></mrow><mo>,</mo></mrow></math>]]></maths><maths num="0002"><![CDATA[<math><mrow><mover><mi>y</mi><mo>&CenterDot;</mo></mover><mo>=</mo><mrow><mo>(</mo><mi>c</mi><mo>-</mo><mi>a</mi><mo>)</mo></mrow><mi>x</mi><mo>-</mo><mi>xz</mi><mo>+</mo><mi>cy</mi><mo>,</mo></mrow></math>]]></maths><maths num="0003"><![CDATA[<math><mrow><mover><mi>z</mi><mo>&CenterDot;</mo></mover><mo>=</mo><mi>xy</mi><mo>-</mo><mi>bz</mi><mo>+</mo><msub><mi>k</mi><mn>33</mn></msub><mrow><mo>(</mo><mi>z</mi><mo>-</mo><mi>z</mi><mrow><mo>(</mo><mi>t</mi><mo>-</mo><msub><mi>&tau;</mi><mn>3</mn></msub><mo>)</mo></mrow><mo>)</mo></mrow><mo>,</mo></mrow></math>]]></maths>其中a,b,c为系统参数,k<sub>33</sub>和τ<sub>3</sub>为控制参数,进行演化,得到混沌序列,把最后时刻的三个状态值分别进行x、y、z的坐标变换,使变量的变化范围限制在[-1,1]之间,变换的公式为<maths num="0004"><![CDATA[<math><mrow><msub><mi>p</mi><mi>i</mi></msub><mo>=</mo><mfrac><mrow><mn>2</mn><mrow><mo>(</mo><msub><mi>X</mi><mi>i</mi></msub><mrow><mo>(</mo><msub><mi>t</mi><mi>end</mi></msub><mo>)</mo></mrow><mo>-</mo><mrow><mo>(</mo><mrow><mo>(</mo><msub><msup><mi>S</mi><mi>i</mi></msup><mi>max</mi></msub><mo>-</mo><msub><msup><mi>S</mi><mi>i</mi></msup><mi>min</mi></msub><mo>)</mo></mrow><mo>/</mo><mn>2</mn><mo>)</mo></mrow><mo>)</mo></mrow></mrow><mrow><msub><msup><mi>S</mi><mi>i</mi></msup><mi>max</mi></msub><mo>-</mo><msub><msup><mi>S</mi><mi>i</mi></msup><mi>min</mi></msub></mrow></mfrac><mo>,</mo><mi>i</mi><mo>=</mo><mn>1,2,3</mn><mo>,</mo><mi>X</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><mi>x</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow></mtd><mtd><mi>y</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow></mtd><mtd><mi>z</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow></mtd></mtr></mtable></mfenced></mrow></math>]]></maths>其中<maths num="0005"><![CDATA[<math><mrow><msub><msup><mi>S</mi><mi>i</mi></msup><mi>max</mi></msub><mo>=</mo><munder><mi>max</mi><mi>t</mi></munder><mrow><mo>(</mo><msub><mi>X</mi><mi>i</mi></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>)</mo></mrow><mo>,</mo></mrow></math>]]></maths><maths num="0006"><![CDATA[<math><mrow><msub><msup><mi>S</mi><mi>i</mi></msup><mi>min</mi></msub><mo>=</mo><munder><mi>min</mi><mi>t</mi></munder><mrow><mo>(</mo><msub><mi>X</mi><mi>i</mi></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>)</mo></mrow><mo>,</mo></mrow></math>]]></maths>t<sub>end</sub>表示演化的最后时刻,将演化最后时刻的三个值记为p<sub>1</sub>、p<sub>2</sub>、p<sub>3</sub>;步骤4、将密钥带入超混沌系统进行演化将步骤2得到的3个[0,1]区间上的小数作为延迟反馈Chen系统的初始值,带入上步的Chen电路数学模型中进行演化,得到混沌序列,把最后时刻的三个状态值分别进行变换,使变量的变化范围限制在[-1,1]之间,变换的公式为<maths num="0007"><![CDATA[<math><mrow><msub><mi>v</mi><mi>i</mi></msub><mo>=</mo><mfrac><mrow><mn>2</mn><mrow><mo>(</mo><msub><mi>X</mi><mi>i</mi></msub><mrow><mo>(</mo><msub><mi>t</mi><mi>end</mi></msub><mo>)</mo></mrow><mo>-</mo><mrow><mo>(</mo><mrow><mo>(</mo><msub><msup><mi>S</mi><mi>i</mi></msup><mi>max</mi></msub><mo>-</mo><msub><msup><mi>S</mi><mi>i</mi></msup><mi>min</mi></msub><mo>)</mo></mrow><mo>/</mo><mn>2</mn><mo>)</mo></mrow><mo>)</mo></mrow></mrow><mrow><msub><msup><mi>S</mi><mi>i</mi></msup><mi>max</mi></msub><msub><msup><mrow><mo>-</mo><mi>S</mi></mrow><mi>i</mi></msup><mi>min</mi></msub></mrow></mfrac><mo>,</mo><mi>i</mi><mo>=</mo><mn>1,2,3</mn><mo>,</mo><mi>X</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>=</mo><mfenced open='[' close=']'><mtable><mtr><mtd><mi>x</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow></mtd><mtd><mi>y</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow></mtd><mtd><mi>z</mi><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow></mtd></mtr></mtable></mfenced></mrow></math>]]></maths>其中<maths num="0008"><![CDATA[<math><mrow><msub><msup><mi>S</mi><mi>i</mi></msup><mi>max</mi></msub><mo>=</mo><munder><mi>max</mi><mi>t</mi></munder><mrow><mo>(</mo><msub><mi>X</mi><mi>i</mi></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>)</mo></mrow><mo>,</mo></mrow></math>]]></maths><maths num="0009"><![CDATA[<math><mrow><msub><msup><mi>S</mi><mi>i</mi></msup><mi>min</mi></msub><mo>=</mo><munder><mi>min</mi><mi>t</mi></munder><mrow><mo>(</mo><msub><mi>X</mi><mi>i</mi></msub><mrow><mo>(</mo><mi>t</mi><mo>)</mo></mrow><mo>)</mo></mrow><mo>,</mo></mrow></math>]]></maths>t<sub>end</sub>表示演化的最后时刻,演化最后时刻的三个值为v<sub>1</sub>,v<sub>2</sub>,v<sub>3</sub>;步骤5、对上步经置乱后明文和密钥进一步混合置乱与混淆将步骤3、步骤4得到的三个明文p<sub>1</sub>,p<sub>2</sub>,p<sub>3</sub>和三个密钥v<sub>1</sub>,v<sub>2</sub>,v<sub>3</sub>分别代入下列密钥流函数中进行迭代,密钥流迭代函数如下:<img file="S2008100174968C00027.GIF" wi="736" he="102" />其中p<sub>1</sub>为经过超混沌系统置乱后的明文,v<sub>i</sub>为经过超混沌系统置乱后的密钥,n表示置乱后的明文p<sub>i</sub>和置乱后的密钥v<sub>i</sub>经过非线性函数f<sub>1</sub>的迭代次数,f<sub>1</sub>为线性分段函数,具体的形式如下<maths num="0010"><![CDATA[<math><mrow><msub><mi>f</mi><mn>1</mn></msub><mrow><mo>(</mo><mi>x</mi><mo>,</mo><mi>k</mi><mo>)</mo></mrow><mo>=</mo><mfenced open='{' close=''><mtable><mtr><mtd><mrow><mo>(</mo><mi>x</mi><mo>+</mo><mi>k</mi><mo>)</mo></mrow><mo>+</mo><mn>2</mn><mi>h</mi><mo>,</mo><mo>-</mo><mn>2</mn><mi>h</mi><mo>&le;</mo><mrow><mo>(</mo><mi>x</mi><mo>+</mo><mi>k</mi><mo>)</mo></mrow><mo>&le;</mo><mo>-</mo><mi>h</mi></mtd></mtr><mtr><mtd><mrow><mo>(</mo><mi>x</mi><mo>+</mo><mi>k</mi><mo>)</mo></mrow><mo>,</mo><mo>-</mo><mi>h</mi><mo>&lt;</mo><mrow><mo>(</mo><mi>x</mi><mo>+</mo><mi>k</mi><mo>)</mo></mrow><mo>&lt;</mo><mi>h</mi></mtd></mtr><mtr><mtd><mrow><mo>(</mo><mi>x</mi><mo>+</mo><mi>k</mi><mo>)</mo></mrow><mo>-</mo><mn>2</mn><mi>h</mi><mo>,</mo><mi>h</mi><mo>&le;</mo><mrow><mo>(</mo><mi>x</mi><mo>+</mo><mi>k</mi><mo>)</mo></mrow><mo>&le;</mo><mn>2</mn><mi>h</mi></mtd></mtr></mtable></mfenced></mrow></math>]]></maths>该函数中x和k的值在「-h,h]之间,经过至少30次迭代得到三个密钥流迭代输出e(p<sub>1</sub>,v<sub>1</sub>),e(p<sub>2</sub>,v<sub>2</sub>),e(p<sub>3</sub>,v<sub>3</sub>),将得到的三个值分别变换为40bit、40bit、48bit的二进制整数,将得到的二进制数e<sub>b1</sub>,e<sub>b2</sub>,e<sub>b3</sub>依次连接起来,得到128位的二进制整数,这个整数就是第一组128位明文得到的单向散列变换值;步骤6、对明文长度大于128位的进行密码块链接采用密码块链接模式对明文长度大于128位的进行链接,最终对整个密码明文得到完整的128位hash值;步骤7、将需验证的明文经过上述步骤得到的128位hash值与数据库中保存信息进行比对判断,确定密码的合法性将经上步Hash变换后得到的Hash值存入数据库,对需验证的明文也按上述步骤进行Hash变换,将该变换值与数据库中保存值进行比较,如果相同则通过,否则,则拒绝通过。
地址 710048陕西省西安市金花南路5号