发明名称 基于整数非线性映射的散列函数构造方法
摘要 一种涉及信息系统安全工程技术的基于整数非线性映射的散列函数构造方法,包括以下步骤:(1)消息填充;(2)设定一组初始向量及参数;(3)对消息分组进行非线性分段式码字扩展;(4)采用耦合映像系统模型进行并行式混合迭代运算,实现扩展码字与链接变量的混淆与扩散;(5)可变长度散列输出。本发明的散列函数构造方法多用于数字证书,电子签名,口令保护,数字完整性验证等领域,采用了非线性分段式码字扩展技术,加速了码字的非线性扩散程度,将整数非线性映射与逻辑函数相结合,具有较为理想的混淆与扩散特性,本发明压缩函数内部采用并行迭代结构,有利于软硬件高速并行实现,构造方法运算效率高,易于修改补充和维护。
申请公布号 CN101741560A 申请公布日期 2010.06.16
申请号 CN200810226116.1 申请日期 2008.11.14
申请人 北京石油化工学院 发明人 刘建东
分类号 H04L9/32(2006.01)I;H04L9/30(2006.01)I 主分类号 H04L9/32(2006.01)I
代理机构 小松专利事务所 11132 代理人 陈祚龄
主权项 1.一种基于整数非线性映射的散列函数构造方法,包括下列步骤:(1)消息填充:将任意长度的明文消息M分割成1024比特的消息块M<sub>0</sub>,...,M<sub>I</sub>,...,M<sub>t</sub>,最后一个块填充为:M<sub>t</sub>=*...*10...0Mdlen(H)Length(M),其中:Mdlen(H)表示输出的散列长度,长度为10比特,Length(M)表示M的长度的二进制形式,长度为64比特;将每个消息块M<sub>i</sub>划分成两组,每组由16个32比特的消息字组成,分别为m<sub>0</sub>,m<sub>1</sub>,...,m<sub>15</sub>及m′<sub>0</sub>,m′<sub>1</sub>,...,m′<sub>15</sub>;(2)给定一组初始向量及参数:<maths num="0001"><![CDATA[<math><mrow><msubsup><mi>x</mi><mn>0</mn><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow></msubsup><mo>=</mo><mn>0</mn><mi>x</mi><mn>6</mn><mi>A</mi><mn>09</mn><mi>E</mi><mn>667</mn><mo>,</mo><msubsup><mi>x</mi><mn>1</mn><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow></msubsup><mo>=</mo><mn>0</mn><mi>xBB</mi><mn>67</mn><mi>AE</mi><mn>85</mn><mo>,</mo><msubsup><mi>x</mi><mn>2</mn><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow></msubsup><mo>=</mo><mn>0</mn><mi>x</mi><mn>3</mn><mi>C</mi><mn>6</mn><mi>EF</mi><mn>372</mn><mo>,</mo><msubsup><mi>x</mi><mn>3</mn><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow></msubsup><mo>=</mo><mn>0</mn><mi>xA</mi><mn>54</mn><mi>FF</mi><mn>53</mn><mi>A</mi><mo>,</mo></mrow></math>]]></maths><maths num="0002"><![CDATA[<math><mrow><msubsup><mi>x</mi><mn>4</mn><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow></msubsup><mo>=</mo><mn>0</mn><mi>x</mi><mn>510</mn><mi>E</mi><mn>527</mn><mi>F</mi><mo>,</mo><msubsup><mi>x</mi><mn>5</mn><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow></msubsup><mo>=</mo><mn>0</mn><mi>x</mi><mn>9</mn><mi>B</mi><mn>05688</mn><mi>C</mi><mo>,</mo><msubsup><mi>x</mi><mn>6</mn><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow></msubsup><mo>=</mo><mn>0</mn><mi>x</mi><mn>1</mn><mi>F</mi><mn>83</mn><mi>D</mi><mn>9</mn><mi>AB</mi><mo>,</mo><msubsup><mi>x</mi><mn>7</mn><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow></msubsup><mo>=</mo><mn>0</mn><mi>x</mi><mn>5</mn><mi>BE</mi><mn>0</mn><mi>CD</mi><mn>19</mn><mo>;</mo></mrow></math>]]></maths>k<sub>0</sub>=0x5a827999,k<sub>1</sub>=0x6ed9eba1,k<sub>2</sub>=0x8f1bbcdc,k<sub>3</sub>=0xca62c1d6,k<sub>4</sub>=0x99728a5a,k<sub>5</sub>=0x1abe9de6,k<sub>6</sub>=0xcdcbb1f8,k<sub>7</sub>=0x6d1c26ac;(3)非线性分段式码字扩展:<img file="F2008102261161C0000013.GIF" wi="800" he="394" />利用上式对消息字m<sub>0</sub>,m<sub>1</sub>,...,m<sub>15</sub>及m′<sub>0</sub>,m′<sub>1</sub>,...,m′<sub>15</sub>进行消息扩展,先通过循环移位及模加方式进行10次迭代操作,随后再利用非线性映射<img file="F2008102261161C0000014.GIF" wi="322" he="52" /><img file="F2008102261161C0000015.GIF" wi="800" he="48" />进行码字扩展,得到扩展后的码字序列W<sub>0</sub>,W<sub>1</sub>...,W<sub>63</sub>及W′<sub>0</sub>,W′<sub>1</sub>,...,W′<sub>63</sub>;(+表示mod2<sup>32</sup>的加法运算,∨表示逐比特逻辑或,表示逐比特逻辑异或,<<表示左移位操作,>>表示右移位操作,<<<表示循环左移位操作);(4)并行方式的混合迭代运算:1)<maths num="0003"><![CDATA[<math><mrow><msub><mi>x</mi><mn>0</mn></msub><mo>=</mo><msubsup><mi>x</mi><mn>0</mn><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow></msubsup><mo>,</mo><msub><mi>x</mi><mn>1</mn></msub><mo>=</mo><msubsup><mi>x</mi><mn>1</mn><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow></msubsup><mo>,</mo><msub><mi>x</mi><mn>2</mn></msub><mo>=</mo><msubsup><mi>x</mi><mn>2</mn><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow></msubsup><mo>,</mo><msub><mi>x</mi><mn>3</mn></msub><mo>=</mo><msubsup><mi>x</mi><mn>3</mn><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow></msubsup><mo>,</mo><msub><mi>x</mi><mn>4</mn></msub><mo>=</mo><msubsup><mi>x</mi><mn>4</mn><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow></msubsup><mo>,</mo><msub><mi>x</mi><mn>5</mn></msub><mo>=</mo><msubsup><mi>x</mi><mn>5</mn><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow></msubsup><mo>,</mo><msub><mi>x</mi><mn>6</mn></msub><mo>=</mo><msubsup><mi>x</mi><mn>6</mn><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow></msubsup><mo>,</mo><msub><mi>x</mi><mn>7</mn></msub><mo>=</mo><msubsup><mi>x</mi><mn>7</mn><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow></msubsup><mo>;</mo></mrow></math>]]></maths>2)For t=0to 11{当t为偶数时,k=(t/2)*8+16;G<sub>i</sub>=(((x<sub>i</sub>(-(x<sub>i</sub>>>31)))<<1)∨(x<sub>i</sub>>>31))+W<sub>i+k</sub>i=0,7<img file="F2008102261161C0000021.GIF" wi="800" he="33" /><img file="F2008102261161C0000022.GIF" wi="800" he="34" />i=0,...,7当t为奇数时,k=((t-1)/2)*8+16;G<sub>i</sub>=(((x<sub>i</sub>(-(x<sub>i</sub>>>31)))<<1)∨(x<sub>i</sub>>>31))+W′<sub>i+k</sub> i=0,...,7<img file="F2008102261161C0000023.GIF" wi="800" he="34" /><img file="F2008102261161C0000024.GIF" wi="800" he="29" />3)将x<sub>0</sub><sup>(0)</sup>,...,x<sub>7</sub><sup>(0)</sup>分别加到x<sub>0</sub>,...,x<sub>7</sub>,即:<maths num="0004"><![CDATA[<math><mrow><msub><mi>x</mi><mn>0</mn></msub><mo>=</mo><msubsup><mrow><msub><mi>x</mi><mn>0</mn></msub><mo>+</mo><mi>x</mi></mrow><mn>0</mn><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow></msubsup><mo>,</mo><msub><mi>x</mi><mn>1</mn></msub><mo>=</mo><msub><mi>x</mi><mn>1</mn></msub><mo>+</mo><msubsup><mi>x</mi><mn>1</mn><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow></msubsup><mo>,</mo><msub><mi>x</mi><mn>2</mn></msub><mo>=</mo><msub><mi>x</mi><mn>2</mn></msub><mo>+</mo><msubsup><mi>x</mi><mn>2</mn><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow></msubsup><mo>,</mo><msub><mi>x</mi><mn>3</mn></msub><mo>=</mo><msubsup><mrow><msub><mi>x</mi><mn>3</mn></msub><mo>+</mo><mi>x</mi></mrow><mn>3</mn><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow></msubsup><mo>,</mo></mrow></math>]]></maths><maths num="0005"><![CDATA[<math><mrow><msub><mi>x</mi><mn>4</mn></msub><mo>=</mo><msubsup><mrow><msub><mi>x</mi><mn>4</mn></msub><mo>+</mo><mi>x</mi></mrow><mn>4</mn><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow></msubsup><mo>,</mo><msub><mi>x</mi><mn>5</mn></msub><mo>=</mo><msub><mi>x</mi><mn>5</mn></msub><mo>+</mo><msubsup><mi>x</mi><mn>5</mn><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow></msubsup><mo>,</mo><msub><mi>x</mi><mn>6</mn></msub><mo>=</mo><msub><mi>x</mi><mn>6</mn></msub><mo>+</mo><msubsup><mi>x</mi><mn>6</mn><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow></msubsup><mo>,</mo><msub><mi>x</mi><mn>7</mn></msub><mo>=</mo><msub><mi>x</mi><mn>7</mn></msub><mo>+</mo><msubsup><mi>x</mi><mn>7</mn><mrow><mo>(</mo><mn>0</mn><mo>)</mo></mrow></msubsup><mo>;</mo></mrow></math>]]></maths>4)对剩下的消息块继续2)、3)的操作,直到最后一个消息块;(5)散列输出:并行迭代结束后,最后的输出结果即为256比特的散列值:x<sub>0</sub>||x<sub>1</sub>||x<sub>2</sub>||x<sub>3</sub>||x<sub>4</sub>||x<sub>5</sub>||x<sub>6</sub>||x<sub>7</sub>。根据不同场合的应用需求,通过输出变换,得到输出结果为128,160,192,224或256比特的消息摘要。
地址 102617 北京市大兴区清源北路19号