发明名称 一种分组密码软件加密方法
摘要 本发明公开了一种新的分组密码加密方法,该加密方法针对软件加密设计,充分利用了软件加密时内存空余量充足的特点,将传统分组密码算法中的字节替换步骤S盒的尺寸由8-8增大至12-8。本方法通过增加S盒尺寸,使加密流程的安全性,尤其是对代数攻击的抵抗能力得到极大提高,并且在软件加密中具备高速性能。该加密技术可用于通信加密、文件加密和安全协议中。
申请公布号 CN101938352B 申请公布日期 2012.07.04
申请号 CN201010289846.3 申请日期 2010.09.23
申请人 北京航空航天大学 发明人 郑志明;张筱;王文华;高莹;王钊;邱望洁
分类号 H04L9/06(2006.01)I;H04L9/14(2006.01)I 主分类号 H04L9/06(2006.01)I
代理机构 北京万象新悦知识产权代理事务所(普通合伙) 11360 代理人 贾晓玲
主权项 1.一种分组密码加密方法,其特征在于,该方法包括如下步骤:A.密钥编排步骤:把256bits的种子密钥扩展为8个256bits的轮密钥及1个256bits的白化子密钥,分别作用于8个非线性步骤和最后的1次白化子密钥异或步骤;所述步骤A的实现方法为:1)将计数器i赋值为0;2)将imod4的结果存入变量j;3)求f(k[i-8]),f(k[i-7]),f(k[i-3]),f(k[i-2])的值,其中f是由一个扩展步骤E和4个并联的S盒组成,f的输入数据为32bits的比特串A=a<sub>1</sub>||a<sub>2</sub>||a<sub>3</sub>||…||a<sub>32</sub>,这里“||”表示比特连接,首先,扩展变换E将A扩展为长为48bits的比特串E(A):E(A)=a<sub>2</sub>||a<sub>3</sub>||a<sub>4</sub>||a<sub>5</sub>||a<sub>32</sub>||a<sub>1</sub>||a<sub>6</sub>||…||a<sub>1</sub>||a<sub>28</sub>||a<sub>29</sub>;然后将E输出的48bits数据作为4个并联的12-8的S盒的输入,得到32bits的输出数据f(A);4)对f(k[i-8]),f(k[i-7]),f(k[i-3]),f(k[i-2]),Φ<sub>j</sub>,j进行异或操作,其中Φ<sub>j</sub>是常数;5)将步骤4)得到的异或结果循环左移j位,得到子密钥k[i];6)计数器i加1,当i<72时,转步骤2),否则继续;B.轮变换步骤:B1.非线性步骤:包括2轮的Feistel结构,配合12-8的S盒;所述步骤B1的实现方法为:设输入数据为:L<sub>0</sub>||R<sub>0</sub>||L<sub>1</sub>||R<sub>1</sub>||L<sub>2</sub>||R<sub>2</sub>||L<sub>3</sub>||R<sub>3</sub>,其中L<sub>i</sub>,R<sub>i</sub>(i=0,1,2,3)均为32bits长的数据,对L<sub>0</sub>||R<sub>0</sub>,计算:<img file="FDA0000147393250000011.GIF" wi="463" he="73" />R<sub>0</sub>′=L<sub>0</sub>,这里<img file="FDA0000147393250000012.GIF" wi="36" he="37" />表示异或操作,进一步计算:<maths num="0001"><![CDATA[<math><mrow><msup><msub><mi>L</mi><mn>0</mn></msub><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msup><mo>=</mo><msup><msub><mi>L</mi><mn>0</mn></msub><mo>&prime;</mo></msup><mo>=</mo><msub><mi>R</mi><mn>0</mn></msub><mo>&CirclePlus;</mo><mi>f</mi><mrow><mo>(</mo><msub><mi>L</mi><mn>0</mn></msub><mo>&CirclePlus;</mo><msub><mi>K</mi><mn>0</mn></msub><mo>)</mo></mrow><mo>,</mo><msup><msub><mi>R</mi><mn>0</mn></msub><mrow><mo>&prime;</mo><mo>&prime;</mo></mrow></msup><mo>=</mo><msup><msub><mi>R</mi><mn>0</mn></msub><mo>&prime;</mo></msup><mo>&CirclePlus;</mo><mi>f</mi><mrow><mo>(</mo><msup><msub><mi>L</mi><mn>0</mn></msub><mo>&prime;</mo></msup><mo>&CirclePlus;</mo><msub><mi>K</mi><mn>1</mn></msub><mo>)</mo></mrow></mrow></math>]]></maths>其中,K<sub>0</sub>,K<sub>1</sub>为子密钥;对L<sub>1</sub>||R<sub>1</sub>,L<sub>2</sub>||R<sub>2</sub>,L<sub>3</sub>||R<sub>3</sub>也分别进行上述操作,对应的子密钥按照使用的先后顺序从2304bits子密钥中选取,这样就得到了256bits输出数据:L<sub>0</sub>″||R<sub>0</sub>″||L<sub>1</sub>″||R<sub>1</sub>″||L<sub>2</sub>″||R<sub>2</sub>″||L<sub>3</sub>″||R<sub>3</sub>″;B2线性步骤:采用一个GF(2<sup>8</sup>)上的32×32MDS矩阵P,与输入的数据向量进行乘法操作;所述步骤B2的实现方法为:将步骤B1中输出的256bits数据,作为32个8bits长的二进制串的并联,将这32个二进制串作为一个32×1的向量,与矩阵P相乘,得到一个新的32×1的向量,该向量的256bits数据即为本步骤的输出数据;B3若步骤B1与步骤B2执行次数未达到7次,转到步骤B1,否则执行步骤C;C.末轮变换步骤:C1.非线性步骤:与步骤B1相同;C2.白化步骤:将步骤C1的输出数据与白化子密钥异或,得到密文。
地址 100191 北京市海淀区学院路37号