一种新型密钥生成的Shield分组密码实现方法、装置及可读存储介质转让专利

申请号 : CN202010051324.3

文献号 : CN111262685B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 刘波涛李浪李秋萍张剑赵军霞刘青云李永超黄莹

申请人 : 衡阳师范学院

摘要 :

本发明公开了一种新型密钥生成的Shield分组密码实现方法、装置及可读存储介质,该方法Shield分组长度设计为128位,密钥为任意长度,加密轮函数是基于SPN结构,加密顺序依次为轮密钥加、S盒替换、行移位及列混合变换。密钥扩展函数将原始密钥分为3份,用哈希函数MD5生成3个轮密钥,分别使用在不同轮次的轮密钥加运算操作。S盒替换变换采用两个4×4的S盒进行128位数据替换变换,将数据分成32个4位单元,则随着加/解密轮数变化,数据单元分别进行对应S盒递增/递减替换操作。Shield密码其占用面积资源小,降低了保存原始密钥存储空间,通过提高密钥长度,扩大密钥空间,能很好抵抗已知攻击。

权利要求 :

1.一种新型密钥生成的Shield分组密码实现方法,其特征在于,包括以下步骤:步骤1:将128位明文/密文作为待加/解密数据加载至寄存器,进行加/解密运算;

步骤2:将所述待加/解密数据按以下步骤进行32轮迭代轮运算操作;

若输入的待加密数据进行加密运算操作,则在第1轮至第32轮迭代轮运算中的每一轮轮运算中依次对每一轮输入的待加密数据进行轮密钥加变换、S盒替换变换、行移位变换及列混合变换,以列混合变换后得到的数据作为下一轮的待加密数据,完成32轮迭代运算操作后,再进行一次轮密钥加变换,得到密文数据;

若输入的待解密数据进行解密运算操作,先将输入的待解密数据进行一次轮密钥加逆变换,然后在第1轮至第32轮迭代轮运算中的每一轮轮运算中依次对每一轮输入的待解密数据进行列混合逆变换、行移位逆变换、S盒替换逆变换及轮密钥加逆变换,以轮密钥加逆变换后得到的数据作为下一轮的待解密数据,完成32轮迭代运算操作后,得到明文数据;

所述列混合逆变换和列混合变换、行移位逆变换和行移位变换、S盒替换逆变换和S盒替换变换以及轮密钥加逆变换和轮密钥加变换均互为逆运算;

所述S盒替换变换操作具体方法如下,且S盒为具有对合性质的S盒Sb0与S盒Sb1,在加密与解密过程中,S盒Sb0与S盒Sb1元素不变:

128位需要进行S盒替换变换的中间数据被分成32个4位数据单元a1、a2、…、a31、a32,随着加/解密轮数变化,数据单元分别进行S盒Sb0与S盒Sb1递增/递减替换变换;

在加密过程的第r轮S盒替换变换中,前32-r+1个数据单元进行S盒Sb0替换操作,剩余的数据单元进行S盒Sb1;

在解密过程的第r轮S盒替换变换中,前r个数据单元进行S盒Sb0替换操作,剩余的数据单元进行S盒Sb1,1≤r≤32。

2.根据权利要求1所述的一种新型密钥生成的Shield分组密码实现方法,其特征在于,在所述轮密钥加变换与轮密钥加逆变换操作中使用的轮密钥构造过程如下:输入原始密钥Key,将原始密钥Key从高位到低位分为三个Key1、Key2与Key3子密钥,将Key1子密钥进行一次MD5哈希函数变换得到第1轮至第16轮中,轮密钥加变换中使用的128位轮密钥RKey1;

将Key2子密钥进行一次MD5哈希函数变换得到第16轮至32轮中,轮密钥加变换中使用的

128位轮密钥RKey2;

将Key3子密钥进行一次MD5哈希函数变换得到最后一次轮密钥加变换中使用的128位轮密钥RKey3。

3.根据权利要求2所述的方法,其特征在于,所述轮密钥加变换和轮密钥加逆变换的操作过程如下:轮密钥加变换操作是将明文或每一轮中间值State与轮密钥RKey以及轮常数RC进行异或运算;

轮密钥加变换如下:

轮密钥加逆变换使用轮密钥及轮常数的顺序与轮密钥加变换相反,轮密钥加逆变换如下:其中,State表示进行轮密钥加变换操作的数据,RC[i]表示轮常数RC的第i位,RC[33-i]表示轮常数RC的第33-i位。

4.一种新型密钥生成的Shield分组密码实现装置,其特征在于,包括:数据加载模块:将128位明文/密文作为待加/解密数据加载至寄存器,进行加/解密运算;

轮运算操作模块:将加载到寄存器的所述待加/解密数据进行32轮迭代轮运算操作;

若输入的待加密数据进行加密运算操作,则在第1轮至第32轮迭代轮运算中的每一轮轮运算中依次对每一轮输入的待加密数据进行轮密钥加变换单元、S盒替换变换单元、行移位变换单元及列混合变换单元,以列混合变换单元得到的数据作为下一轮的待加密数据,完成32轮迭代运算操作后,再进行一次轮密钥加变换,得到密文数据;

若输入的待解密数据进行解密运算操作,先将输入的待解密数据进行一次轮密钥加逆变换,然后在第1轮至第32轮迭代轮运算中的每一轮轮运算中依次对每一轮输入的待解密数据进行列混合逆变换单元、行移位逆变换单元、S盒替换逆变换单元及轮密钥加逆变换单元,以轮密钥加逆变换单元得到的数据作为下一轮的待解密数据,完成32轮迭代运算操作后,得到明文数据;

所述列混合逆变换单元和列混合变换单元、行移位逆变换单元和行移位变换单元、S盒替换逆变换单元和S盒替换变换单元,以及轮密钥加逆变换单元和轮密钥加变换单元均互为逆运算单元;

S盒替换变换单元的具体操作过程如下,且S盒为具有对合性质的S盒Sb0与S盒Sb1,在加密与解密过程中,S盒Sb0与S盒Sb1元素不变:

128位需要进行S盒替换变换的中间数据被分成32个4位数据单元a1、a2、…、a31、a32,随着加/解密轮数变化,数据单元分别进行S盒Sb0与S盒Sb1递增/递减替换变换;

在加密过程的第r轮S盒替换变换中,前32-r+1个数据单元进行S盒Sb0替换操作,剩余的数据单元进行S盒Sb1;

在解密过程的第r轮S盒替换变换中,前r个数据单元进行S盒Sb0替换操作,剩余的数据单元进行S盒Sb1,1≤r≤32。

5.根据权利要求4所述的装置,其特征在于,在所述轮密钥加变换单元与轮密钥加逆变换单元操作中使用的轮密钥构造过程如下:输入原始密钥Key,将原始密钥Key从高位到低位分为三个Key1、Key2与Key3子密钥,将Key1子密钥进行一次MD5哈希函数变换得到第1轮至第16轮中,轮密钥加变换中使用的128位轮密钥RKey1;

将Key2子密钥进行一次MD5哈希函数变换得到第16轮至32轮中,轮密钥加变换中使用的

128位轮密钥RKey2;

将Key3子密钥进行一次MD5哈希函数变换得到最后一次轮密钥加变换中使用的128位轮密钥RKey3。

6.根据权利要求5所述的装置,其特征在于,所述轮密钥加变换单元和轮密钥加逆变换单元的操作过程如下:轮密钥加变换单元是用于将明文或每一轮中间值State与轮密钥RKey以及轮常数RC进行异或运算;

轮密钥加变换如下:

轮密钥加逆变换使用轮密钥及轮常数的顺序与轮密钥加变换相反,轮密钥加逆变换如下:其中,State表示进行轮密钥加变换操作的数据,RC[i]表示轮常数RC的第i位,RC[33-i]表示轮常数RC的第33-i位。

7.一种可读存储介质,包括计算机程序指令,其特征在于:所述计算机程序指令被处理终端执行时使所述处理终端执行权利要求1至3任一项所述的方法。

说明书 :

一种新型密钥生成的Shield分组密码实现方法、装置及可读

存储介质

技术领域

[0001] 本发明涉及一种新型密钥生成的Shield分组密码实现方法、装置及可读存储介质。

背景技术

[0002] 近年来,世界超级计算机的发展是突飞猛进的,它的计算能力在近年来一直都是呈现指数增长,密码系统及密码算法本身的安全性收到了严重的冲击。利用强大的计算能力进行最基本的暴力攻击方法破解密码的密钥。密钥长度决定了可能的密钥数量,因此提高密钥长度,是增加了破解难度,对于DES被破解之后,采用3DES方案,目的是通过增加密钥长度来提高密码算法的安全性,而AES密码算法,在从事高机密信息加密传输,则使用密钥长度为256位的AES算法。
[0003] 分组密码可用于数据加解密、消息认证码和哈希函数的构造,因此在信息安全保障机制中扮演着非常重要的角色。目前,绝大多数密码系统在理论上遵循柯克霍夫原则,在柯克霍夫原则提出即使密码系统的任何细节已为人悉知,只要密钥未被泄露,它也应该是安全的,这表明一个密码系统的安全性仅依赖于密钥的安全性,并且原则当中提到,密钥必须易于沟通和记忆,而不需写下,且双方可以容易的改变密钥。
[0004] 在国内分组密码算法设计竞赛当中,设计目标是安全性高、可扩展性好、适应性强的分组密码,以满足多个行业领域对分组密码算法的应用需求,要求分组密码算法的分组长度与密钥长度至少分别为128位。目前分组密码算法,具有分组长度、密钥长度分别为128位的密码算法,例如AES密码算法、SM4密码算法以及一些比较知名的轻量级分组密码SKINNY与SIMON等,这些密码加密函数采用SPN结构与Feistel结构,密钥扩展函数也同样采用SPN结构或Feistel结构。而这种分组密码算法的密钥扩展函数存在问题:一是密钥长度过长,不利用保存,保存的需要花费大量的资源;二是产生的轮密钥之间有相互关联关系,暴露一些信息,容易遭受相关密钥攻击,参见文献:徐林宏,郭建胜,崔竞一,李明明.Piccolo算法的相关密钥-不可能差分攻击[J].软件学报,2019,30(8):2349-2361。另外,分组长度为128位的密码算法的S盒替换一般采用8×8的S盒,造成大量资源的开销,参见文献:王沁,梁静,齐悦.一种有效缩减AES算法S盒面积的组合逻辑优化设计[J].电子学报,2010,38(4):205-208,并且S盒是固定不动,容易遭受侧信道等攻击。

发明内容

[0005] 本发明提供了本发明涉及一种新型密钥生成的Shield分组密码实现方法、装置及可读存储介质,其目的在于,克服现有技术中的分组密码算法密钥扩展函数存在不易保存、易受攻击以及8×8的固定S盒占用资源占用多等问题。
[0006] 本发明的技术方案如下:
[0007] 一方面,一种新型密钥生成的Shield分组密码实现方法,包括以下步骤:
[0008] 步骤1:将128位明文/密文加载至寄存器,进行加/解密运算;
[0009] 步骤2:将所述待加/解密数据按以下步骤进行32轮迭代轮运算操作;
[0010] 若输入的待加密数据进行加密运算操作,则在第1轮至第32轮迭代轮运算中的每一轮轮运算中依次对每一轮输入的待加密数据进行轮密钥加变换、S盒替换变换、行移位变换及列混合变换,以列混合变换后得到的数据作为下一轮的待加密数据,完成32轮迭代运算操作后,再进行一次轮密钥加变换,得到密文数据;
[0011] 若输入的待解密数据进行解密运算操作,先将输入的待解密数据进行一次轮密钥加逆变换,然后在第1轮至第32轮迭代轮运算中的每一轮轮运算中依次对每一轮输入的待解密数据进行列混合逆变换、行移位逆变换、S盒替换逆变换及轮密钥加逆变换,以轮密钥加逆变换后得到的数据作为下一轮的待解密数据,完成32轮迭代运算操作后,得到明文数据;
[0012] 所述列混合逆变换和列混合变换、行移位逆变换和行移位变换、S盒替换逆变换和S盒替换变换以及轮密钥加逆变换和轮密钥加变换均互为逆运算。
[0013] 进一步地,所述S盒替换变换操作具体方法如下,且S盒为具有对合性质的S盒Sb0与S盒Sb1,在加密与解密过程中,S盒Sb0与S盒Sb1元素不变:
[0014] 128位需要进行S盒替换变换的中间数据被分成32个4位数据单元a1、a2、…、a31、a32,随着加/解密轮数变化,数据单元分别进行S盒Sb0与S盒Sb1递增/递减替换变换;
[0015] 在加密过程的第r轮S盒替换变换中,前32-r+1个数据单元进行S盒Sb0替换操作,剩余的数据单元进行S盒Sb1;:
[0016] 在解密过程的第r轮S盒替换变换中,前r个数据单元进行S盒Sb0替换操作,剩余的数据单元进行S盒Sb1,1≤r≤32。
[0017] 加密第1轮(32个4位数据单元进行Sb0替换变换):
[0018] State←Sb0(a1)||Sb0(a2)||Sb0(a3)||…||Sb0(a30)||Sb0(a31)||Sb0(a32)[0019] 加密第2轮(第1至第31个4位数据单元进行Sb0替换变换,第32个4位数据单元进行Sb1替换变换):
[0020] State←Sb0(a1)||Sb0(a2)||Sb0(a3)||…||Sb0(a30)||Sb0(a31)||Sb1(a32)[0021] 加密第3轮(第1至第30个4位数据单元进行Sb0替换变换,第31至第32个4位数据单元进行Sb1替换变换):
[0022] State←Sb0(a1)||Sb0(a2)||Sb0(a3)||…||Sb0(a30)||Sb1(a31)||Sb1(a32)[0023] …
[0024] 加密第31轮(第1至第2个4位数据单元进行Sb0替换变换,第3个至第32个4位数据单元进行Sb1替换变换):
[0025] State←Sb0(a1)||Sb0(a2)||Sb1(a3)||…||Sb1(a30)||Sb1(a31)||Sb1(a32)[0026] 加密第32轮(第1个4位数据单元进行Sb0替换变换,第2个至第32个4位数据单元进行Sb1替换变换):
[0027] State←Sb0(a1)||Sb1(a2)||Sb1(a3)||…||Sb1(a30)||Sb1(a31)||Sb1(a32)解密第1轮(第1个4位数据单元进行Sb0替换变换,第2个至第32个4位数据单元进行Sb1替换变换):
[0028] State←Sb0(a1)||Sb1(a2)||Sb1(a3)||…||Sb1(a30)||Sb1(a31)||Sb1(a32)[0029] 解密第2轮(第1至第2个4位数据单元进行Sb0替换变换,第3个至第32个4位数据单元进行Sb1替换变换):
[0030] State←Sb0(a1)||Sb0(a2)||Sb1(a3)||…||Sb1(a30)||Sb1(a31)||Sb1(a32)[0031] 解密第3轮(第1至第3个4位数据单元进行Sb0替换变换,第4个至第32个4位数据单元进行Sb1替换变换):
[0032] State←Sb0(a1)||Sb0(a2)||Sb0(a3)||…||Sb1(a30)||Sb1(a31)||Sb1(a32)[0033] …
[0034] 解密第31轮(第1至第31个4位数据单元进行Sb0替换变换,第32个4位数据单元进行Sb1替换变换):
[0035] State←Sb0(a1)||Sb0(a2)||Sb0(a3)||…||Sb0(a30)||Sb0(a31)||Sb1(a32)[0036] 解密第32轮(32个4位数据单元进行Sb0替换变换):
[0037] State←Sb0(a1)||Sb0(a2)||Sb0(a3)||…||Sb0(a30)||Sb0(a31)||Sb0(a32)。
[0038] 进一步地,在所述轮密钥加变换与轮密钥加逆变换操作中使用的轮密钥构造过程如下:
[0039] 输入原始密钥Key,将原始密钥Key从高位到低位分为三个Key1、Key2与Key3子密钥,将Key1子密钥进行一次MD5哈希函数变换得到第1轮至第16轮中,轮密钥加变换中使用的128位轮密钥RKey1;
[0040] 将Key2子密钥进行一次MD5哈希函数变换得到第16轮至32轮中,轮密钥加变换中使用的128位轮密钥RKey2;
[0041] 将Key3子密钥进行一次MD5哈希函数变换得到最后一次轮密钥加变换中使用的128位轮密钥RKey3。
[0042] 轮密钥的构造,是将分得的子密钥通过MD5哈希函数进行运算得到轮密钥;
[0043] 进一步地,所述轮密钥加变换和轮密钥加逆变换的操作过程如下:
[0044] 轮密钥加变换操作是将明文或每一轮中间值State与轮密钥RKey以及轮常数RC进行异或运算;
[0045] 轮密钥加变换如下:
[0046]
[0047] 轮密钥加逆变换使用轮密钥及轮常数的顺序与轮密钥加变换相反,轮密钥加逆变换如下:
[0048]
[0049] 其中,State表示进行轮密钥加变换操作的数据,RC[i]表示轮常数RC的第i位,RC[33-i]表示轮常数RC的第33-i位。
[0050] 一方面,一种新型密钥生成的Shield分组密码实现装置,包括:
[0051] 数据加载模块:将128位明文/密文加载至寄存器,进行加/解密运算;
[0052] 轮运算操作模块:将加载到寄存器的所述待加/解密数据进行32轮迭代轮运算操作;
[0053] 若输入的待加密数据进行加密运算操作,则在第1轮至第32轮迭代轮运算中的每一轮轮运算中依次对每一轮输入的待加密数据进行轮密钥加变换单元、S盒替换变换单元、行移位变换单元及列混合变换单元,以列混合变换单元得到的数据作为下一轮的待加密数据,完成32轮迭代运算操作后,再进行一次轮密钥加变换,得到密文数据;
[0054] 若输入的待解密数据进行解密运算操作,先将输入的待解密数据进行一次轮密钥加逆变换,然后在第1轮至第32轮迭代轮运算中的每一轮轮运算中依次对每一轮输入的待解密数据进行列混合逆变换单元、行移位逆变换单元、S盒替换逆变换单元及轮密钥加逆变换单元,以轮密钥加逆变换单元得到的数据作为下一轮的待解密数据,完成32轮迭代运算操作后,得到明文数据;
[0055] 所述列混合逆变换单元和列混合变换单元、行移位逆变换单元和行移位变换单元、S盒替换逆变换单元和S盒替换变换单元,以及轮密钥加逆变换单元和轮密钥加变换单元均互为逆运算单元。
[0056] 进一步地,S盒替换变换单元的具体操作过程如下,且S盒为具有对合性质的S盒Sb0与S盒Sb1,在加密与解密过程中,S盒Sb0与S盒Sb1元素不变:
[0057] 128位需要进行S盒替换变换的中间数据被分成32个4位数据单元a1、a2、…、a31、a32,随着加/解密轮数变化,数据单元分别进行S盒Sb0与S盒Sb1递增/递减替换变换;
[0058] 在加密过程的第r轮S盒替换变换中,前32-r+1个数据单元进行S盒Sb0替换操作,剩余的数据单元进行S盒Sb1;
[0059] 在解密过程的第r轮S盒替换变换中,前r个数据单元进行S盒Sb0替换操作,剩余的数据单元进行S盒Sb1,1≤r≤32。
[0060] 进一步地,在所述轮密钥加变换单元与轮密钥加逆变换单元操作中使用的轮密钥构造过程如下:
[0061] 输入原始密钥Key,将原始密钥Key从高位到低位分为三个Key1、Key2与Key3子密钥,将Key1子密钥进行一次MD5哈希函数变换得到第1轮至第16轮中,轮密钥加变换中使用的128位轮密钥RKey1;
[0062] 将Key2子密钥进行一次MD5哈希函数变换得到第16轮至32轮中,轮密钥加变换中使用的128位轮密钥RKey2;
[0063] 将Key3子密钥进行一次MD5哈希函数变换得到最后一次轮密钥加变换中使用的128位轮密钥RKey3。
[0064] 轮密钥的构造,是将分得的子密钥通过MD5哈希函数进行运算得到轮密钥;
[0065] 进一步地,所述轮密钥加变换单元和轮密钥加逆变换单元的操作过程如下:
[0066] 轮密钥加变换单元是用于将明文或每一轮中间值State与轮密钥RKey以及轮常数RC进行异或运算;
[0067] 轮密钥加变换如下:
[0068]
[0069] 轮密钥加逆变换使用轮密钥及轮常数的顺序与轮密钥加变换相反,轮密钥加逆变换如下:
[0070]
[0071] 其中,State表示进行轮密钥加变换操作的数据,RC[i]表示轮常数RC的第i位,RC[33-i]表示轮常数RC的第33-i位。
[0072] 另一方面,一种可读存储介质,包括计算机程序指令,其特征在于:所述计算机程序指令被处理终端执行时使所述处理终端执行一种新型密钥生成的Shield分组密码实现方法。
[0073] 有益效果
[0074] 本发明提供了一种新型密钥生成的Shield分组密码实现方法、装置及可读存储介质,本发明技术方案中的方法从加密算法出发,其算法设计原则是安全,其次是速度、算法复杂度、串并行。由于Shield算法当中,采用了MD5作为密钥产生算法,MD5在运算过程4个函数分别是需要16轮操作,在实现相当于需要64次运算操作,导致需要花费大量运算操作时间,为了满足加密函数与密钥产生操作实现时间同步运算操作,将轮函数当中轮密钥加变换的轮密钥每16轮进行一次MD5运算,更新其密钥,利用哈希函数数字指纹特性,使得轮函数当中密钥空间变得很大,大大增加了密钥空间,从而提高算法的安全性,极大增加密码分析难度,从而使得目前的攻击方法很难做到攻击Shield算法,特别是密码算法当中相关密钥攻击。
[0075] 在Shield算法当中,我们原始(主)密钥不再需要大于等于分组长度,不过原始(主)密钥长度长一些,组合方式复杂一些,对于算法本身安全而言是非常有利的,但原始(主)密钥甚至可以做到只有6位密钥,都可以达到算法高安全的应用需求。从而减少密钥管理中的密钥安全存储压力,节省密钥存储资源。
[0076] Shield算法的S盒替换变换采用两个4×4的S盒进行128位数据替换变换,将数据分成32个4位单元,则随着加/解密轮数变化,数据单元分别进行对应S盒递增/递减替换操作,相比固定一个8×8的S盒,可以节省了大量资源,并且这种活动性S盒变换,可以抵抗侧信道等攻击方法。
[0077] 综上所述,本发明的技术方案所述的一种新型密钥生成的Shield分组密码实现方法在保证性能的前提下,大大提高算法的安全性,能有效地抵抗现有攻击方法。

附图说明

[0078] 图1为本发明实例所述方法的加密过程示意图;
[0079] 图2为本发明实例所述加密方法对应的解密过程示意图;
[0080] 图3为MD5算法4轮变换运算图;
[0081] 图4为MD5算法核心变换运算图;
[0082] 图5为行移位变换运算关系图;
[0083] 图6为行移位逆变换运算关系图。

具体实施方式

[0084] 下面结合附图和实施例对本发明做进一步的说明。
[0085] 一种新型密钥生成的Shield分组密码实现方法,在本实例中,Shield分组密码的实现方法采用SPN结构,分组长度为128位,密钥长度不固定,迭代32轮。Shield加密运算流程如图1所示,包含密钥生成函数与加密轮函数,加密轮函数运算中包含轮密钥加变换(AddRoundKey),S盒替换变换(SubCells),行移位变换(ShiftRows),列混合变换(MixColumns)四个模块。解密运算流程如图2,算法解密轮运算包含,列混合逆变换(InvMixColumns),行移位逆变换(InvShiftRows),S盒替换逆变换(InvSubCells),轮密钥加逆变换(AddRoundKey)四个模块。
[0086] Shield加密描述如下算法1,参考图1。
[0087] 算法1:Shield加密
[0088] 输入:Plaintext,Key;
[0089] 输出:Ciphertxet;
[0090]
[0091] 其中:Key为原始密钥,RKey1、RKey2及RKey3为密钥生成函数生成的轮密钥。
[0092] 密钥生成函数(KeySchedule):输入原始密钥Key,将原始密钥Key分为三分Key1、Key2与Key3子密钥,Key1子密钥进行一次MD5哈希函数变换得到第1轮至第16轮,16次轮密钥加变换128位加密轮密钥RKey1;Key2子密钥进行一次MD5哈希函数变换得到第16轮至32轮,16次轮密钥加变换128位加密轮密钥RKey2,Key3子密钥进行一次MD5哈希函数变换得到最后一次(第33次)轮密钥加变换128位轮密钥RKey3。
[0093] MD5哈希函数是输入的处理信息分组为512位,且每个Keyi(1≤i≤3)信息又被划分为16个32位子分组,经过算法处理后,MD5哈希函数的输出信息为4个32位子分组,将这4个分组联级得到128位哈希值消息作为轮密钥RKeyi(1≤i≤3)输出。
[0094] 对于一个任意长度的Keyi(1≤i≤3)作为MD5哈希函数输入,计算输出得到128位哈希值作为轮密钥RKeyi(1≤i≤3),那么对输入子密钥的处理包括如下几个步骤:
[0095] (1)第一步:附加填充位。Keyi(1≤i≤3)被补充使其位数b满足b=448mod 512,也就是说补充上去的位数,使之得到448,补充的内容第一位1以外,其他位补0。(例如,Keyi为56位,则填充392位,使其变成448。)
[0096] (2)第二步:附加消息长度。附上64位以表示Keyi(1≤i≤3)的长度位数,并将其加进填充后的消息末尾。
[0097] (3)第三步:初始化算法参数。128位的缓冲区用来存放中间结果及最后结果,128位分为32位(a,b,c与d)4个寄存器,它们的初始值为:a=0x01234567,b=0x89abcdef,c=0xfedcba98,d=0x76543210。
[0098] (4)第四步:对输入的数据消息做运算。运算算法包含4轮“循环”的压缩函数,该4轮压缩函数结构相似,但每一轮各有一个逻辑函数,分别表示为:FF、GG、HH及II,如图3所示,每个逻辑函数具体表示为:
[0099] FF(a,b,c,d,M[k],S,T[i])<<
[0100] GG(a,b,c,d,M[k],S,T[i])<<
[0101] HH(a,b,c,d,M[k],S,T[i])<<
[0102] HH(a,b,c,d,M[k],S,T[i])<<
[0103] 其中<<<是表示循环左移操作,T[i]为4294967296×abs(sin(i))的32位整数部分,i的单位弧度。
[0104] 每一循环由对缓存a,b,c与d的16步操作组成,每一步骤详细操作如图4中部分所示。其中R在1至4轮分别代以F,G,H,I。第四次循环的输出加到第一次循环的四个缓存输入上作为处理下一分组的输入。
[0105]
[0106]
[0107]
[0108]
[0109] (5)第五步:输出轮密钥结果。在产生输出128位的哈希值作为轮密钥,输出以高位字节a开始,低位字节d结束。
[0110] 轮密钥加变换(AddRoundKey):将128位明文或每一轮中间值State与通过MD5算法生成的128位轮密钥RKey0、RKey1及RKey2以及轮常数RC进行异或运算,其中轮常数与数据最后8位进行异或运算:
[0111] 当1≤i≤16时,轮密钥加变换:
[0112]
[0113] 当17≤i≤32时,轮密钥加变换:
[0114]
[0115] 当i为33时,轮密钥加变换:
[0116]
[0117] 为了节省算法资源的开销,采用LED密码算法的线性移位寄存器的方式产生33个轮常数,轮常数排列数组为RC[33]={0x 01,0x 03,0x 07,0x 0F,0x 1F,0x 3E,0x 3D,0x 3B,0x 37,0x 2F,0x 1E,0x 3C,0x 39,0x 33,0x 27,0x 0E,0x 1D,0x 3A,0x 35,0x 2B,0x 
16,0x 2c,0x 18,0x 30,0x 21,0x 02,0x 05,0x 0B,0x 17,0x 2E,0x 1C,0x 38,0x31}。
[0118] S盒替换变换(SubCells):S盒变换是算法的非线性组件,加/解密S盒采用Midori密码算法的Sb0与Sb1,该Sb0与Sb1是具有对合性质的两个S盒,从而加密S盒替换变换Sb0与Sb1元素表示为:Sb0[16]={0x c,0x a,0x d,0x 3,0x e,0x b,0x f,0x 7,0x 8,0x 9,0x 1,0x 5,0x 0,0x 2,0x 4,0x 6},Sb1[16]={0x 1,0x 0,0x 5,0x 3,0x e,0x 2,0x f,0x 
7,0x d,0x a,0x 9,0x b,0x c,0x 8,0x 4,0x 6}。128位加密中间值State分成32个4位数据单元a1、a2、…、a31、a32,则随着加密轮数变化,数据单元分别进行Sb0递减与Sb1递增替换变换,运算关系如下:
[0119] 加密第1轮(32个4位数据单元进行Sb0替换变换):
[0120] State←Sb0(a1)||Sb0(a2)||Sb0(a3)||…||Sb0(a30)||Sb0(a31)||Sb0(a32)[0121] 加密第2轮(第1至第31个4位数据单元进行Sb0替换变换,第32个4位数据单元进行Sb1替换变换):
[0122] State←Sb0(a1)||Sb0(a2)||Sb0(a3)||…||Sb0(a30)||Sb0(a31)||Sb1(a32)[0123] 加密第3轮(第1至第30个4位数据单元进行Sb0替换变换,第31至第32个4位数据单元进行Sb1替换变换):
[0124] State←Sb0(a1)||Sb0(a2)||Sb0(a3)||…||Sb0(a30)||Sb1(a31)||Sb1(a32)[0125] …
[0126] 加密第31轮(第1至第2个4位数据单元进行Sb0替换变换,第3个至第32个4位数据单元进行Sb1替换变换):
[0127] State←Sb0(a1)||Sb0(a2)||Sb1(a3)||…||Sb1(a30)||Sb1(a31)||Sb1(a32)[0128] 加密第32轮(第1个4位数据单元进行Sb0替换变换,第2个至第32个4位数据单元进行Sb1替换变换):
[0129] State←Sb0(a1)||Sb1(a2)||Sb1(a3)||…||Sb1(a30)||Sb1(a31)||Sb1(a32)[0130] 行移位变换:对于16个单元组成4×4矩阵,矩阵的每一行向左循环不同的单元移量,第零行单元移量保持不变,第一行单元移量为循环左移一个单元,第二行单元移量为循环左移两个单元,第三行单元移量为循环左移3个单元,行移位变换运算关系如图5所示。
[0131] 列混合变换:采用AES密码的列混淆变换矩阵M,M矩阵组成元素表示如下,其中数据以16进制表示:
[0132]
[0133] 列混合变换运算是列混合变换矩阵M与State中16个单元组成4×4矩阵在有限域GF(28)上的乘法变换,变换公式,其中数据以16进制表示:
[0134]
[0135] Shield解密算法描述如下算法2,参考图2。
[0136] 输入:Ciphertxet,Key;
[0137] 输出:Plaintext;
[0138]
[0139] Shield解密模块使用了加密运算变换中四种逆变换(轮密钥加逆变换、行移位逆变换、列混淆逆变换以及S盒替换逆变换),其中S盒替换满足对合性质,从而加密与解密当中,S盒不变,还是S盒Sb0与S盒Sb1,以加密运算相反的顺序对密文进行解密。
[0140] 轮密钥加逆变换使用轮密钥以及轮常数的顺序与轮密钥加变换相反,轮密钥加逆变换如下:
[0141] 当i为33时,轮密钥加变换:
[0142]
[0143] 当32≥i≥17时,轮密钥加变换:
[0144]
[0145] 当16≥i≥1时,轮密钥加变换:
[0146]
[0147] S盒替换变换(InvSubCells):Sb0与Sb1是具有对合性质的两个S盒,从而解密与加密同为一个S盒元素。128位解密中间值State分成32个4位数据单元a1、a2、…、a31、a32,则随着解密轮数变化,数据单元分别进行Sb0递增与Sb1递减替换变换,运算关系如下:
[0148] 解密第1轮(第1个4位数据单元进行Sb0替换变换,第2个至第32个4位数据单元进行Sb1替换变换):
[0149] State←Sb0(a1)||Sb1(a2)||Sb1(a3)||…||Sb1(a30)||Sb1(a31)||Sb1(a32)[0150] 解密第2轮(第1至第2个4位数据单元进行Sb0替换变换,第3个至第32个4位数据单元进行Sb1替换变换):
[0151] State←Sb0(a1)||Sb0(a2)||Sb1(a3)||…||Sb1(a30)||Sb1(a31)||Sb1(a32)[0152] 解密第3轮(第1至第3个4位数据单元进行Sb0替换变换,第4个至第32个4位数据单元进行Sb1替换变换):
[0153] State←Sb0(a1)||Sb0(a2)||Sb0(a3)||…||Sb1(a30)||Sb1(a31)||Sb1(a32)[0154] …
[0155] 解密第31轮(第1至第31个4位数据单元进行Sb0替换变换,第32个4位数据单元进行Sb1替换变换):
[0156] State←Sb0(a1)||Sb0(a2)||Sb0(a3)||…||Sb0(a30)||Sb0(a31)||Sb1(a32)[0157] 解密第32轮(32个4位数据单元进行Sb0替换变换):
[0158] State←Sb0(a1)||Sb0(a2)||Sb0(a3)||…||Sb0(a30)||Sb0(a31)||Sb0(a32)[0159] 行移位逆变换:对于16个单元组成4×4矩阵,矩阵的每一行向右循环不同的单元移量,第零行单元移量保持不变,第一行单元循环右移一个单元,第二行单元循环右移两个单元,第三行单元循环右移3个单元,行移位逆变换运算关系如图6所示。
[0160] 列混合逆变换:采用AES密码的列混淆逆变换矩阵M-1,M-1矩阵组成元素表示如下,其中数据以16进制表示:
[0161]
[0162] 列混合变换运算是列混合变换矩阵M-1与State中16个单元组成4×4矩阵在有限域GF(28)上的乘法变换,变换公式,其中数据以16进制表示:
[0163]
[0164] Shield算法测试向量(数据以16进制表示):
[0165] (1)明文:0000_0000_0000_0000_0000_0000_0000_0000
[0166] (1)密钥:012345(Key1为01,Key2为23,Key3为45)
[0167] 第一个轮密钥:96A3_BE3C_F272_E017_046D_1D26_74A5_2BD3
[0168] 第二个轮密钥:3769_3CFC_7480_49E4_5D87_B8C7_D8B9_AACD
[0169] 第三个轮密钥:6C83_49CC_7260_AE62_E3B1_3968_31A8_398F
[0170] (1)密文:8273__AC00_4F64_9A86_DD6A_955C_C784_57D0
[0171] (2)明文:0000_0000_0000_0000_0000_0000_0000_0000
[0172] (2)密钥:012345(Key1为0,Key2为12,Key3为345)
[0173] 第一个轮密钥:CFCD_2084_95D5_65EF_66E7_DFF9_F987_64DA
[0174] 第二个轮密钥:C20A_D4D7_6FE9_7759_AA27_A0C9_9BFF_6710
[0175] 第三个轮密钥:289D_FF07_669D_7A23_DE0E_F88D_2F71_29E7
[0176] (2)密文:B22E__6064_2105_3DA9_76C0_3067_69D8_47EA
[0177] (3)明文:FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF_FFFF
[0178] (3)密钥:012345(Key1为01,Key2为23,Key3为45)
[0179] 第一个轮密钥:96A3_BE3C_F272_E017_046D_1D26_74A5_2BD3
[0180] 第二个轮密钥:3769_3CFC_7480_49E4_5D87_B8C7_D8B9_AACD
[0181] 第三个轮密钥:6C83_49CC_7260_AE62_E3B1_3968_31A8_398F
[0182] (3)密文:D167_B8BC_FDDD_CF4C_2DF2_8A19_8A36_29B0
[0183] 按照本发明所提出的实现方法,利用给出的测试向量,实现者对明文进行加密处理得到测试向量中所述的密文,对密文进行解密处理得到测试向量中所述的明文。
[0184] 本发明所述的Shield算法分组密码实现方法在软硬实现当中,应该与相比传统的AES、SM4等分组密码算法比较,占用资源相当,甚至还少一些。
[0185] 一种新型密钥生成的Shield分组密码实现装置,包括:
[0186] 数据加载模块:将128位明文/密文加载至寄存器,进行加/解密运算;
[0187] 轮运算操作模块:将加载到寄存器的所述待加/解密数据进行32轮迭代轮运算操作;
[0188] 若输入的待加密数据进行加密运算操作,则在第1轮至第32轮迭代轮运算中的每一轮轮运算中依次对每一轮输入的待加密数据进行轮密钥加变换单元、S盒替换变换单元、行移位变换单元及列混合变换单元,以列混合变换单元得到的数据作为下一轮的待加密数据,完成32轮迭代运算操作后,再进行一次轮密钥加变换,得到密文数据;
[0189] 若输入的待解密数据进行解密运算操作,先将输入的待解密数据进行一次轮密钥加逆变换,然后在第1轮至第32轮迭代轮运算中的每一轮轮运算中依次对每一轮输入的待解密数据进行列混合逆变换单元、行移位逆变换单元、S盒替换逆变换单元及轮密钥加逆变换单元,以轮密钥加逆变换单元得到的数据作为下一轮的待解密数据,完成32轮迭代运算操作后,得到明文数据;
[0190] 所述列混合逆变换单元和列混合变换单元、行移位逆变换单元和行移位变换单元、S盒替换逆变换单元和S盒替换变换单元,以及轮密钥加逆变换单元和轮密钥加变换单元均互为逆运算单元。
[0191] S盒替换变换单元的具体操作过程如下,且S盒为具有对合性质的S盒Sb0与S盒Sb1,在加密与解密过程中,S盒Sb0与S盒Sb1元素不变:
[0192] 128位需要进行S盒替换变换的中间数据被分成32个4位数据单元a1、a2、…、a31、a32,随着加/解密轮数变化,数据单元分别进行S盒Sb0与S盒Sb1递增/递减替换变换;
[0193] 在加密过程的第r轮S盒替换变换中,前32-r+1个数据单元进行S盒Sb0替换操作,剩余的数据单元进行S盒Sb1;
[0194] 在解密过程的第r轮S盒替换变换中,前r个数据单元进行S盒Sb0替换操作,剩余的数据单元进行S盒Sb1,1≤r≤32。
[0195] 在所述轮密钥加变换单元与轮密钥加逆变换单元操作中使用的轮密钥构造过程如下:
[0196] 输入原始密钥Key,将原始密钥Key从高位到低位分为三个Key1、Key2与Key3子密钥,将Key1子密钥进行一次MD5哈希函数变换得到第1轮至第16轮中,轮密钥加变换中使用的128位轮密钥RKey1;
[0197] 将Key2子密钥进行一次MD5哈希函数变换得到第16轮至32轮中,轮密钥加变换中使用的128位轮密钥RKey2;
[0198] 将Key3子密钥进行一次MD5哈希函数变换得到最后一次轮密钥加变换中使用的128位轮密钥RKey3。
[0199] 轮密钥的构造,是将分得的子密钥通过MD5哈希函数进行运算得到轮密钥;
[0200] 所述轮密钥加变换单元和轮密钥加逆变换单元的操作过程如下:
[0201] 轮密钥加变换单元是用于将明文或每一轮中间值State与轮密钥RKey以及轮常数RC进行异或运算;
[0202] 轮密钥加变换如下:
[0203]
[0204] 轮密钥加逆变换使用轮密钥及轮常数的顺序与轮密钥加变换相反,轮密钥加逆变换如下:
[0205]
[0206] 其中,State表示进行轮密钥加变换操作的数据,RC[i]表示轮常数RC的第i位,RC[33-i]表示轮常数RC的第33-i位。
[0207] 应当理解,本发明各个实施例中的功能单元模块可以集中在一个处理单元中,也可以是各个单元模块单独物理存在,也可以是两个或两个以上的单元模块集成在一个单元模块中,可以采用硬件或软件的形式来实现。
[0208] 一种可读存储介质,包括计算机程序指令,其特征在于:所述计算机程序指令被处理终端执行时使所述处理终端执行一种新型密钥生成的Shield分组密码实现方法,其有益效果参见方法部分的有益效果,在此不再赘述。
[0209] 本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
[0210] 本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
[0211] 这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
[0212] 这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。最后应当说明的是:以上实施例仅用以说明本发明的技术方案而非对其限制,尽管参照上述实施例对本发明进行了详细的说明,所属领域的普通技术人员应当理解:依然可以对本发明的具体实施方式进行修改或者等同替换,而未脱离本发明精神和范围的任何修改或者等同替换,其均应涵盖在本发明的权利要求保护范围之内。