专利名称:一种分组密码软件加密方法
技术领域:
本发明涉及信息加密技术领域,具体涉及一种分组密码的加密方法。主要应用于 数字通信过程中的各种通信软件。
背景技术:
分组密码加密方法是保障通信系统安全的一种重要手段,该方法构造拟随机数生 成器、流密码、消息认证码和杂凑函数等,还可进而成为消息认证技术、数据完整性机构、实 体认证协议以及单钥数字签名体制的核心组成步骤。分组密码的优点是明文信息良好的扩展行,对插入的敏感性,不需要密钥同步, 较强的实用性,适合作为加密标准。比较成功的算法是美国NIST在1976年公布的DES密 码算法。进入90年代,因为DES在商业系统中的广泛采用,并且有研究人员怀疑NSA在DES 中加入了陷门,人们对DES类密码的研究更加深入。各种研究机构在上世纪80-90年代对 其进行了大量的分析和破译工作,特别是差分密码分析(differential cryptanalysis)和 线性密码分析(linear cryptanalysis)的提出,迫使人们不得不研究新的密码结构。2001年NIST正式公布高级加密标准AES,并于2002年5月正式生效。Rijndael 算法在设计简洁的同时达到了极高的安全性,从而被NIST选择成为AES标准。2003年2月 欧洲最新一代的安全标准NESSIE出台。Camellia算法以其在各种软件和硬件平台上的高 效率这一显著特点成为NESSIE标准中两个128bits分组密码算法之一(另一个为AES算 法)。当前主流分组密码加密方法主要包含了两大步骤线性步骤(扩散层)和非线性 步骤(混淆层)。线性步骤的作用是将明文的微小变化扩散至整个分组,一般由MDS矩阵或 位移等操作实现;非线性步骤的作用则是消除输入数据与输出数据的相关性,一般由字节 替换步骤(S盒)实现。分组密码加密方法中的字节替换步骤(S盒)本质上均可看作映射S :GF(2n) — GF(2m)
χ^ ( (χΧ ZiixX--Jm(x))其中,X e GF(2n),fi :GF(2n) — GF⑵是布尔函数。通常简称这样的S盒为n-m 的S盒。S盒是大多数分组密码中唯一的非线性部件,为算法提供了非线性性和安全性,S 盒的密码性质直接影响了密码算法的好坏。目前,S盒是分组密码研究领域的一个热点。对 分组密码的主流攻击方法都建立在对算法S盒分析的基础之上。因此,在设计和分析分组 密码时,必须要考虑到S盒对于各种攻击的抗性,其任何不好的性质都将影响到整个密码 算法的安全性。AES和Camellia都采用了以有限域上求逆操作为核心的S盒,这种S盒对 于抵抗线性和差分分析都有着良好的性质。然而,由于求逆操作的代数性质过于简单,这种 S盒对代数攻击的抵抗能力并不令人满意。随着求解多变量二次方程组的数学方法取得进展时,代数攻击成功的概率将大大增加。
发明内容
针对上述问题,本发明提出了一种专门针对软件加密而设计的分组密码加密方 法,该方法通过增大S盒尺寸,使加密流程的安全性(尤其是对代数攻击的抵抗能力)得到 极大提高,并且在软件加密中具备高速性能。本发明的技术方案如下(流程图参图1)1.密钥编排步骤密钥编排步骤把256bits的种子密钥扩展为8个256bits的轮密钥及1个白化子 密钥(白化子密钥的长度为256bits),分别作用于8个非线性步骤和最后的1次白化子密 钥异或步骤。2.轮变换步骤2.1)非线性步骤采用2轮的Feistel结构,配合12-8的S盒,组成了本加密方 法的非线性步骤;2.2)线性步骤在线性步骤中,采用了一个GF (28)上的32 X 32MDS矩阵P,与输入 的数据向量进行乘法操作;2. 3)若步骤2. 1)与步骤2. 2)执行次数未达到7次,转到步骤2. 1,否则继续。3.末轮变换步骤3. 1)非线性步骤与步骤2. 1)相同;3.2)白化步骤将步骤3.1)的输出数据与白化子密钥异或,得到密文。本发明中所提出的加密方法,针对软件加密过程中内存容量远远大于硬件环境的 特点而设计。本方法通过增加S盒尺寸,使加密流程的安全性(尤其是对代数攻击的抵抗 能力)得到极大提高,并且在软件加密中具备高速性能。该加密技术可用于通信加密(即 传输过程中的动态数据加密)、文件加密(即存储数据的静态加密)和安全协议中。
图1是f函数结构示意图;图2是非线性步骤结构示意图;图3是加密流程整体结构示意图。
具体实施例方式本发明所述的一种高效安全的软件加密方法,具体实施步骤如下1.密钥编排步骤本步骤的输入数据为8个长为32bits的种子密钥,记为k[_8], k[-7],…,k[-l];输出数据为72个长为32bits的子密钥,记为k
,k[l],…,k[71],总 长2304bits。其中,前2048bits为非线性步骤的子密钥,最后256bits为白化子密钥。1.1)将计数器i赋值为0。1. 2)将imod4的结果存入变量j。1.3) f (k[i-8]), f (k[i-7]), f (k[i-3]), f (k[i-2])的值,其中 f 是由一个扩展 步骤E和4个并联的S盒组成,其结构如图1所示。f的输入数据为32bits的比特串A =B11 I a21 I a31 I…ι I a32,这里“ | |,,表示比特连接。首先,扩展变换E将A扩展为长为48bits 的比特串E(A)E (A) = a21 | a31 | a41 | a51 | a321 | B11 | a61 | …| | 1 | a281 | a29E的比特选择方法见表1。然后将E输出的48bits数据作为4个并联的12_8的 S盒的输入,得到32bits的输出数据f(A)。S盒的数据参见表3,表3的第η个数据表示S 盒输入数据为η时,所对应的输出数据。1.4)对€&[士-8]),€&[士-7]),€&[士-3]),€&[士-2]),Oj, j 这 6 个数据进行异 或操作,其中,OjU = 0,1,2,3)是如下常数O0 = 3C2D240EΦ ! = E4BB73F6O2 = B40B34CDO3 = 6C9D6334 ;1. 5)将步骤1. 4)得到的异或结果循环左移j位,即得到子密钥k[i]。1. 6)计数器i加1,当i < 72时,转步骤1. 2),否则继续。2.轮变换步骤本步骤的输入数据为待加密的256bits原文数据。2. 1)非线性步骤根据图2所示的结构,设输入数据为L。| R0 Lj |Rj L2 R2 L3 |R3,其中Li, Ri (i = 0,1,2,3)均为 32bits 长的数据,总长 256bits。对 Ltl | |RQ,计算4'=^ /(Z。 Iq),IV =L0这里④表示异或操作。在第2轮中进一步计算L0" =L0'=凡 j\L0 十 K0) ,R0"= < 十 f{L:十 K1)其中,Kc^K1是子密钥。对1^| |R1;L2| R2, L3 IR3也分别进行上述操作,对应的子密钥按照使用的先后顺序 从2304bits子密钥中选取。这样就得到了非线性步骤的256bits输出数据l0" IlR0" IlL1" IlR1" ||l2" ||r2" iil3" ||r3"2. 2)线性步骤将非线性步骤输出的256bits数据,作为32个Sbits长的二进制串的并联。将这 32个二进制串作为一个32X1的向量,与矩阵P相乘,得到一个新的32X1的向量,该向量 的256bits数据即为线性步骤的输出数据。矩阵P的数据见表2。2. 3)若步骤2. 1与步骤22执行次数未达到7次,转到步骤2. 1,否则继续。3.末轮变换步骤本步骤的输出数据为原文数据加密后得到的256bits密文数 据。3. 1)非线性步骤与步骤2. 1)相同。3.2)白化步骤将步骤3.1)的输出数据与最后256bits子密钥异或,得到密文。本发明的解密方法,由加密方法逆向进行即可。需要注意的是,公布实施例的目的在于帮助进一步理解本发明,但是本领域的技 术人员可以理解在不脱离本发明及所附权利要求的精神和范围内,各种替换和修改都是 可能的。因此,本发明不应局限于实施例所公开的内容,本发明要求保护的范围以权利要求 书界定的范围为准。
表IE比特选择表
权利要求
一种分组密码加密方法,其特征在于,该方法包括如下步骤A.密钥编排步骤把256bits的种子密钥扩展为8个256bits的轮密钥及1个256bits的白化子密钥,分别作用于8个非线性步骤和最后的1次白化子密钥异或步骤;B.轮变换步骤B1.非线性步骤包括2轮的Feistel结构,配合12 8的S盒;B2.线性步骤采用一个GF(28)上的32×32MDS矩阵P,与输入的数据向量进行乘法操作;B3.若步骤B1与步骤B2执行次数未达到7次,转到步骤B1,否则执行步骤C;C.末轮变换步骤C1.非线性步骤与步骤B1相同;C2.白化步骤将步骤C1的输出数据与白化子密钥异或,得到密文。
2.如权利要求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 = | | a21 | a31 |…| | a32,这里 “I I”表示比特连接,首先,扩展变换E将A扩展为长为48bits的比特串E(A)E (A) = a21 | a31 | a41 | a51 | a321 | | | a61 | …| | | | a281 | a29 ;然后将E输出的48bits数据作为4个并联的12-8的S盒的输入,得到32bits的输出 数据f(A);4)对€0^1-8]),€0^1-7])30^[1-3])30^1-2]),①」,j进行异或操作;5)将步骤4)得到的异或结果循环左移j位,得到子密钥k[i];6)计数器i加1,当i< 72时,转步骤2),否则继续。
3.如权利要求2所述的加密方法,其特征在于,所述步骤B1的实现方法为设输入数据为=L0 |R。| Lj Rj |L2| |R2| |L3| R3,其中 L^R^i = 0,1,2,3)均为 32bits 长的数据,对k | | R0,计算:L0'=凡十十,R0' = L0,这里 表示异或操作,进一步计 算L =l;=r, f(L0 e K0),r; =<e f(L0' e k,) 其中,&,&为子密钥;对1^| |礼,L2| |R2,L3| IR3也分别进行上述操作,对应的子密钥按照使用的先后顺序从 2304bits子密钥中选取,这样就得到了 256bits输出数据L。〃 |R0〃 |L, |R, |L2〃|R2" 11“〃 ||R3"。
4.如权利要求3所述的加密方法,其特征在于,所述步骤B2的实现方法为将步骤B1中输出的256bits数据,作为32个8bits长的二进制串的并联,将这32个 二进制串作为一个32X1的向量,与矩阵P相乘,得到一个新的32X1的向量,该向量的 256bits数据即为本步骤的输出数据。
5.如权利要求2所述的加密方法,其特征在于,所述^^是如下常数 O0 = 3C2D240E = E4BB73F6 02 = B40B34CD O, = 6C9D6334。
全文摘要
本发明公开了一种新的分组密码加密方法,该加密方法针对软件加密设计,充分利用了软件加密时内存空余量充足的特点,将传统分组密码算法中的字节替换步骤S盒的尺寸由8-8增大至12-8。本方法通过增加S盒尺寸,使加密流程的安全性,尤其是对代数攻击的抵抗能力得到极大提高,并且在软件加密中具备高速性能。该加密技术可用于通信加密、文件加密和安全协议中。
文档编号H04L9/06GK101938352SQ20101028984
公开日2011年1月5日 申请日期2010年9月23日 优先权日2010年9月23日
发明者张筱, 王文华, 王钊, 邱望洁, 郑志明, 高莹 申请人:北京航空航天大学