CN101764686B - 一种用于网络与信息安全的加密方法 - Google Patents

一种用于网络与信息安全的加密方法 Download PDF

Info

Publication number
CN101764686B
CN101764686B CN 201010033342 CN201010033342A CN101764686B CN 101764686 B CN101764686 B CN 101764686B CN 201010033342 CN201010033342 CN 201010033342 CN 201010033342 A CN201010033342 A CN 201010033342A CN 101764686 B CN101764686 B CN 101764686B
Authority
CN
China
Prior art keywords
takes turns
key
constant
turns constant
encryption
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN 201010033342
Other languages
English (en)
Other versions
CN101764686A (zh
Inventor
胡波
黎彤亮
程煜
李正涛
韩宪生
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
APPLICATION MATHEMATICS INSTITUTE, HEBEI ACADEMY OF SCIENCES
Original Assignee
SHIJIAZHUANG DEVELOPMENT ZONE JIKE SHANGSHI SCI-TECH Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by SHIJIAZHUANG DEVELOPMENT ZONE JIKE SHANGSHI SCI-TECH Co Ltd filed Critical SHIJIAZHUANG DEVELOPMENT ZONE JIKE SHANGSHI SCI-TECH Co Ltd
Priority to CN 201010033342 priority Critical patent/CN101764686B/zh
Publication of CN101764686A publication Critical patent/CN101764686A/zh
Application granted granted Critical
Publication of CN101764686B publication Critical patent/CN101764686B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Storage Device Security (AREA)

Abstract

一种用于网络与信息安全的加密方法,它采用的分组长度和密钥长度均为128比特,并增设128位系统参数,加密算法为多轮由混淆层和扩散层构成的轮变换迭代构成,其中,最后一轮为不完全轮变换,所述不完全轮变换由混淆层构成;所述混淆层由密钥加和S盒组合变换以及系统参数减构成,所述S盒组合变换由8输入8输出的可逆S盒变换以及相同数量的逆S盒变换经过奇偶交换输出构成;所述扩散层采用可逆重模多项式矩阵来构造线性变换;加密轮密钥是由加密密钥用加密轮变换生成的;解密算法是加密算法的逆变换。本发明扩散速度快,安全强度好,节省硬件资源,用硬件实现以及在软件平台上实现都具有很高的速度。

Description

一种用于网络与信息安全的加密方法
技术领域
本发明涉及一种数据加密方法,属数据处理技术领域。
背景技术
密码技术是网络与信息安全技术的核心。分组密码是密码学的一个重要分支,它具有速度快、易于标准化和便于软硬件实现等特点,通常是信息与网络安全中实现数据加密、数字签名、认证及密钥管理的核心体制。
DES(数据加密标准)自公布后的20几年来,得到了许多组织、部门的使用,各国的密码学工作者也对它进行了深入的分析。它是迄今为止使用最广泛和最成功的分组密码,但是它的56比特密钥长度太短,已经不能抵抗穷尽密钥搜索攻击。从上个世纪的90年代中期起,DES已经逐渐不能满足加密需求,在一些重要场合,常用三重DES来代替DES,但这样一来,加密速度就慢了三倍;同时,在一些应用中,需要密码的分组长度大于64比特(DES和三重DES的分组长度都是64比特):1997年,NIST(美国国家标准技术研究院)拒绝再延长DES的下一个5年使用期限。所有的事实表明,迫切需要一个新的加密算法来代替DES。
1997年4月,NIST发起征集高级加密标准AES(Advanced Encryption Standard)算法的活动,目的是为了确定一个新的分组密码,代替DES的地位,用来保护政府的敏感信息。基本要求是算法要比三重DES快,而且至少和三重DES一样安全,分组长度为128比特,密钥长度为128、192和256比特。1998年8月,NIST公布了征集到的25个候选算法。NIST对候选算法进行评估的主要准则是安全性、效率和算法的实现特性。安全性是第一位的,候选算法应当抵抗已知的密码分析方法,没有明显的安全缺陷;在满足安全性的条件下,效率是最重要的评估因素,包括算法在不同平台上的计算速度和对内存空间的需求等;算法的实现特性包括灵活性等,如在不同类型的环境中能够安全、有效地运行,可以作为序列密码、杂凑算法实现等。
另外,算法必须能够用软件和硬件两种方法有效、快速地实现。经过两年多的公开分析、评测和比较,2000年10月,NIST宣布最终获胜者是比利时递交的Rijndael算法。2001年11月,NIST正式公布了新标准AES。2006年中国公开了第一个加密算法标准SMS4。
信息安全涉及一个国家的核心利益,因此,自主性是信息安全领域研究的一个重要特点。AES是美国的高级数据加密标准,各项性能指标很优秀,而且AES算法的P层采用了两个变换,一个是矩阵的行的字节错位,另一个是列混合,采用的是GF(28)下的多项式模x4+1乘法运算,硬件实现起来需要查表,因此除了构造S盒和逆S盒外还需要构造几个有限域乘法表。根据AES算法的轮变换我们可以知道,第1轮的列混合运算将唯一的活性字节扩展到它所在列的4个活性字节,这一列的4个活性字节经过第2轮的行移位变换之后将分别位于4个不同的列,然后第2轮的列混合运算又将这4列中的每个唯一的活性字节扩展到这4列。至此才将活性字节扩散到所有的位置上,因此AES的扩散至少需要两轮叠代,才能扩散到所有位置,运算速度较慢。
SMS4是我国自主研制的分组密码算法,它是Feistel密码的推广,它和Feistel密码相仿,只不过Feistel密码将加密数据分成两组,而SMS4将加密数据分成4组。因此它的每个活性字节需要4轮叠代后才能扩散到所有位置,扩散速度慢,加密算法需要32轮迭代,运算速度不是很快。
发明内容
本发明的目的在于提供一种安全性和算法的实现特性俱佳的用于网络与信息安全的加密方法。
本发明所称问题是以下述技术方案实现的:
一种用于网络与信息安全的加密方法,它采用的分组长度和密钥长度均为128比特,并增设有128位系统参数,加密算法为多轮由混淆层和扩散层构成的轮变换,其中最后一轮为不完全轮变换,所说不完全轮变换仅由混淆层构成;所述混淆层由密钥加和S盒组合变换以及系统参数减构成,所述S盒组合变换由8输入8输出的可逆S盒变换以及8输入8输出的逆S盒变换经过奇偶交换输出构成;所述扩散层采用可逆重模多项式矩阵来构造线性变换;加密轮密钥是由加密密钥用加密轮变换生成的;解密轮密钥是加密轮密钥的逆序;解密算法是加密算法的逆变换。
上述用于网络与信息安全的加密方法,其加密过程包括以下步骤:
a.构造S盒Sbox(X)和逆S盒Sbox-1(Y):
对任意输入字节X,S盒的输出为:Y=Sbox(X)=M2(M1X)239+′9b′
S盒的逆变换为:
Figure G2010100333425D00031
其中
Figure G2010100333425D00032
Figure G2010100333425D00033
M1 -1、M2 -1分别为M1、M2的逆矩阵;
b.按下列公式计算密钥扩展常数:
Ni=hi/25+hi×22+hi×29+hi×216+hi×223+hi×230+hi×237
+hi×244+hi×251+hi×258+hi×265+hi×272+hi×279
+hi×286+hi×293+hi×2100+hi×2107+hi×2114+hi×2121
hi=′42′+i
密钥扩展常数为固定常数,计算结果为:
第0轮常数:4285 50a1 1428 850a 850a a142 2850 0a14
第1轮常数:c387 70e1 1c38 870e 870e e1c3 3870 0e1c
第2轮常数:4489 9122 2448 8912 8912 2244 4891 1224
第3轮常数:c58b b162 2c58 8b16 8b16 62c5 58b1 162c
第4轮常数:468d d1a3 3468 8d1a 8d1a a346 68d1 1a34
第5轮常数:c78f f1e3 3c78 8f1e 8f1e e3c7 78f1 1e3c
第6轮常数:4891 1224 4489 9122 9122 2448 8912 2244
第7轮常数:c993 3264 4c99 9326 9326 64c9 9932 264c
第8轮常数:4a95 52a5 54a9 952a 952a a54a a952 2a54
第9轮常数:cb97 72e5 5cb9 972e 972e e5cb b972 2e5c
第10轮常数:4c99 9326 64c9 9932 9932 264c c993 3264
第11轮常数:cd9b b366 6cd9 9b36 9b36 66cd d9b3 366c
第12轮常数:4e9d d3a7 74e9 9d3a 9d3a a74e e9d3 3a74
第13轮常数:cf9f f3e7 7cf9 9f3e 9f3e e7cf f9f3 3e7c
第14轮常数:50a1 1428 850a a142 a142 2850 0a14 4285
第15轮常数:d1a3 3468 8d1a a346 a346 68d1 1a34 468d
第16轮常数:52a5 54a9 952a a54a a54a a952 2a54 4a95
第17轮常数:d3a7 74e9 9d3a a74e a74e e9d3 3a74 4e9d
第18轮常数:54a9 952a a54a a952 a952 2a54 4a95 52a5
第19轮常数:d5ab b56a ad5a ab56 ab56 6ad5 5ab5 56ad
第20轮常数:56ad d5ab b56a ad5a ad5a ab56 6ad5 5ab5
第21轮常数:d7af f5eb bd7a af5e af5e ebd7 7af5 5ebd
第22轮常数:58b1 162c c58b b162 b162 2c58 8b16 62c5
第23轮常数:d9b3 366c cd9b b366 b366 6cd9 9b36 66cd
第24轮常数:5ab5 56ad d5ab b56a b56a ad5a ab56 6ad5
第25轮常数:dbb7 76ed ddbb b76e b76e eddb bb76 6edd
第26轮常数:5cb9 972e e5cb b972 b972 2e5c cb97 72e5
第27轮常数:ddbb b76e eddb bb76 bb76 6edd dbb7 76ed
第28轮常数:5ebd d7af f5eb bd7a bd7a af5e ebd7 7af5
第29轮常数:dfbf f7ef fdfb bf7e bf7e efdf fbf7 7efd
第30轮常数:60c1 1830 060c c183 c183 3060 0c18 8306
第31轮常数:e1c3 3870 0e1c c387 c387 70e1 1c38 870e
c.加密密钥扩展:
对于128位的数据D={d0,d1,…,d14,d15},定义S盒组合变换为:
S(D)={Sbox-1(d1),Sbox(d0),Sbox-1(d3),Sbox(d2)…,Sbox-1(d15),Sbox(d14)}
对于128位数据x,定义混淆层变换
Figure G2010100333425D00051
,这里的+,-运算为模4剩余类环上的多项式的加减法。
定义扩散层变换L:
选取数模为2,多项式模为x64+1的重模多项式环上矩阵:
Figure G2010100333425D00052
对128位数据x={a,b},其中a为x的前64位对应的多项式,b为x的后64位对应的多项式,那么如果 c d = A a b , 那么矩阵A对应的线性变换L定义为:
L(x)=L({a,b})={c,d}
加密密钥扩展时用下面公式:
k0=KE,为加密密钥;
Figure G2010100333425D00054
其中,keylun为密钥扩展迭代轮数,i=1,2,…,lun,M为128位系统参数,k0,k1,k2,…,klun为计算出的轮密钥;
d.加密运算:将明文数据按128bit分组,对最后组不足128bit补0,凑成128bit。对每一组数据Pi进行同样的加密操作,得到与之对应的密文Ci
Figure G2010100333425D00055
其中,lun为假定加解密算法迭代轮数,
Figure G2010100333425D00056
为完整轮变换,i=1,2,…,lun
Figure G2010100333425D00057
为不完整轮变换。
上述用于网络与信息安全的加密方法,其解密过程包括以下步骤:
①解密密钥扩展:
解密密钥扩展时用下面公式:
klun+1=KD为解密密钥,
Figure G2010100333425D00061
l=lun,lun-1,…,1,0
②解密运算:将密文数据按128bit分组,对每一组数据Ci进行同样的解密操作,得到与之对应的明文Pi
Figure G2010100333425D00063
得出明文后将最后一组数据加密前补的0去掉即可。
本发明分组长度和密钥长度都是128位,设计成SP网络型的叠代密码算法,SP网络的S层用一个8位输入8位输出的S盒来实现,P层是利用重模多项式矩阵乘向量设计的。P层和密钥加采用了不同代数系统下的运算,因此是非线性的,这样就增加了算法分析的难度,增强了密码算法的安全性。本发明算法经一轮变换可将每个活性字节扩散到所有位置,一轮变换扩散速度相当SMS4的四轮,相当AES的两轮,因此扩散速度比AES和SMS4快。
本算法不需要构造其他多余的表,P层的逻辑表达式可以用2级FPGA门或4级逻辑门来实现,因此硬件实现速度快且资源占用少。
硬件实现上,本算法可以在一个时钟周期内完成一轮叠代运算,如果用90纳米的工艺做成专用芯片,可以达到400M时钟频率,速率可达到12.8Gbps;如果用普通FPGA时钟可达到40M,速率可达到1.28Gbps。另外,本方法所用S盒组合变换和扩散层都具有对等变换性质,因而加密过程和解密过程采用了相同的算法,可以用同一硬件实现。综上分析,本算法用硬件实现占用资源也比AES加密算法少。
本算法在8位和64位软件平台上实现都有很高速度。在64位软件平台上算法可以利用64位的并行处理,算法用8的倍数来移位。8位的等效算法可以每次处理一个字节,也不用移位指令即可实现快速算法。因此本算法不管用硬件实现还是在不同平台下的软件实现都达到了比AES好的性能。通过C语言编程实测,在64位平台上软件算法实现,加密也可以达到512Mbps的速率。
本发明加密强度与AES相当,扩散速度比AES和SMS4快;用硬件实现节省资源,在8位和64位软件平台上实现速度快。
附图说明
下面结合附图对本发明作进一步详述。
图1是本发明加密算法总体结构;
图2是解密算法总体结构;
图3是完全轮变换结构图;
图4是不完全轮变换结构图;
图5是S盒组合变换结构图;
图6是密钥扩展算法结构图。
文中各符号为:DES、一种数据加密标准;M、系统参数;A、对等矩阵;L、扩散层变换;keylun、密钥扩展的轮数;lun、加密的轮数;K、密钥;C、密文;ki、第i轮密钥;Sbox(X)、S盒;Sbox-1(Y)、逆S盒;S(D)、S盒组合变换;Ni、第i轮密钥的密钥扩展常数;k0=KE、加密密钥;Pi、明文数据组;Ci、密文数据组;Gi(X)、完整轮变换;
Figure G2010100333425D00071
、不完整轮变换;klun+1=KD、解密密钥。混淆层变换
Figure G2010100333425D00072
,这里的+,-运算为模4剩余类环上多项式的加减法。
具体实施方式
本发明是一种高效对称的分组密码算法。该算法的分组长度为128比特,密钥长度为128比特,本算法增设了128位系统参数,为不同系统下相互隔离提供了保障,也为实现基于集成电路和分组密码算法的公开密钥密码方案提供了可能性。加密算法采用多轮SP网络型非线性迭代结构,加密轮密钥是由加密密钥用加密轮变换生成的。解密算法是加密算法的逆变换,解密密钥是加密密钥的密钥扩展最后一次输出,解密轮密钥是加密轮密钥的逆序,是由解密密钥用解密轮变换生成的。
一、本加密算法遵循了以下设计原则:
1.安全性原则
安全性原则主要是指由香农提出的混淆和扩散原则。混淆原则是指人们所设计的密码应使得密钥和明文以及密文之间的依赖关系相当复杂,以至于这种依赖关系对密码分析者来说无法利用。扩散原则是指人们所设计的密码应使得密钥的每一位数字影响密文的许多位数字,以防止对密钥进行逐段破译,而且明文的每一位数字也应该影响密文的许多位数字,以便隐蔽明文数字的统计特性。当然这种密码体制必须能抵抗现在所有的已知密码攻击。
2.易实现性原则
分组密码可以用软件和硬件来实现。硬件实现的优点是可获得高速率,软件实现的优点是灵活性强、代价低。
软件实现的设计原则:尽量使用子块和简单的运算。密码运算在子块上进行,要求子块的长度能适应软件编程,如8、16和32比特等。在软件实现中,按比特运算是难于实现的,应尽量避免使用,而对子块所进行的密码运算易于用软件实现,当然最好使用一些标准处理器所具有的基本指令,如加法、乘法和移位等。
硬件实现的设计原则:加密和解密结构应具有相似性,即加密和解密过程应该仅仅在密钥的使用方式不同,以便同样的器件既可用来加密也可用来解密。
为了满足安全性和易实现性原则,现代实用分组密码算法通常采用轮函数多次迭代的结构,如果轮函数设计适当,经过若干次迭代后可以提供必要的混乱和扩散,这种分组密码称为迭代分组密码。迭代分组密码采用的迭代方式虽然一致,但具体加解密算法的整体结构不一定相同。我们通过特殊处理,实现了加解密算法的一致性结构,使得用硬件实现时同样的器件既可用来加密也可用来解密。
二、算法的层次结构
本算法是一个分组加密算法。该算法的分组长度为128比特,密钥长度为128比特。加密算法采用多轮SP网络型非线性迭代结构,加密轮密钥是由加密密钥用加密轮变换生成的。本算法增设了128位系统参数,为不同系统下相互隔离提供了保障。解密算法是加密算法的逆变换,解密密钥是加密密钥的密钥扩展最后一次输出,解密轮密钥是加密轮密钥的逆序,是由解密密钥用解密轮变换生成的。
参看图1~图6,本算法的轮变换分为混淆层(S层)和扩散层(P层)。混淆层由密钥加和S盒组合变换以及系统参数减构成。S盒组合变换是作用在128位数据的变换,是由选定的性能良好的8输入8输出的可逆S盒变换以及其逆S盒变换,经过奇偶交换输出构成的,具有对等变换性质。扩散层采用经过精选的重模多项式矩阵来构造线性变换的,具有扩散速度快,适合64位和8位系统编程实现,也具有对等变换特性。
本算法的S核组合变换是由8个S盒和8个逆S盒交替排列的,并且相邻两个交换输出构成的。
本算法中的轮密钥是由加密密钥或解密密钥由加密密钥扩展算法或解密密钥扩展算法生成的。算法的k0为加密密钥,加密密钥扩展结构参看图6,其中i=1,2,L,lun,lun+1,输出的128位第lun+1轮轮密钥为解密密钥。用解密密钥也可以进行密钥扩展,结构与加密密钥扩展算法相同,轮密钥扩展参数顺序倒着使用即可。
三、算法的S盒构造
S盒设计通常要考虑非线性度、差分均匀度、代数次数、雪崩特性、扩散特性、可逆性和没有陷门等准则。要构造满足上述所有准则的S盒是非常困难的,现实的选择是根据设计要求适当降低一些指标,一般考虑S盒的非线性度、差分均匀度、代数次数以及有无陷门等因素。非线性度、差分均匀度和代数次数决定了算法抵抗差分密码攻击和线性密码攻击的能力,是否存在陷门是由S盒的构造函数确定的。S盒的构造一般采用人们熟悉的数学函数,以使人们相信算法不存在陷门。这些数学函数包括指数函数和对数函数、有限域GF(2n)上的逆映射、有限域上的幂函数等。我们采用的是有限域的幂函数、线性变换和仿射变换复合构造的。
S盒是任何密码网络的核心构件,它的好坏直接影响密码体制的安全性,目前对S盒的设计并没有一个完备要求,但总的希望是增强S盒的非线性度和某种差分均匀特性,并具有一定的运算速度。设计S盒通常有四种方法,我们采用数学工具生成。根据数学方法构造满足特定密码需要的可度量S盒,使整个体制抗击现有的各种攻击。
AES密码算法的S盒是有限域的逆多项式再加放射变换符合而成,可以证明其安全性。我们设计的S盒也采取了数学合成方法,主要选择了有限域的幂运算,以及有限域的仿射变换复合而成。
首先,我们把一个8位二进制字节,看作8个比特的序列.每个字节b由{b7,b6,b5,b4,b3,b2,b1,b0},8个比特组成,它是有限域GF(28)中的一个元素,并且可以看作系数在素域{0,1}中的多项式:
β(x)=b7x7+b6x6+b5x5+b4x4+b3x3+b2x2+b1x+b0
有限域GF(28)中最基本的两种操作是加法和乘法,在多项式表示里,加法运算等价于以字节为单位的按位异或运算。GF(28)中的乘法没有简单的以字节为单位的运算相对应,这种运算是模乘运算,其中模多项式的次数为8并且16进制的表示为‘11B’。即:
Figure G2010100333425D00101
有了上述两种有限域GF(28)中的基本运算,下面我们开始介绍我们的S盒。首先是有限域GF(28)中的幂运算,对任意字节X=x7x7+x6x6+L+x1x+x0,可以看作有限域GF(28)的元素,由于有限域的任何非零元素X都有X255=1,所以将非零X变换为Y=X239,此时Y239=(X239)239=X57121=X·X57120=X·X255×224=X·1224=X,对于X=0,X和Y都为0,因此Y=X239的逆变换为X=Y239。如果只用这个表达式构造S盒,表达式太简单,为改善这个缺陷,我们引入两个GF(2)矩阵:
Figure G2010100333425D00102
Figure G2010100333425D00103
对任意输入字节X,Y=M2(M1X)239+′9b′,作为S盒的输出。
此时S盒的逆变换为:
可以计算出这两个矩阵的逆矩阵为:
Figure G2010100333425D00112
Figure G2010100333425D00113
通过编程计算S盒和逆S盒数据如表1和表2.
表1 采用16进制表示的S盒中数据表
  0   1   2   3   4   5   6   7   8   9   a   b   c   d   e   f
  0   9b   ba   29   13   63   6d   f8   e8   28   f3   7f   98   d1   93   a4   6f
  1   dd   4c   f6   3b   3a   e2   81   ae   e7   69   c0   ca   86   9d   fa   89
  2   55   1d   cf   94   1a   17   62   0b   61   35   ee   c4   fd   52   ea   09
  3   12   c6   b0   74   64   57   77   fb   7c   c7   af   cd   bf   b9   82   43
  4   eb   47   46   07   bc   75   6a   9a   c8   a2   02   50   0a   7e   e9   90
  5   59   34   fc   42   2b   d6   5f   f7   d0   d5   ff   8a   00   ed   37   79
  6   e1   66   03   24   41   d4   c9   a9   4b   f2   e5   b5   87   73   20   db
  7   ce   08   26   95   91   3c   cc   0f   2a   a3   7b   58   22   be   23   e4
  8   9e   5e   8e   6c   ab   3d   0d   6b   b1   83   a7   54   ec   4d   01   a8
  9   f5   ad   40   e0   67   b4   a6   dc   2d   72   b8   7d   45   0e   c5   71
  a   31   df   5d   18   8c   60   8f   51   27   6e   a1   84   97   80   b2   8d
  b   d3   bb   9c   1f   4a   aa   16   5a   25   c3   85   d8   39   e6   32   ef
  c   04   1b   b7   96   f9   4e   49   f4   f0   ac   48   33   f1   68   a5   b6
  d   d7   36   e3   06   99   65   cb   d2   2c   8b   bd   3f   53   30   15   19
  e   88   d9   1e   3e   70   a0   56   7a   44   5c   21   2e   10   b3   1c   de
  f   fe   92   2f   76   da   5b   05   9f   14   c1   38   78   4f   c2   11   0c
表2采用16进制表示的逆S盒中数据表
  0   1   2   3   4   5   6   7   8   9   a   b   c   d   e   f
  0   5c   8e   4a   62   c0   f6   d3   43   71   2f   4c   27   ff   86   9d   77
  1   ec   fe   30   03   f8   de   b6   25   a3   df   24   c1   ee   21   e2   b3
  2   6e   ea   7c   7e   63   b8   72   a8   08   02   78   54   d8   98   eb   f2
  3   dd   a0   be   cb   51   29   d1   5e   fa   bc   14   13   75   85   e3   db
  4   92   64   53   3f   e8   9c   42   41   ca   c6   b4   68   11   8d   c5   fc
  5   4b   a7   2d   dc   8b   20   e6   35   7b   50   b7   f5   e9   a2   81   56
  6   a5   28   26   04   34   d5   61   94   cd   19   46   87   83   05   a9   0f
  7   e4   9f   99   6d   33   45   f3   36   fb   5f   e7   7a   38   9b   4d   0a
  8   ad   16   3e   89   ab   ba   1c   6c   e0   1f   5b   d9   a4   af   82   a6
  9   4f   74   f1   0d   23   73   c3   ac   0b   d4   47   00   b2   1d   80   f7
  a   e5   aa   49   79   0e   ce   96   8a   8f   67   b5   84   c9   91   17   3a
  b   32   88   ae   ed   95   6b   cf   c2   9a   3d   01   b1   44   da   7d   3c
  c   1a   f9   fd   b9   2b   9e   31   39   48   66   1b   d6   76   3b   70   22
  d   58   0c   d7   b0   65   59   55   d0   bb   e1   f4   6f   97   10   ef   a1
  e   93   60   15   d2   7f   6a   bd   18   07   4e   2e   40   8c   5d   2a   bf
  f   c8   cc   69   09   c7   90   12   57   06   c4   1e   37   52   2c   f0   5a
经过编程序计算验证,这样构造的S盒和逆S盒具有很好的密码学性能:布尔代数是7次的,有限域次数是254次,并且具有255项的复杂度,差分均匀度为4,鲁棒度为0.984375,非线性度112,扩散特性最大绝对值为16,循环谱的绝对值最大值为32,零谱个数17,S盒和逆S盒都不存在线性结构,没有不动点,变换群可分解成107阶、70阶、34阶、23阶、15阶、5阶和2阶的7个轮换的积。这些特性保证了加密算法抵抗差分密码攻击和线性密码攻击。
四、算法的混淆层
本算法为分块密码算法,数据块大小为二进制128位,即16字节,可以看做8个字,也可以看作4个双字,还可以看作64位无符号整数。
例如:
数据块按字节数据为:
3B,1A,EC,2D,EE,33,12,AA,ED,BA,54,96,52,B1,3A,A2
按字将表示:
1A3B,2DEC,33EE,AA12,BAED,9654,B152,A23A
按双字将表示:
2DEC1A3B,AA1233EE,9654BAED,A23AB152
按64位无符号整数表示:
AA1233EE2DEC1A3B A23AB1529654BAED
本加密算法的加密密钥和系统参数均为二进制128位,用K={K0,K1,L,K15}表示密钥,其中Ki为8位的字节,用M={M0,M1,L,M15}表示系统参数,其中Mi为8位的字节,在算法中K和M和数据块大小、排列次序一样。
混合层由密钥加和S盒组合变换以及系统参数减构成。为了实现加解密算法的对称性,S盒组合变换设计成对等的。S盒组合变换由上面介绍的S盒和逆S盒构成。对于128位的数据D={d0,d1,L,d14,d15},定义为:
S(D)={Sbox-1(d1),Sbox(d0),Sbox-1(d3),Sbox(d2)L,Sbox-1(d15),Sbox(d14)}
其中Sbox(x)为上面定义的S盒,Sbox-1(x)为逆S盒。
这样定义的S盒组合变换有如下性质:
S(S(D))=S({Sbox-1(d1),Sbox(d0),L,Sbox-1(d15),Sbox(d14)})
={Sbox-1(Sbox(d0)),Sbox(Sbox-1(d1)),L,Sbox-1(Sbox(d14)),Sbox(Sbox-1(d15))}
={d0,d1,L,d14,d15}=D
也就是S-1=S。
这样用硬件实现加解密时,就可以利用同一部件实现S盒组合变换了,AES算法不具有这样的特性,因此加密和解密算法不能共用同一部件,用硬件实现时就比我们的算法多用一倍资源。
通常分组密码算法设计都是将密钥异或到数据中的,是为了算法用硬件快速实现,而我们的算法有一个系统参数和一个密钥,分别在S盒组合变换和P层的线性变换两边,由于P层的线性变换和异或运算同属于GF(2)下的代数系统,线性变换和异或变换满足分配律,也就是右边的系统参数可以穿过线性变换跑到左边,可以与加密密钥运算合并为一个参数,这样就失去了算法的特定意义。为此,密钥加运算就不能选异或运算了,为了用硬件快速实现算法,我们选择了与异或最为接近的模4剩余类环上的多项式加作为密钥加。
我们把128位二进制数据看成是64个2位的二进制数,它对应一个不高于63次的多项式,两个128位数的加减定义为它们对应的多项式的加减,结果为多项式的系数对应的128位二进制数。
为了加解密算法的一致性,我们设计的算法在S盒组合变换左边加上密钥K,在S盒组合变换右边减去系统参数M,这时算法的混淆层为:
Y=SlayerK,M(X)=S(X+K)-M,这里的+,-运算为模4剩余类环上的多项式的加减法;
由此可以推得Y+M=S(X+K),
X+K=S-1(Y+M)=S(Y+M)
X=S(Y+M)-K
这时混淆层的逆变换为:
X=SlayerK,M -1(Y)=S(Y+M)-K=SlayerM,K(Y)
因此混淆层的逆变换有如下性质:
(SlayerK,M)-1=SlayerM,K
这样设计的混淆层加密和解密算法是很相似的,用硬件实现时只需添加两组二选一部件就可共用整个混淆层了。
五、算法的扩散层
算法的扩散层也叫做P层,是SP网络型密码的主要部件,我们选用了一个特殊的线性变换来实现。为了简化硬件实现,需要找一个对等的线性变换,为了使之能够适合软硬件多种平台快速计算,需要寻找用字节计算的线性变换。为此,P层采用了重模多项式矩阵与向量相乘,选取重模的数模为2,多项式模为x64+1。选定重模多项式环后,任何64位二进制数都对应一个次数不超过63次的多项式。在这个重模多项式环中,每个多项式的次数都不超过63,因此,这个重模多项式环的元素与所有的64位二进制数是一一对应的。对应关系是从高到低写下多项式的系数,有的项系数为1,没有的项系数为0,不能缺少。
我们选定矩阵
Figure G2010100333425D00151
可以验证矩阵A满足A2=I,I为单位矩阵。
对128位数据x={a,b},其中a为x的前64位对应的多项式,b为x的后64位对应的多项式。如果 c d = A a b , 那么矩阵A对应的线性变换L定义为:
L(x)=L({a,b})={c,d}
可以证明在64位系统下,c,d可以用如下表达式计算:
c=a⊕(a<<<8)⊕(a<<<16)⊕(a<<<24)⊕(a<<<32)
⊕(a<<<40)⊕(a<<<48)⊕(a<<<56)
⊕(b<<<8)⊕(b<<<16)⊕(b<<<24)⊕(b<<<32)
⊕(b<<<40)⊕(b<<<48)⊕(b<<<56)
d=(a<<<8)⊕(a<<<16)⊕(a<<<24)⊕(a<<<32)
⊕(a<<<40)⊕(a<<<48)⊕(a<<<56)
⊕b⊕(b<<<8)⊕(b<<<16)⊕(b<<<24)⊕(b<<<32)
⊕(b<<<40)⊕(b<<<48)⊕(b<<<56)
如果令
h=a⊕(a<<<8)⊕(a<<<16)⊕(a<<<24)⊕(a<<<32)
⊕(a<<<40)⊕(a<<<48)⊕(a<<<56)
⊕b⊕(b<<<8)⊕(b<<<16)⊕(b<<<24)⊕(b<<<32)
⊕(b<<<40)⊕(b<<<48)⊕(b<<<56)
则c=h⊕b,d=h⊕a,而h的八个字节都一样,即为a和b的16个字节的异或代码和。
因此在64位的系统下,线性变换L可以如下实现:
h
Figure G2010100333425D00161
a⊕b,h
Figure G2010100333425D00162
h⊕(h<<<32),h
Figure G2010100333425D00163
h⊕(h<<<16),h
Figure G2010100333425D00164
h⊕(h<<<8)
c
Figure G2010100333425D00165
hb,dh⊕a
以上表达式的
Figure G2010100333425D00168
为计算机的赋值符号,运算⊕为GF(2)中的加,即为计算机的异或运算,<<<为循环左移运算,这两种运算在计算机中都是一条指令,并且表达式的项数不多,所以在64位的系统下,执行起来相当快。
在8位系统下,可以证明线性变换的等价变换为:
如果将128位数据看成16个8位数据x={x0,x1,L,x14,x15},用L表示该线性变换,则算法如下:
L(x)={y0,y1,L,y14,y15}如果令u=d0⊕d1⊕L⊕d14⊕d15
Figure G2010100333425D00169
因此也有很高的效率。
由于h的8个字节都是所有输入字节的异或代码和,用硬件实现起来可以共用资源,只需设计8位的16字节异或器件即可,然后将输出复制16份,再分别与输入异或,交换左右的64位即可,这样的设计只占1/16的硬件资源。总之该算法不管是用硬件还是软件实现,资源和速度都可以达到很好的性能,都比AES好。
由于L变换是对等变换,所以它的逆变换就是本身,即:
L-1=L
这样用硬件实现加解密时,P层就可以利用同一部件实现了。
六、算法描述:
本发明的加密算法是128位分组密码算法,我们用keylun表示密钥扩展的轮数,用lun表示加密的轮数。根据具体加密强度和速度要求,密钥扩展和加解密的轮数可以在4-31之间选取。根据密码分析,本算法的6轮迭代,相当AES的11轮加密强度。通常选取6轮迭代即可。密钥K为128位,系统参数M为128位,一组的明文P为128位,密文C为128位,每一个轮密钥ki都为128位,这里i=1,2,…,lun我们用S表示S盒组合变换,L表示P层的线性变换+表示Z4[x]下的多项式加,-表示Z4[x]下的多项式减,Z4[x]表示模4的剩余类环上的多项式环,则密钥扩展算法和加解密算法描述如下:
1)密钥扩展算法
设密钥扩展变换的完整轮变换为
Figure G2010100333425D00171
不完整轮变换为
Figure G2010100333425D00172
这里:
其中:Ni为第i轮密钥的密钥扩展常数
Ni=hi/25+hi×22+hi×29+hi×216+hi×223+hi×230+hi×237
+hi×244+hi×251+hi×258+hi×265+hi×272+hi×279
+hi×286+hi×293+hi×2100+hi×2107+hi×2114+hi×2121
hi=′42′+i
加密密钥扩展是由加密密钥推出轮密钥和解密密钥的递推过程:
k0=KE
Figure G2010100333425D00175
这里i=1,2,…,lun,lun+1。
其中k0=KE,为加密密钥,k1,k2,…klun为轮密钥,klun+1=KD为解密密钥。解密密钥扩展是由解密密钥推出轮密钥和加密密钥的递推过程:
klun+1=KD
Figure G2010100333425D00177
Figure G2010100333425D00181
这里i=lun+1,lun,…,2,1,由此得到klun,klun-1,…,k2,k1为轮密钥,k0=KE为加密密钥。
2)加解密算法
设加密扩展变换的完整轮变换为:
Figure G2010100333425D00182
i=1,2,…,lun
不完整轮变换为:
Figure G2010100333425D00183
这里:
Figure G2010100333425D00184
其中ki(i=1,2,…,lun)为128位的轮密钥,由密钥扩展算法事先计算得到。
加密运算为:
解密运算为:
七、算法实现
假定加解密算法迭代轮数为lun,密钥扩展迭代轮数为keylun,加解密实现如下:
步骤1:构造S盒和逆S盒数据表格,可以用公式计算,也可以把表1和表2的数据直接定义为常数数组。
步骤2:构造密钥扩展常数,按下列公式计算
Ni=hi/25+hi×22+hi×29+hi×216+hi×223+hi×230+hi×237
+hi×244+hi×251+hi×258+hi×265+hi×272+hi×279
+hi×286+hi×293+hi×2100+hi×2107+hi×2114+hi×2121
hi=′42′+i
密钥扩展常数为固定常数,计算结果为:
第0轮常数:4285 50a1 1428 850a 850a a142 2850 0a14
第1轮常数:c387 70e1 1c38 870e 870e e1c3 3870 0e1c
第2轮常数:4489 9122 2448 8912 8912 2244 4891 1224
第3轮常数:c58b b162 2c58 8b16 8b16 62c5 58b1 162c
第4轮常数:468d d1a3 3468 8d1a 8d1a a346 68d1 1a34
第5轮常数:c78f f1e3 3c78 8f1e 8f1e e3c7 78f1 1e3c
第6轮常数:4891 1224 4489 9122 9122 2448 8912 2244
第7轮常数:c993 3264 4c99 9326 9326 64c9 9932 264c
第8轮常数:4a95 52a5 54a9 952a 952a a54a a952 2a54
第9轮常数:cb97 72e5 5cb9 972e 972e e5cb b972 2e5c
第10轮常数:4c99 9326 64c9 9932 9932 264c c993 3264
第11轮常数:cd9b b366 6cd9 9b36 9b36 66cd d9b3 366c
第12轮常数:4e9d d3a7 74e9 9d3a 9d3a a74e e9d3 3a74
第13轮常数:cf9f f3e7 7cf9 9f3e 9f3e e7cf f9f3 3e7c
第14轮常数:50a1 1428 850a a142 a142 2850 0a14 4285
第15轮常数:d1a3 3468 8d1a a346 a346 68d1 1a34 468d
第16轮常数:52a5 54a9 952a a54a a54a a952 2a54 4a95
第17轮常数:d3a7 74e9 9d3a a74e a74e e9d3 3a74 4e9d
第18轮常数:54a9 952a a54a a952 a952 2a54 4a95 52a5
第19轮常数:d5ab b56a ad5a ab56 ab56 6ad5 5ab5 56ad
第20轮常数:56ad d5ab b56a ad5a ad5a ab56 6ad5 5ab5
第21轮常数:d7af f5eb bd7a af5e af5e ebd7 7af5 5ebd
第22轮常数:58b1 162c c58b b162 b162 2c58 8b16 62c5
第23轮常数:d9b3 366c cd9b b366 b366 6cd9 9b36 66cd
第24轮常数:5ab5 56ad d5ab b56a b56a ad5a ab56 6ad5
第25轮常数:dbb7 76ed ddbb b76e b76e eddb bb76 6edd
第26轮常数:5cb9 972e e5cb b972 b972 2e5c cb97 72e5
第27轮常数:ddbb b76e eddb bb76 bb76 6edd dbb7 76ed
第28轮常数:5ebd d7af f5eb bd7a bd7a af5e ebd7 7af5
第29轮常数:dfbf f7ef fdfb bf7e bf7e efdf fbf7 7efd
第30轮常数:60c1 1830 060c c183 c183 3060 0c18 8306
第31轮常数:e1c3 3870 0e1c c387 c387 70e1 1c38 870e
步骤3:根据系统参数和加密密钥或解密密钥进行密钥扩展
E3:加密密钥扩展
加密密钥扩展时用下面公式:
k0=KE,为加密密钥;
Figure G2010100333425D00201
其中
Figure G2010100333425D00202
i=1,2,…,lun,M为128位系统参数,Ni为第i个128位密钥扩展常数,数值为步骤2计算的常数。
k0,k1,k2,…,klun为计算出的轮密钥,每个都为128位2进制数。
加密密钥扩展详细步骤如下:
以下表达式的
Figure G2010100333425D00203
为计算机的赋值符号。
步骤E3.1:赋初值
i
Figure G2010100333425D00204
1;k0
Figure G2010100333425D00205
KE
步骤E3.2:轮变换
E3.2.1.m1
E3.2.2:ki ki-1+Ni,其中加法为Z4[x]的加法。
E3.2.3:把ki看成16个8位的二进制数ki={d0,d1,L,d14,d15},做S盒组合变换,对于128位的数据ki={d0,d1,L,d14,d15},
ki
Figure G2010100333425D00212
S(ki)={Sbox-1(d1),Sbox(d0),L,Sbox-1(d15),Sbox(d14)}
其中Sbox(x)为上面定义的S盒,Sbox-1(x)为逆S盒,查表可以得到。
E3.2.4:ki ki-M,其中减法为Z4[x]的减法。
E3.2.5:如果m<keylun转E3.2.6否则转步骤E3.3
E3.2.6:做L变换
如果在8位系统下运行将128位ki看作16个字节,ki={x0,x1,L,x14,x15},则算法如下:
ki
Figure G2010100333425D00214
L(ki)={y0,y1,L,y14,y15}
如果令u=d0⊕d1⊕L⊕d14⊕d15
如果在64位系统下运行将128位数据看作2个64位无符号整数ki={a,b},
线性变换ki
Figure G2010100333425D00216
L(ki)=L{a,b}={c,d}可以如下实现:
ha⊕b,h
Figure G2010100333425D00218
h⊕(h<<<32),h
Figure G2010100333425D00219
h⊕(h<<<16),h
Figure G2010100333425D002110
h⊕(h<<<8)
c
Figure G2010100333425D002111
h
Figure G2010100333425D002112
b,d
Figure G2010100333425D002113
h⊕a
E3.2.7:m
Figure G2010100333425D002114
m+1转步骤E3.2.2
E3.3:ii+1,如果i≤lun+1转步骤E3.2否则转步骤E3.4。
E3.4:密钥扩展结束,此时
k0=kE为加密密钥,k1,k2,L,klun为加密时的轮密钥,将它们保存起来,加密时用。klun+1=kD为输出的解密密钥,将其输出作为解密密钥使用。
D3:解密密钥扩展
解密密钥扩展时用下面公式:
klun+1=KD
Figure G2010100333425D00221
i=lun,lun-1,…,1,0
其中L变换和Slayer变换同上。
解密密钥扩展详细步骤如下:
步骤D3.1:赋初值
i
Figure G2010100333425D00222
lun;klun+1 KD
步骤D3.2:轮变换
D3.2.1:m
Figure G2010100333425D00224
1
D3.2.2:ki
Figure G2010100333425D00225
ki+1+M,其中加法为Z4[x]的加法。
D3.2.3:把ki看成16个8位的二进制数ki={d0,d1,…,d14,d15},做S盒组合变换,对于128位的数据ki={d0,d1,…,d14,d15},
ki
Figure G2010100333425D00226
S(ki)={Sbox-1(d1),Sbox(d0),…,Sbox-1(d15),Sbox(d14)}
其中Sbox(x)为上面定义的S盒,Sbox-1(x)为逆S盒,查表可以得到。
D3.2.4:ki
Figure G2010100333425D00227
ki-Ni,其中减法为Z4[x]的减法。
D3.2.5:如果m<keylun转D3.2.6否则转步骤D3.3
D3.2.6:做L变换
如果在8位系统下运行将128位ki看作16个字节,ki={x0,x1,…,x14,x15},则算法如下:
ki
Figure G2010100333425D00228
L(ki)={y0,y1,…,y14,y15}
如果令u=d0⊕d1⊕…⊕d14⊕d15
如果在64位系统下运行将128位数据看作2个64位无符号整数ki={a,b},线性变换ki
Figure G2010100333425D002210
L(ki)=L{a,b}={c,d}可以如下实现:h
Figure G2010100333425D002211
a⊕b,h
Figure G2010100333425D002212
h⊕(h<<<32),h
Figure G2010100333425D002213
h⊕(h<<<16),h
Figure G2010100333425D002214
h⊕(h<<<8)
c
Figure G2010100333425D002215
h
Figure G2010100333425D002216
b,d
Figure G2010100333425D002217
h⊕a
D3.2.7:m
Figure G2010100333425D00231
m+1转步骤D3.2.2
D3.3:i
Figure G2010100333425D00232
i-1,如果i>0转步骤D3.2否则转步骤D3.4。
D3.4:密钥扩展结束,此时
klun+1=kD为解密密钥,k1,k2,…,klun为解密时的轮密钥,将它们保存起来,解密时用。
加密运算步骤4:将明文数据按128bit分组,对最后组不足128bit补0,凑成128bit。对每一组数据进行同样的加密操作:
Figure G2010100333425D00233
其中L变换和Slayer变换同上,就得到密文数据。
加密算法详细步骤如下:
E4:加密
假定输入明文P
步骤E4.1:赋初值
i
Figure G2010100333425D00234
1;
步骤E4.2:轮变换
E4.2.1:PP+ki,其中加法为Z4[x]的加法。
E4.2.2:把P看成16个8位的二进制数P={d0,d1,…,d14,d15},做S盒组合变换,对于128位的数据P={d0,d1,…,d14,d15},
P
Figure G2010100333425D00236
S(P)={Sbox-1(d1),Sbox(d0),…,Sbox-1(d15),Sbox(d14)}
其中Sbox(x)为上面定义的S盒,Sbox-1(x)为逆S盒,查表可以得到。
E4.2.3:P
Figure G2010100333425D00237
P-M,其中减法为Z4[x]的减法。
E4.2.4:如果i<lun转E4.2.5否则转步骤E4.3
E4.2.5:做L变换
如果在8位系统下运行将128位P看作16个字节,P={x0,x1,…,x14,x15},则算法如下:
P
Figure G2010100333425D00238
L(P)={y0,y1,…,y14,y15}
如果令u=d0⊕d1⊕…⊕d14⊕d15
Figure G2010100333425D00241
如果在64位系统下运行将128位数据看作2个64位无符号整数P={a,b},
线性变换P
Figure G2010100333425D00242
L(P)=L{a,b}={c,d}可以如下实现:
h
Figure G2010100333425D00243
a⊕b,h
Figure G2010100333425D00244
h⊕(h<<<32),h
Figure G2010100333425D00245
h⊕(h<<<16),h
Figure G2010100333425D00246
h⊕(h<<<8)
c
Figure G2010100333425D00247
h
Figure G2010100333425D00248
b.d
Figure G2010100333425D00249
h⊕a
E4.2.6:ii+1,转步骤E4.2。
E4.3:加密结束,输出密文C
Figure G2010100333425D002411
P。
解密运算步骤4:
将密文数据按128bit分组,对每一组数据进行同样的解密操作:
Figure G2010100333425D002412
得出解密后明文将最后一组加密前补的0去掉。
D4:解密
假定输入密文为C。
步骤D4.1:赋初值
i
Figure G2010100333425D002413
lun;
步骤D4.2:轮变换
D4.2.1:CC+M,其中加法为Z4[x]的加法。
D4.2.2:把C看成16个8位的二进制数C={d0,d1,…,d14,d15},做S盒组合变换,对于128位的数据C={d0,d1,…,d14,d15},
C
Figure G2010100333425D002415
S(C)={Sbox-1(d1),Sbox(d0),…,Sbox-1(d15),Sbox(d14)}
其中Sbox(x)为上面定义的S盒,Sbox-1(x)为逆S盒,查表可以得到。
D4.2.3:C
Figure G2010100333425D002416
C-ki,其中减法为Z4[x]的减法。
D4.2.4:如果i>0转D4.2.5否则转步骤D4.3
D4.2.5:做L变换
如果在8位系统下运行将128位P看作16个字节,P={x0,x1,…,x14,x15},则算法如下:
P
Figure G2010100333425D00251
L(P)={y0,y1,L,y14,y15}
如果令u=d0⊕d1⊕L⊕d14⊕d15
如果在64位系统下运行将128位数据看作2个64位无符号整数P={a,b},
线性变换P
Figure G2010100333425D00253
L(P)=L{a,b}={c,d}可以如下实现:
h
Figure G2010100333425D00254
a⊕b,h
Figure G2010100333425D00255
h⊕(h<<<32),hh⊕(h<<<16),h
Figure G2010100333425D00257
h⊕(h<<<8)
c
Figure G2010100333425D00258
h
Figure G2010100333425D00259
b,d
Figure G2010100333425D002510
h⊕a
D4.2.6:i
Figure G2010100333425D002511
i-1,转步骤D4.2
D4.3:加密结束,输出解密后明文P
Figure G2010100333425D002512
C。
八、加密实例:
系统参数:b572e618,78ba 51d4,a96b 45bc,0cb337bb
加密密钥:fabe03fa,a544bea5,5db07e5d,1e03b01e
明文数据:29,00,23,48,be,18,84,67,e1,4a,6c,3d,d6,2c,ae,7252,69,90,5f,49,16,f1,6d,f1,5a,bb,41,e9,26,eb,01b3,0b,a6,2e,db,12,3c,15,87,7e,0c,39,3e,0f,99,00密钥扩展8轮,加解密7轮计算结果:
首先进行密钥扩展,
密钥扩展第1轮输出=da871893,a8800a3f,e77aaed8,f79e4030
密钥扩展第2轮输出=e9d8489b,a0b184d3,20a0c498,1307f7d8
密钥扩展第3轮输出=a8e85069,a80dddee,d7f7a85a,188532f4
密钥扩展第4轮输出=91c29127,6789cd64,a08b5987,6a8c0e3f
密钥扩展第5轮输出=3de4fdb9,a52965c2,95c12c60,175ece3c
密钥扩展第6轮输出=1cb80265,01cb5275,5790d8cc,7bba1971
密钥扩展第7轮输出=47b7aeb6,f702ef01,d5e0d1b7,b845ccbd
密钥扩展第8轮输出=3345cb81,461a88b4,d75a44ae,1e7a7a69
密钥扩展结果:
第0轮的轮密钥输出:b688a297,07c1ef1e,084f0122,0437e000
第1轮的轮密钥输出:355a2da3,73a8b65a,aebbf56f,3d567f9b
第2轮的轮密钥输出:ca5e1a1c,9da8be1c,57b4371b,81cb4197
第3轮的轮密钥输出:af54331f,13304eee,1b32ba51,078b09d4
第4轮的轮密钥输出:e6fa9589,6d6d98b3,8167ca73,ec8a70f3
第5轮的轮密钥输出:6736efad,178ff487,3fa28827,a538f89d
第6轮的轮密钥输出:92fe8449,9f13e869,4b60fb55,968372d2
第7轮的轮密钥输出:f5408859,9f96df68,e7350bbe,72255479
第8轮的轮密钥输出:a56f808d,0faed41d,8b6e6f0c,86a000d5
第9轮的轮密钥输出:a4ebc7ae,d0198b33,256be9de,5f8ebc08
加密前明文:29,00,23,48,be,18,84,67,e1,4a,6c,3d,d6,2c,ae,72
加密后密文:9d,40,21,c4,2d,3f,f7,c8,31,f4,f5,1e,02,f4,cc,55
解密后明文:29,00,23,48,be,18,84,67,e1,4a,6c,3d,d6,2c,ae,72
加密前明文:52,69,90,5f,49,16,f1,6d,f1,5a,bb,41,e9,26,eb,01
加密后密文:2a,69,2f,8f,7b,e3,08,44,b2,b8,6b,b7,8c,0a,5b,82
解密后明文:52,69,90,5f,49,16,f1,6d,f1,5a,bb,41,e9,26,eb,01
加密前明文:b3,0b,a6,2e,db,12,3c,15,87,7e,0c,39,3e,0f,99,00
加密后密文:e8,72,a1,b0,5c,f4,db,68,a9,f1,d6,e0,ad,19,85,77
解密后明文:b3,0b,a6,2e,db,12,3c,15,87,7e,0c,39,3e,0f,99,00。

Claims (3)

1.一种用于网络与信息安全的加密方法,其特征是:它采用的分组长度和密钥长度均为128比特,并增设有128位系统参数;加密算法为多轮由混淆层和扩散层构成的轮变换,其中最后一轮为不完全轮变换,所述不完全轮变换仅由混淆层构成,所述混淆层由密钥加和S盒组合变换以及系统参数减构成,所述S盒组合变换由8输入8输出的可逆S盒变换以及8输入8输出的逆S盒变换经过奇偶交换输出构成;所述扩散层采用可逆重模多项式矩阵来构造线性变换;加密轮密钥是由加密密钥用加密轮变换生成的,解密轮密钥是加密轮密钥的逆序;解密算法是加密算法的逆变换;
所述混淆层的逻辑表达式采用2级FPGA门或4级逻辑门实现。
2.根据权利要求1所述用于网络与信息安全的加密方法,其特征是,其加密过程按如下步骤进行:
a. 构造S盒                                                
Figure 142450DEST_PATH_IMAGE001
和逆S盒
Figure 677337DEST_PATH_IMAGE002
对任意输入字节X,S盒的输出为: 
Figure 790786DEST_PATH_IMAGE003
S盒的逆变换为:
         
Figure 529066DEST_PATH_IMAGE004
其中
Figure 753374DEST_PATH_IMAGE005
       
Figure 188772DEST_PATH_IMAGE006
Figure 947967DEST_PATH_IMAGE008
分别为
Figure 975966DEST_PATH_IMAGE009
Figure 970598DEST_PATH_IMAGE010
的逆矩阵;
b. 按下列公式计算密钥扩展常数:
密钥扩展常数为固定常数,计算结果为:
第  0 轮常数: 4285  50a1  1428  850a  850a  a142  2850  0a14 
第  1 轮常数: c387  70e1  1c38  870e  870e  e1c3  3870  0e1c 
第  2 轮常数: 4489  9122  2448  8912  8912  2244  4891  1224 
第  3 轮常数: c58b  b162  2c58  8b16  8b16  62c5  58b1  162c 
第  4 轮常数: 468d  d1a3  3468  8d1a  8d1a  a346  68d1  1a34 
第  5 轮常数: c78f  f1e3  3c78  8f1e  8f1e  e3c7  78f1  1e3c 
第  6 轮常数: 4891  1224  4489  9122  9122  2448  8912  2244 
第  7 轮常数: c993  3264  4c99  9326  9326  64c9  9932  264c 
第  8 轮常数: 4a95  52a5  54a9  952a  952a  a54a  a952  2a54 
第  9 轮常数: cb97  72e5  5cb9  972e  972e  e5cb  b972  2e5c 
第 10 轮常数: 4c99  9326  64c9  9932  9932  264c  c993  3264 
第 11 轮常数: cd9b  b366  6cd9  9b36  9b36  66cd  d9b3  366c 
第 12 轮常数: 4e9d  d3a7  74e9  9d3a  9d3a  a74e  e9d3  3a74 
第 13 轮常数: cf9f  f3e7  7cf9  9f3e  9f3e  e7cf  f9f3  3e7c 
第 14 轮常数: 50a1  1428  850a  a142  a142  2850  0a14  4285 
第 15 轮常数: d1a3  3468  8d1a  a346  a346  68d1  1a34  468d 
第 16 轮常数: 52a5  54a9  952a  a54a  a54a  a952  2a54  4a95 
第 17 轮常数: d3a7  74e9  9d3a  a74e  a74e  e9d3  3a74  4e9d 
第 18 轮常数: 54a9  952a  a54a  a952  a952  2a54  4a95  52a5 
第 19 轮常数: d5ab  b56a  ad5a  ab56  ab56  6ad5  5ab5  56ad 
第 20 轮常数: 56ad  d5ab  b56a  ad5a  ad5a  ab56  6ad5  5ab5 
第 21 轮常数: d7af  f5eb  bd7a  af5e  af5e  ebd7  7af5  5ebd 
第 22 轮常数: 58b1  162c  c58b  b162  b162  2c58  8b16  62c5 
第 23 轮常数: d9b3  366c  cd9b  b366  b366  6cd9  9b36  66cd 
第 24 轮常数: 5ab5  56ad  d5ab  b56a  b56a  ad5a  ab56  6ad5 
第 25 轮常数: dbb7  76ed  ddbb  b76e  b76e  eddb  bb76  6edd 
第 26 轮常数: 5cb9  972e  e5cb  b972  b972  2e5c  cb97  72e5 
第 27 轮常数: ddbb  b76e  eddb  bb76  bb76  6edd  dbb7  76ed 
第 28 轮常数: 5ebd  d7af  f5eb  bd7a  bd7a  af5e  ebd7  7af5 
第 29 轮常数: dfbf  f7ef  fdfb  bf7e  bf7e  efdf  fbf7  7efd 
第 30 轮常数: 60c1  1830  060c  c183  c183  3060  0c18  8306 
第 31 轮常数: e1c3  3870  0e1c  c387  c387  70e1  1c38  870e
c. 加密密钥扩展:
对于128位的数据
Figure 105DEST_PATH_IMAGE013
,定义S盒组合变换为:
定义扩散层变换: 
选取数模为2,多项式模为
Figure 111784DEST_PATH_IMAGE016
的重模多项式环上矩阵:
Figure 294635DEST_PATH_IMAGE017
对128位数据,其中
Figure 44602DEST_PATH_IMAGE019
Figure 653438DEST_PATH_IMAGE020
的前64位对应的多项式,
Figure 149196DEST_PATH_IMAGE020
的后64位对应的多项式,那么如果
Figure 179469DEST_PATH_IMAGE022
,那么矩阵对应的线性变换
Figure 800254DEST_PATH_IMAGE015
定义为:
Figure 727759DEST_PATH_IMAGE024
加密密钥扩展时用下面公式:
Figure 866616DEST_PATH_IMAGE025
为加密密钥;
其中, 
Figure 11344DEST_PATH_IMAGE027
为密钥扩展迭代轮数,
Figure 58935DEST_PATH_IMAGE028
Figure 368693DEST_PATH_IMAGE029
为128位系统参数, 
Figure 252467DEST_PATH_IMAGE030
为计算出的轮密钥;
d. 加密运算:将明文数据按128bit分组,对最后组不足128bit补0,凑成128bit,对每一组数据
Figure 305874DEST_PATH_IMAGE031
进行同样的加密操作,得到与之对应的密文
Figure 207971DEST_PATH_IMAGE032
Figure 688630DEST_PATH_IMAGE033
其中,
Figure 292656DEST_PATH_IMAGE034
为假定加解密算法迭代轮数,
Figure 149754DEST_PATH_IMAGE035
,为完整轮变换,
Figure 906357DEST_PATH_IMAGE028
Figure 557918DEST_PATH_IMAGE036
为不完整轮变换。
3.根据权利要求1或2所述用于网络与信息安全的加密方法,其特征是,解密过程按以下步骤进行:
①解密密钥扩展:
解密密钥扩展时用下面公式:
Figure 416284DEST_PATH_IMAGE037
为解密密钥,
Figure 422603DEST_PATH_IMAGE039
②解密运算:将密文数据按128bit分组,对每一组数据进行同样的解密操作,得到与之对应的明文
Figure 89263DEST_PATH_IMAGE041
Figure 350480DEST_PATH_IMAGE042
得出明文后将最一组数据加密前补的0去掉即可。
CN 201010033342 2010-01-11 2010-01-11 一种用于网络与信息安全的加密方法 Active CN101764686B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN 201010033342 CN101764686B (zh) 2010-01-11 2010-01-11 一种用于网络与信息安全的加密方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN 201010033342 CN101764686B (zh) 2010-01-11 2010-01-11 一种用于网络与信息安全的加密方法

Publications (2)

Publication Number Publication Date
CN101764686A CN101764686A (zh) 2010-06-30
CN101764686B true CN101764686B (zh) 2013-01-02

Family

ID=42495683

Family Applications (1)

Application Number Title Priority Date Filing Date
CN 201010033342 Active CN101764686B (zh) 2010-01-11 2010-01-11 一种用于网络与信息安全的加密方法

Country Status (1)

Country Link
CN (1) CN101764686B (zh)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101944991B (zh) * 2010-09-27 2012-07-04 北京航空航天大学 一种使用对称密钥进行数据加密的加密方法
CN102025484B (zh) * 2010-12-17 2012-07-04 北京航空航天大学 一种分组密码加解密方法
CN102185692B (zh) * 2011-04-25 2012-07-04 北京航空航天大学 基于aes加密算法的多模式可重构加密方法
CN103051442B (zh) * 2012-10-16 2015-06-10 中国科学院软件研究所 采用Feistel-PG结构的密码装置及加密方法
CN103391186B (zh) * 2013-06-27 2016-02-24 清华大学 一种实现aes算法中s盒和逆s盒替换的方法
DE102015006670A1 (de) * 2014-06-26 2015-12-31 Intel Corporation Befehle und logik zum bereitstellen von kryptographischer allzweck-gf(256)-simd- arithmetikfunktionalität
SG10201405852QA (en) * 2014-09-18 2016-04-28 Huawei Internat Pte Ltd Encryption function and decryption function generating method, encryption and decryption method and related apparatuses
US9819486B2 (en) * 2014-12-19 2017-11-14 Nxp B.V. S-box in cryptographic implementation
CN106341230B (zh) * 2015-07-08 2020-08-21 吴清山 通过缩短密文长度来实现现代密码体制无条件安全的方法
CN106685637B (zh) * 2015-11-07 2019-05-28 上海复旦微电子集团股份有限公司 加/解密电路
CN105912938B (zh) * 2016-04-01 2019-02-12 青岛大学 一种求多元素逆元的计算方法及计算系统
CN107425963A (zh) * 2017-05-09 2017-12-01 上海众人网络安全技术有限公司 一种密码墙的构建方法及系统
CN107257279B (zh) * 2017-06-29 2020-02-11 广东浩云长盛网络股份有限公司 一种明文数据加密方法及设备
CN108933652B (zh) * 2018-06-11 2021-03-05 安徽工程大学 一种普通轮变换运算单元、普通轮变换电路及aes解密电路
CN108566271B (zh) * 2018-06-11 2020-12-15 安徽工程大学 复用轮变换电路、aes加密电路及其加密方法
CN109981256B (zh) * 2019-04-03 2022-08-05 华南师范大学 基于FeistelBox结构的白盒分组密码构造方法及系统
CN110266468B (zh) * 2019-05-20 2022-05-27 陕西师范大学 用于分组密码代换-置换网络块中的扩散变换方法
CN110147678B (zh) * 2019-05-21 2020-10-27 湖南大学 一种用于工控系统的数据加密方法和系统
CN111464288B (zh) * 2019-12-18 2022-09-30 安徽继远软件有限公司 一种s盒的生成方法及系统
CN112636899B (zh) * 2020-09-21 2022-03-18 中国电子科技集团公司第三十研究所 一种轻量化s盒设计方法
CN112511293B (zh) * 2020-09-21 2022-03-18 中国电子科技集团公司第三十研究所 基于比特与运算的s盒参数化设计方法及存储介质
CN113541942B (zh) * 2021-07-12 2022-06-07 西安电子科技大学 基于arx白盒分组密码的数字内容加解密方法
CN113746642B (zh) * 2021-11-08 2022-02-11 西安热工研究院有限公司 一种计算机间通信方法及系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040047466A1 (en) * 2002-09-06 2004-03-11 Joel Feldman Advanced encryption standard hardware accelerator and method

Also Published As

Publication number Publication date
CN101764686A (zh) 2010-06-30

Similar Documents

Publication Publication Date Title
CN101764686B (zh) 一种用于网络与信息安全的加密方法
Khan et al. A novel technique for the construction of strong S-boxes based on chaotic Lorenz systems
CN101938350B (zh) 一种基于组合编码的文件加密和解密的方法
CN104065474B (zh) 一种轻量级Surge分组密码实现方法
CN101951314B (zh) 对称密码加密中s-盒的设计方法
US11606189B2 (en) Method and apparatus for improving the speed of advanced encryption standard (AES) decryption algorithm
CN101895389B (zh) 采用比例计算的基于组合编码的文件加密和解密的方法
CN101848081A (zh) 一种s盒构造方法及s盒
CN103634101A (zh) 加密处理方法及设备
CN109921899B (zh) 一种完全雪崩4×4的s盒实现方法
CN104184579A (zh) 基于双伪随机变换的轻量级分组密码vh算法
CN101814985A (zh) 应用多混沌映射多动态s盒的分组密码系统
CN101841415A (zh) 一种面向字的密钥流生成方法及加密方法
CN111245598B (zh) 一种轻量级aerogel分组密码的实现方法
CN101826959B (zh) 一种面向字节的密钥流生成方法及加密方法
CN103780794A (zh) 一种基于混沌系统的图像加密改进方法
Salman et al. Creation of S-Box based One-Dimensional Chaotic Logistic Map: Colour Image Encryption Approach.
CN104320420A (zh) 一种基于aes算法的scada文件加密方法
CN106921486A (zh) 数据加密的方法和装置
CN105162580A (zh) 基于ofb模式和分组密码vh的轻量级流密码技术vho
CN101848079B (zh) 一种面向字、带记忆的序列扰动方法及加密方法
Panda et al. Encryption and Decryption algorithm using two dimensional cellular automata rules in Cryptography
Mahboob et al. An innovative technique for constructing highly non-linear components of block cipher for data security against cyber attacks
CN113691364A (zh) 一种基于位片技术的动态s盒分组密码的加密及解密方法
WO2012060685A1 (en) A method for linear transformation in substitution-permutation network symmetric-key block cipher

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C53 Correction of patent for invention or patent application
CB03 Change of inventor or designer information

Inventor after: Hu Bo

Inventor after: Li Tongliang

Inventor after: Cheng Yu

Inventor after: Li Zhengtao

Inventor after: Han Xiansheng

Inventor before: Hu Bo

Inventor before: Li Tongliang

Inventor before: Cheng Yu

COR Change of bibliographic data

Free format text: CORRECT: INVENTOR; FROM: HU BO LI TONGLIANG CHENG YU TO: HU BO LI TONGLIANG CHENG YU LI ZHENGTAO HAN XIANSHENG

C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
C41 Transfer of patent application or patent right or utility model
TR01 Transfer of patent right

Effective date of registration: 20170104

Address after: 050081 Hebei, Shijiazhuang friendship south street, building 46, No. 1

Patentee after: APPLICATION MATHEMATICS INSTITUTE, HEBEI ACADEMY OF SCIENCES

Address before: 050081 Shijiazhuang friendship Street, Hebei, building 46, No. 1

Patentee before: Shijiazhuang Development Zone Jike Shangshi Sci-Tech Co., Ltd.