1.一种轻量级分组密码SCS的实现方法,其特征在于,包括以下步骤:步骤1:利用高伪随机P1置换对密钥进行置换得到置换后的密钥,并从置换后的密钥中提取初始轮密钥、初始控制密钥和组合数据H1、H2;
步骤2:利用经过步骤1置换后的密钥的低64位对64位明文进行异或操作,得到第一中间结果数据,并将第一中间结果数据从高位至低位按16位一组分成4组,得到M0、M1、M2、M3;
步骤3:将第一中间结果数据的高32位和低32位按照Feistel结构分别进行r轮F1轮函数和F2轮函数运算;
F1轮函数:将M0作为参与F1轮函数运算的输入数据,进行F1轮函数运算,将得到的结果与M1进行异或,将得到的异或运算结果作为下一轮参与F1轮函数运算的输入数据M0,同时将前一轮参与F1轮函数运算的输入数据M0作为下一轮的M1;
F2轮函数:将M2作为参与F2轮函数运算的输入数据,进行F2轮函数运算,将得到的结果与M3进行异或,将得到的异或运算结果作为下一轮参与F2轮函数运算的输入数据M2,同时将前一轮参与F2轮函数运算的输入数据的M2作为下一轮的M3;
其中,所述F1轮函数依次包括利用F1轮函数运算的输入数据对每一轮的轮密钥进行异或操作、S1盒更新、P1置换、S1盒替换以及P2置换操作;
所述F2轮函数依次包括利用F2轮函数运算的输入数据对每一轮的轮密钥进行异或操作、S2盒更新、P2置换、S2盒替换以及P1置换操作;
所述S1盒更新和S2盒更新采用每一轮的控制密钥更新;
每一轮的轮密钥和控制密钥依据每一轮的轮函数运算输入数据分别对初始轮密钥和初始控制密钥进行更新获得;
步骤4:将经过r轮轮函数运算得到的M1、M0、M3、M2作为第二中间结果数据;
步骤5:把组合数据H1、H2分别放在第二中间结果数据的高32位和低32位的后面,得到第三中间结果数据;
所述32位组合数据H1和H2从密钥中选取;
步骤6:将第三中间结果数据依次进行行移位和列混淆操作,得到明文的加密结果。
2.根据权利要求1所述的方法,其特征在于,所述初始轮密钥、初始控制密钥和组合数据是从利用高伪随机P1置换对密钥进行置换后的密钥中提取:将置换后的密钥的第32位至63位作为初始轮密钥;
将置换后的密钥的低32位作为初始控制密钥;
若密钥长度为96位,则将置换后的密钥高32位作为组合数据H1,H1的逆序作为组合数据H2;
若密钥长度为192位,则将置换后的密钥第96位至第159位的前半部分作为组合数据H1,后半部分作为组合数据H2;
将所述初始轮密钥的前半部分和后半部分分别作为第一初始轮密钥Lkey和第二初始轮密钥Rkey;
将所述初始控制密钥的前半部分和后半部分分别作为第一初始控制密钥wk和第二初始控制密钥vk;
每一轮F1轮函数的控制密钥W由第一初始控制密钥wk和参与每一轮F1轮函数运算的输入数据M0进行异或得到;
每一轮F2轮函数的控制密钥V由第二初始控制密钥vk和参与每一轮F2轮函数运算的输入数据M2进行异或得到;
每一轮F1轮函数的轮密钥K1由第一初始控制密钥wk、第一初始轮密钥Lkey以及参与每一轮F2轮函数运算的输入数据M2进行异或得到;
每一轮F2轮函数的轮密钥K2由第二初始控制密钥vk、第二初始轮密钥Rkey以及参与每一轮F1轮函数运算的输入数据M0进行异或得到。
3.根据权利要求2所述的方法,其特征在于,在每一轮F1轮函数和F2轮函数中S1盒更新和S2盒更新的过程由每一轮的控制密钥控制,S1盒替换和S2盒替换由每一轮的轮密钥控制;
所述S1盒更新和S2盒更新的过程相同,包括以下步骤:
步骤1.1:将每一轮的控制密钥的十进制数作为随机数种子,生成16个伪随机数;
步骤1.2:将得到的16个伪随机数相互异或,得到一个异或结果,记为dex;
步骤1.3:将得到的dex再次作为随机数种子,生成16个0到15之间的伪随机数,保存在数组d[i]中,0≤i≤15;
步骤1.4:依次比较i与d[i],若不相等,则交换S盒,将S盒中S(i)的值用S(d[i])替代,i从0取值到15,直到完成所有交换,得到更新后的S盒;
所述S盒的初始值为S(i)=i,S1盒更新和S2盒更新使用的控制密钥分别为W和V;
所述S1盒替换和S2盒替换的过程相同,包括以下步骤:
步骤2.1:将待输入S盒的数据按从高位至低位,每组4位依次分为4组{statej},0≤j≤
3;
步骤2.2:将每一轮的轮密钥按从高位至低位,每组4位依次分为4组{Kj},0≤j≤3;
步骤2.3:依次进行(statej+Kj)mod16运算,0≤j≤3,得到4个4位结果数据{sj};
步骤2.4:将步骤2.3得到的4个4位结果数据{sj}均输入S盒进行变换,将得到的变换结果按照从高位至低位进行合并,得到S盒替换结果。
4.根据权利要求1-3任一项所述的方法,其特征在于,依据密钥长度,确定进行轮运算的轮数r;
若密钥长度为96位,轮数r为20;密钥长度为192位,轮数r为32。
5.根据权利要求4所述的方法,其特征在于,在对密文进行解密时,先将密文进行逆列混淆,再进行逆行移位,接着进行拆分操作,将得到的拆分结果采用广义Feistel结构进行相应轮数r的迭代,将迭代后结果利用经过P1置换后的密钥的低64位进行异或运算,得到解密后的明文;
所述迭代过程与加密过程中的轮函数运算相同;
所述逆列混淆和逆行移位与加密过程中的列混淆和行移位运算互逆;
所述拆分操作是指将经过逆行移位运算后的结果的第63位到第95位和低32位取出后,剩余数据按照从高位至低位,每组16位,拆分成4组,依次为C0、C1、C2、C3,将拆分得到的数据作为迭代过程中的输入数据。
6.一种轻量级分组密码SCS的实现装置,其特征在于,包括:初始化单元,利用高伪随机P1置换对密钥进行置换得到置换后的密钥,并从置换后的密钥中提取初始轮密钥、初始控制密钥和组合数据H1、H2;
数据拆分单元,利用初始化单元中置换后的密钥的低64位对64位明文进行异或操作,得到第一中间结果数据,并将第一中间结果数据从高位至低位按16位一组分成4组,得到M0、M1、M2、M3;
轮函数迭代单元,采用权利要求1-5任一项所述的方法将第一中间结果数据的高32位和低32位按照Feistel结构分别进行r轮F1轮函数和F2轮函数运算;
F1轮函数模块:将M0作为参与F1轮函数运算的输入数据,进行F1轮函数运算,将得到的结果与M1进行异或,将得到的异或运算结果作为下一轮参与F1轮函数运算的输入数据M0,同时将前一轮参与F1轮函数运算的输入数据M0作为下一轮的M1;
F2轮函数:将M2作为参与F2轮函数运算的输入数据,进行F2轮函数运算,将得到的结果与M3进行异或,将得到的异或运算结果作为下一轮参与F2轮函数运算的输入数据M2,同时将前一轮参与F2轮函数运算的输入数据的M2作为下一轮的M3;
其中,所述F1轮函数依次包括利用F1轮函数运算的输入数据对每一轮的轮密钥进行异或操作、S1盒更新、P1置换、S1盒替换以及P2置换操作;
所述F2轮函数依次包括利用F2轮函数运算的输入数据对每一轮的轮密钥进行异或操作、S2盒更新、P2置换、S2盒替换以及P1置换操作;
所述S1盒更新和S2盒更新采用每一轮的控制密钥更新;
每一轮的轮密钥和控制密钥依据每一轮的轮函数运算输入数据分别对初始轮密钥和初始控制密钥进行更新获得;
合并单元:将经过r轮轮函数运算得到的M1、M0、M3、M2作为第二中间结果数据,把组合数据H1、H2分别放在第二中间结果数据的高32位和低32位的后面,得到第三中间结果数据;
所述32位组合数据H1和H2从密钥中选取;
行列操作单元:将合并单元输出第三中间结果数据依次进行行移位和列混淆操作,得到明文的加密结果。