发明名称 一种实现密码算法中的S-盒线性变换的方法
摘要 本发明公开了一种实现S盒线性变换的方法,其实现的过程为:将S-盒划分为多个小S-盒,将S-盒的输入数据也分为多个块,分别为小S-盒输入数据;将上述小S-盒的输出结果合并为一个n比特的数据块x,作为线性变换混合器<img file="d2009102369823a00011.GIF" wi="1009" he="50" />的输入;然后给出4种不同的方法来实现上述过程,使之通过3次循环移位和3次整数的异或运算完成线性变换;计算出L(x)结果即为完成线性变换,实现S-盒输出。本发明在硬件实现时由原来的4个循环移位电路和4个异或门减少为3个循环移位电路和3个异或门,在效率上节省开支25%。在软件实现上同样节省了计算代价。
申请公布号 CN101719823B 申请公布日期 2012.07.11
申请号 CN200910236982.3 申请日期 2009.10.30
申请人 中国科学院软件研究所 发明人 吴文玲;武传坤
分类号 H04L9/00(2006.01)I;H04W12/00(2009.01)I 主分类号 H04L9/00(2006.01)I
代理机构 北京君尚知识产权代理事务所(普通合伙) 11200 代理人 冯艺东
主权项 1.一种实现密码算法中的S-盒线性变换的方法,其步骤包括:1)将S-盒划分为多个小S-盒,将S-盒的输入数据也分为多个块,分别为小S-盒输入数据;2)将上述小S-盒的输出结果合并为一个n比特的数据块x,作为线性变换混合器<maths num="0001"><![CDATA[<math><mrow><mi>L</mi><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mo>=</mo><mi>x</mi><mo>&CirclePlus;</mo><mrow><mo>(</mo><mi>x</mi><mo>&lt;</mo><mo>&lt;</mo><mo>&lt;</mo><mi>a</mi><mo>)</mo></mrow><mo>&CirclePlus;</mo><mrow><mo>(</mo><mi>x</mi><mo>&lt;</mo><mo>&lt;</mo><mo>&lt;</mo><mi>b</mi><mo>)</mo></mrow><mo>&CirclePlus;</mo><mrow><mo>(</mo><mi>x</mi><mo>&lt;</mo><mo>&lt;</mo><mo>&lt;</mo><mi>c</mi><mo>)</mo></mrow><mo>&CirclePlus;</mo><mrow><mo>(</mo><mi>x</mi><mo>&lt;</mo><mo>&lt;</mo><mo>&lt;</mo><mi>d</mi><mo>)</mo></mrow></mrow></math>]]></maths>的输入,其中:n为正整数,参数a、b、c和d能够互换,且均为小于n的不同正整数,<<<表示左循环移位算子,<img file="FSB00000625263600012.GIF" wi="38" he="38" />表示比特异或运算符;3)当L(x)的参数a、b、c和d满足其中两个数之和模n等于另外两个数之和模n时,使用下述方法一进行计算:(1)计算<maths num="0002"><![CDATA[<math><mrow><mi>y</mi><mn>1</mn><mo>=</mo><mi>x</mi><mo>&CirclePlus;</mo><mrow><mo>(</mo><mi>x</mi><mo>&lt;</mo><mo>&lt;</mo><mo>&lt;</mo><mi>u</mi><mo>)</mo></mrow><mo>;</mo></mrow></math>]]></maths>(2)计算<maths num="0003"><![CDATA[<math><mrow><mi>y</mi><mn>2</mn><mo>=</mo><mi>y</mi><mn>1</mn><mo>&CirclePlus;</mo><mrow><mo>(</mo><mi>y</mi><mn>1</mn><mo>&lt;</mo><mo>&lt;</mo><mo>&lt;</mo><mi>v</mi><mo>)</mo></mrow><mo>;</mo></mrow></math>]]></maths>(3)计算<maths num="0004"><![CDATA[<math><mrow><mi>L</mi><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mo>=</mo><mi>x</mi><mo>&CirclePlus;</mo><mrow><mo>(</mo><mi>y</mi><mn>2</mn><mo>&lt;</mo><mo>&lt;</mo><mo>&lt;</mo><mi>w</mi><mo>)</mo></mrow><mo>;</mo></mrow></math>]]></maths>所述u,v,w均为小于n的不同正整数,且满足下列方程组,其中,u和v能够互换:<maths num="0005"><![CDATA[<math><mrow><mfenced open='{' close=''><mtable><mtr><mtd><mi>a</mi><mo>=</mo><mi>w</mi></mtd></mtr><mtr><mtd><mi>b</mi><mo>=</mo><mi>u</mi><mo>&CirclePlus;</mo><mi>w</mi></mtd></mtr><mtr><mtd><mi>c</mi><mo>=</mo><mi>v</mi><mo>&CirclePlus;</mo><mi>w</mi></mtd></mtr><mtr><mtd><mi>d</mi><mo>=</mo><mi>u</mi><mo>&CirclePlus;</mo><mi>v</mi><mo>&CirclePlus;</mo><mi>w</mi></mtd></mtr></mtable></mfenced><mo>;</mo></mrow></math>]]></maths>当L(x)的参数a、b、c和d满足其中一个数等于另外两个数之和模n时,使用下述方法二进行计算,其中,u和v能够互换:(1)计算<maths num="0006"><![CDATA[<math><mrow><mi>y</mi><mn>1</mn><mo>=</mo><mi>x</mi><mo>&CirclePlus;</mo><mrow><mo>(</mo><mi>x</mi><mo>&lt;</mo><mo>&lt;</mo><mo>&lt;</mo><mi>u</mi><mo>)</mo></mrow><mo>;</mo></mrow></math>]]></maths>(2)计算<maths num="0007"><![CDATA[<math><mrow><mi>y</mi><mn>2</mn><mo>=</mo><mi>y</mi><mn>1</mn><mo>&CirclePlus;</mo><mrow><mo>(</mo><mi>y</mi><mn>1</mn><mo>&lt;</mo><mo>&lt;</mo><mo>&lt;</mo><mi>v</mi><mo>)</mo></mrow><mo>;</mo></mrow></math>]]></maths>(3)计算<maths num="0008"><![CDATA[<math><mrow><mi>L</mi><mrow><mo>(</mo><mi>x</mi><mo>)</mo></mrow><mo>=</mo><mi>y</mi><mn>2</mn><mo>&CirclePlus;</mo><mrow><mo>(</mo><mi>x</mi><mo>&lt;</mo><mo>&lt;</mo><mo>&lt;</mo><mi>w</mi><mo>)</mo></mrow><mo>;</mo></mrow></math>]]></maths>所述u,v,w均为小于n的不同正整数,且满足下列方程组:<maths num="0009"><![CDATA[<math><mrow><mfenced open='{' close=''><mtable><mtr><mtd><mi>a</mi><mo>=</mo><mi>u</mi></mtd></mtr><mtr><mtd><mi>b</mi><mo>=</mo><mi>v</mi></mtd></mtr><mtr><mtd><mi>c</mi><mo>=</mo><mi>w</mi></mtd></mtr><mtr><mtd><mi>d</mi><mo>=</mo><mi>u</mi><mo>&CirclePlus;</mo><mi>v</mi></mtd></mtr></mtable></mfenced><mo>;</mo></mrow></math>]]></maths>4)计算出L(x)结果即为完成线性变换,实现S-盒输出。
地址 100190 北京市海淀区中关村南四街4号