一种新型高安全的轻量级sfn分组密码实现方法

文档序号:10596994阅读:245来源:国知局
一种新型高安全的轻量级sfn分组密码实现方法
【专利摘要】本发明公开了一种新型高安全的轻量级SFN分组密码实现方法,设计了一种新的密码模式,该模式下,包含两种分组密码典型的结构:SP网络结构与Feistel网络结构;通过原始密钥的最后32位作为控制信号,控制选择算法两种结构中一种结构进行加/解密,同时另一种结构进行密钥扩展。算法内实现一个密码结构既可以用于加/解密运算又可以用于密钥扩展运算,有232不同运算方式。相比固定密码结构进行加/解密与密钥扩展迭代运算,对于一些攻击方法而言,可以提高232的防御难度系数,满足不同用户多层次的安全性需求。SFN具有灵活性高,扩展性好,高安全性以及低资源优点,有较好的应用前景。
【专利说明】
一种新型高安全的轻量级SFN分组密码实现方法
技术领域
[0001 ]本发明涉及一种新型高安全的轻量级SFN分组密码实现方法。
【背景技术】
[0002] 近年来,低端嵌入式设备普及到生活的每一个角落,而这低端嵌入式设备只有有 限的计算能力、存储空间和能量来源而被称为资源受限设备,简称受限设备。这类受限设备 的应用越来越广泛,而许多应用会涉及一些敏感的金融交易、健康监控或生物统计数据,为 了给这类受限设备所存取、传输的信息提供合适的安全保护,轻量级密码运用而生。相关领 域的学者也开始对轻量级密码进行大量研究,这些研究主要集中在轻量级密码的设计、安 全性分析以及实现性能评估等方面。
[0003] 分组密码是将明文消息编码序列化分成等长分组,然后每组分别在密钥的作用下 变换成等长的输出密文序列。分组密码执行速度快,很适合硬件实现,在密码领域的使用频 率最大。分组密码出现较早,设计技术成熟,具有典型的安全结构,分组密码的加解密算法 结构非常规整,这使得轻量级分组密码的设计相对较容易。
[0004] 目前,在轻量级分组密码领域中,已经存在一些轻量级分组密码算法,典型的代表 如PRESENT,LBlock,Twine,KLEIN,MIBS,LED,PRINCE,Piccolo,ITUbee,PRINTcipher, RECTANGLE 等等。
[0005] 目前轻量级分组密码算法存在如下的问题:(1)目前轻量级分组算法存在安全性 不高的问题。最近很多研究表明轻量级分组密码算法不具备抵抗功耗攻击以及多种攻击技 术相结合的旁路攻击方法。另外有一些轻量级分组密码算法为了追求更小的实现资源面 积,将密钥扩展运算简单化,或者是不进行密钥扩展运算。这样设计对于算法安全更是存在 隐患。(2)现有专用密码芯片中大多只实现了一种固定密码模式的密码算法,这种实现方式 难以满足不同用户多层次的安全性需求。虽然对不同密码算法进行重构设计,在设计过程 中,提取出不同算法之间的相同或相似的操作,但不同算法之间有很多不同之处,从而会造 成很多面积资源的开销,使得硬件实现成本高,并且使性能效率也在很大程度上降低了。 (3)在分组密码算法中,具有两种典型的密码结构。一种是SP网络结构,该结构对称性相对 较差,加解密不一致;在实现过程中,需要将加密模块与解密模块一起实现,从而实现的资 源较多,但该结构算法扩散速度快,一轮迭代可以改变全部分组数据,安全性相对比较高。 另一种是Feistel网路结构,该结构加解密一致,加密模块与解密模块是同一个模块,实现 资源相对较少;但该结构密码算法扩散速度慢,一轮迭代只能改变一半的分组数据,安全性 相对较低。在现有分组密码算法中,将这两种结构合理的组合起来。出现如下几种情况:一 是分组加密算法的整体结构是Feistel网络结构,而轮函数是SP网络结构;二是分组加密算 法的整体结构是SP网络结构,轮函数是SP网络结构;三是分组加密算法的整体结构是 Feistel网络结构,轮函数是Feistel网络结构;四是分组加密算法的整体结构是SP网络结 构,轮函数是Feistel网络结构。如果应用不同的场合,只能设计一个密码多个算法,无法做 到一个密码一个算法来实现,从而浪费大量的软硬件资源。

【发明内容】

[0006] 本发明提供了一种新型高安全的轻量级SFN分组密码实现方法,其目的在于,克服 现有轻量级分组密码算法技术存在的安全性不高,密钥扩展运算相对简单;灵活性不高,在 专用密码芯片中只能实现一种固定密码模式的密码算法,难以满足不同用户多层次的安全 性需求的问题。
[0007] -种新型高安全的轻量级SFN分组密码实现方法,首先,将密钥划分成待扩展密钥 数据和轮运算过程的控制信号数据;其次,依据轮运算过程控制信号分别对待扩展密钥和 待加/解密数据进行密钥扩展和数据加/解密,每一轮扩展后的密钥用于下一轮数据加/解 密,直到完成所有轮数的轮运算;最后,输出密文/明文,完成加/解密操作;
[0008] 所述待扩展密钥数据长度与待加/解密数据长度相同,所述轮运算过程的控制信 号数据长度与轮运算次数相同,依次从控制信号数据中选取一位作为一轮轮运算控制信 号;
[0009] 当轮运算过程控制信号为1时,待扩展密钥选择SP网络结构的轮运算函数进行密 钥扩展运算,待加/解密数据选择Feistel网络结构的轮运算函数进行加/解密运算;
[0010] 当轮运算过程控制信号为〇时,待扩展密钥选择Feistel网络结构的轮运算函数进 行密钥扩展运算,待加/解密数据选择SP网络结构的轮运算函数进行加/解密运算。
[0011] 在轮运算中对所述待扩展密钥进行密钥扩展的具体过程如下,密钥扩展进行32轮 操作:
[0012] 当轮运算控制信号select为0时,密钥扩展轮运算步骤如下:
[0013] 1)将64位待扩展密钥数据划分为前32位数据与后32位数据;
[0014] 2)对1)获得的前32位数据与轮常数进行常数加运算;
[0015] 3)对2)得到的运算结果进行&盒字节替换运算;
[0016] 4)对3)得到的运算结果进行P置换运算;
[0017] 5)对4)得到的运算结果进行&盒字节替换运算;
[0018] 6)对5)得到的运算结果与1)获得的后32位数据进行异或运算;
[0019] 7)对6)得到的运算结果作为下一轮前32位数据,并将1)获得的前32数据作为下一 轮后32位数据,得到轮密钥,即获得下一轮64位待扩展密钥数据,若轮运算的次数达到设定 次数,则结束密钥扩展,否则,依据轮运算控制信号,进行下一轮密钥扩展运算;
[0020] 当轮运算控制信号select为1时,密钥扩展轮运算步骤如下:
[0021] 8)将64位待扩展密钥数据前后各32位数据相互调换位置;
[0022] 9)对8)所述调换位置后的待扩展密钥数据与轮常数进行常数加运算;
[0023] 10)对9)得到的运算结果进行&盒字节替换运算;
[0024] 11)对10)得到的运算结果进行行移位变换运算;
[0025] 12)对11)得到的运算结果进行列混合变换运算,得到轮密钥;
[0026] 13)对12)得到的运算结果作为下一轮64位待扩展密钥数据,若轮运算的次数达到 设定次数,则结束密钥扩展,否则,依据轮运算控制信号,进行下一轮密钥扩展运算。
[0027] 在轮运算过程中对待加密数据进行加密的具体过程如下,加密进行32轮操作:
[0028] 当轮运算控制信号select为0时,加密轮运算步骤如下:
[0029] 14)将64位待加密数据的前后各32位数据相互调换位置;
[0030] 15)对14)所述调换位置的待加密数据与轮密钥进行轮密钥加运算;
[0031] 16)对15)得到的运算结果进行&盒字节替换运算;
[0032] 17)对16)得到的运算结果进行行移位变换运算;
[0033] 18)对17)得到的运算结果进行列混合变换运算;
[0034] 19)对18)得到的运算结果作为下一轮加密轮运算中的64位待加密数据;
[0035] 若轮运算的次数达到设定次数,则进入步骤27),否则,依据轮运算控制信号,进行 下一轮加密操作运算;
[0036] 当轮运算控制信号select为1时,加密轮运算步骤如下:
[0037] 20)将64位加密数据分为前32位数据与后32位数据;
[0038] 21)对20)所述的前32位数据与轮密钥前32位进行轮密钥加运算;
[0039] 22)对21)得到的运算结果进行&盒字节替换运算;
[0040] 23)对22)得到的运算结果进行P置换运算;
[0041] 24)对23)得到的运算结果进行&盒字节替换运算;
[0042] 25)对24)得到的运算结果与20)得到的后32位数据进行异或运算;
[0043] 26)对25)得到的运算结果作为下一轮加密轮运算的待加密数据的前32位数据,将 20)得到的前32数据作为下一轮加密轮运算的待加密数据的后32位数据,得到下一轮64位 待加密数据;若轮运算的次数达到设定次数,则进入27),否则,依据轮运算控制信号,进行 下一轮加密运算;
[0044] 27)将所述经过32轮运算待加密64位数据前后各32位数据相互调换位置;
[0045] 28)对27)所述调换位置后的待加密数据与最后一轮密钥扩展轮运算得到的轮密 钥进行轮密钥加运算;
[0046] 29)对28)得到的运算结果作为密文,则加密运算操作结束;
[0047]加密轮运算过程中,第一轮加密轮运算所使用的轮密钥为初始密钥的前64位数 据,从第二轮开始依次为每一轮密钥扩展轮运算获得的轮密钥。
[0048] 将密钥扩展轮运算得到的32个轮密钥逆序用于解密轮运算过程,对待解密数据进 行解密,具体过程如下,解密进行32轮操作:
[0049] 30)将64位待解密数据与最后一轮密钥扩展轮运算得到轮密钥进行轮密钥加运 算;
[0050] 31)将30)得到的结果依据轮运算控制信号进行解密轮运算;
[0051 ]当轮运算控制信号select为0时,解密轮运算步骤如下:
[0052] 32)将进行轮运算的64位待解密数据前后各32位数据相互调换位置;
[0053] 33)对32)所述调换位置的待解密数据进行列混合逆运算;
[0054] 34)对33)得到的运算结果进行行移位逆运算;
[0055] 35)对34)得到的运算结果进行&盒字节替换逆运算;
[0056] 36)对35)得到的运算结果与轮密钥进行轮密钥加运算;
[0057] 37)对36)得到的运算结果作为下一轮64位待解密数据;若轮运算的次数达到设定 次数,则进入步骤45 ),否则,依据轮运算控制信号,进行下一轮解密轮运算;
[0058]当轮运算控制信号select为1时,解密轮运算步骤如下:
[0059] 38)将进行轮运算的64位待解密数据分为前32位数据与后32位数据;
[0060] 39)对38)所述的前32位数据与轮密钥前32位进行轮密钥加运算;
[0061] 40)对39)得到的运算结果进行&盒字节替换运算;
[0062] 41)对40)得到的运算结果进行P置换运算;
[0063] 42)对41)得到的运算结果进行&盒字节替换运算;
[0064] 43)对42)得到的运算结果与38)所述的后32位数据进行异或运算;
[0065] 44)对43)得到的运算结果作为下一轮解密轮运算的待解密数据前32位数据,将 38)得到的前32位数据作为下一轮解密轮运算的待解密数据的后32位数据,得到下一轮64 位待解密数据;若轮运算的次数达到设定次数,则进入步骤45 ),否则,依据轮运算控制信 号,进行下一轮解密轮运算;
[0066] 45)将所述经过32轮运算待解密64位数据前后各32位数据相互调换位置;
[0067] 46)对45)得到的运算结果作为明文,则解密运算操作结束;
[0068]解密轮运算过程中,从第一轮到倒数第二轮解密轮运算所使用的轮密钥依次为密 钥扩展得到的倒数第二个轮密钥到第一个轮密钥,最后一轮解密轮运算所使用的轮密钥为 初始密钥的前64位数据。
[0069] 加密过程使用的轮密钥与解密过程使用的轮密钥的顺序互为逆序。
[0070] 即加密过程中使用的第一个轮密钥为解密过程中最后一次使用的轮密钥,均为原 始密钥的前64位数据;加密过程中使用的第二个轮密钥为解密过程中倒数第二次使用的轮 密钥,以此类推。
[0071] 所述P置换运算是对数据中每一比特位位置交换操作:
[0072]输入32位数据从高位到低位表示为:PQ,pi,P2,P3,P4,P5,P6,P7,P8,P9,pit),pil,P12, P13 , P14 , P15 , P16 , P17 , P18 , P19 , P20 , P21, P22 , P23 , P24 , P25 , P26 , P27 , P28 , P29 , P30 , P31;
[0073]经P置换将数据比特位位置交换;
[0074] 以 P0,P4,P8,P12,P16,P20,P24,P28,P1,P5,P9,P13,P17,P21,P25,P29,P2,P6,P10,P14,P18, P22,P26,P30,P3,P7,Pll,P15,P19,P23,P27,P31 高位至lj低位顺序数据输出。
[0075]有益效果
[0076] 本发明提供了一种新型高安全的轻量级SFN分组密码实现方法,设计了一种新的 密码运算模式,该模式下,包含两种分组密码典型的结构,一种是SP网络结构,另一种是 Feistel网络结构。SFN密码分组长度为64位,密钥长度为96位(其中32位为控制位),迭代32 轮。算法中输入的原始密钥最后32位是控制位,控制选择算法两种结构中一种结构进行加/ 解密,同时另一种结构进行密钥扩展。当一轮控制信号select为1时,选择SP网络结构进行 密钥扩展运算,而Feistel网络结构进行加/解密运算。当一轮控制信号select为0时,选择 SP网络结构进行加/解密运算,而Feistel网络结构进行密钥扩展运算。本方法实现了一个 密码结构既可以用于加/解密又可以进行密钥扩展,从而不会在密码中出现简单的密钥扩 展运算,同时在SP网络结构与Feistel网络结构中各含有四个运算模块,保证算法加/解密 模块与密钥扩展模块运算速度一致,使得算法具有高安全以及高性能。
[0077] 算法中通过原始密钥的最后32位为控制位,控制选择算法两种结构中一种结构进 行加/解密,同时另一种结构进行密钥扩展,有2 32 = 4294697296不同的运算方式,相比固定 密码结构进行加/解密与密钥扩展迭代运算,对于一些攻击方法而言,可以提高2 32的防御难 度系数。由于这两种密码结构的扩散速度不同,选择不同的运算方式,出现不同的扩散程 度,这种方式可以满足不同用户多层次的安全性需求。
[0078] 相比SP网络结构与Fe i stel网络结构两种不同的算法之间进行重构设计,SFN算法 设计可以节约很多硬件实现面积资源的开销,而且性能效率方面也比算法之间进行重构设 计好很多。SFN算法通过密钥控制,可以在SP网络结构与Feistel网络结构之间相互调换加/ 解密结构,在算法真正做到整体上既可以用SP网络结构加/解密又可以用Feistel网络结构 加/解密;相比目前分组密码算法只是简单将这两种结构组合起来,但整体上只是SP网络结 构或者是Feistel网络结构时,如果应用不同的场合,只能设个密码多个算法。而SFN密 码算法做到将这两种密码结构整合在一起,利用这两种结构的扩散速度不同,做到一个密 码一个算法来实现,不需要一个密码算法当中出现多种密钥长度的不同算法,从而节约大 量的软硬件资源;并且使得密码算法更有灵活性,扩展性。
【附图说明】
[0079] 图1为本发明所述方法的加密过程与密钥扩展过程示意图;
[0080] 图2为本发明所述行移位变换运算关系图;
[0081 ]图3为本发明所述方法的解密过程示意图;
[0082]图4为本发明所述行移位变换逆运算关系图。
【具体实施方式】
[0083]下面将结合附图和实施例对本发明做进一步的说明。
[0084] 一种新型高安全的轻量级SFN分组密码实现方法,SFN算法分组长度为64位,密钥 长度为96位(32位为控制位),包含32轮运算。SFN算法中包含两种结构:一种是SP网络结构, 另一种结构是Feistel网络结构。
[0085]算法中输入原始密钥的最后32位是控制位,控制选择算法两种结构中一种结构进 行加/解密运算,同时另一种结构进行密钥扩展运算。
[0086] 在SP网络结构中,加密轮函数模块中包含:轮密钥加(AddRoundKeyhSi盒替换 (SubCellsl),行移位(ShiftRows),列混合(MixColumns)四个模块;密钥扩展轮函数模块中 包含:常数加(AddConstants),Si盒替换(SubCellsl),行移位(ShiftRows),列混合 (MixColumns)四个模块。
[0087] 在Feistel网络结构中,加密轮函数模块中包含:轮密钥加(AddRoundKeyhSi盒替 换(SubCellsl),P置换(Permutation),S2盒替换(SubCells2)四个模块;密钥扩展轮函数模 块中包含:常数加(AddConstants),Si盒替换(SubCellsl),P置换(Permutation),S2盒替换 (SubCells2)四个模块。
[0088] SFN算法中32位密钥控制位,选择SP网络结构与Feistel网络结构中一种进行加/ 解密与密钥扩展,其中每一位为一轮控制信号(select)。具体运算过程描述为:当控制信号 seleCt = l时,选择是SP网络结构进行密钥扩展运算,而Feistel网络结构进行加/解密运 算。当控制信号select = 0时,选择是SP网络结构进行加/解密运算,而Feistel网络结构进 行密钥扩展运算。
[0089] SFN密码算法各个模块的运算单元为4位,算法中64位每一轮值都可以表示为 state(64),分为 16个单元,分别表示为stateo(4)、statei(4)、......、stateis(4)。算法96位密钥, 密钥前64位是作为算法轮密钥段,算法中每一轮的轮密钥表示为轮密钥进行密钥 扩展运算与加解密运算,则同样分为16个单元,分别为rkeyo(4)、rkeyi(4)、......、rkeyis(4);密 钥后32位作为控制段,控制密钥表示为ckey(32),其中每一位为一轮运算的控制信号。
[0090] SFN算法中SP网络结构与Feistel网络结构的加密流程与密钥扩展运算流程如图1 所示。SFN密码算法加密描述如下算法1所示,其中控制密钥与轮密钥产生见密钥扩展模块 描述。
[0091] SFN分组密码算法加密伪代码描述:
[0092] 算法1 :SFN密码加密过程
[0093] 输入:Plaintexts),rkey(64),ckey(32);
[0094] 输出:Ciphertext(64); 1. <r- Plainlcxt{〇4); 2. for i=0 to 31 do 3. )= = 0 4:. 尤(32) sto纪(前32),<- s/cfe(后32), 5. AddRoundKcy( Xr[r,,, rkey[ ^ v}); 6. SuhCcllsK );
[0095] " 7. Pcrmutalion( ); 8. SubCclls2( X^2]); .9. ^(32) ^ ^{32) ? ^{32) ^ X{ll) S^^(|i]32P .10. s紐e(64) <-JQ32) || ; 1L end if 12. if(ckeyff]==Q) 13:, ^ate{mi] o stafe;m2); 14. AddRoundKcy( , f^key^ ) 15. S ubCc 11 s 1 (s她々(4,): 16. ShillRows( ); 17. MixColumns(仇介 ):
[0096] 18- mte\fA) <r- siate^; 19. end if 20. end for 21. statef^-,^ 〇? state^v_^; 22. AddRoundKcy( , rkey^,); 23. Ciphertext j^)^- state^Vi: 24. 返 M Ciphcriexl((C:
[0097] SFN加密模块中包含两种结构:SP网络结构与Feistel网络结构。以下对这两种结 构函数各个模块进行详细描述。
[0098] SFN密码算法中Feistel网络结构加密运算模块描述:在Feistel网络结构中,将64 位每一轮中间值分为左右等长两半,前半32位标记为SL段,而后半32位标记为SR段。
[0099] 轮密钥加(AddRoundKey):将32位的SL值与轮密钥前32位进行异或运算,32位的SL 段值 stateo(4)、statei(4)、......、state7(4)与轮密钥前 32 位值 rkeyo(4)、rkeyi(4)、......、rkey7(4) 的运算关系如下公式(1)
[0100] state j⑷-state @ rkey j⑷ (()S 7) Cl)
[0101] Si盒替换(SubCellsl)与S2盒替换(SubCells2):在Feistel网络结构中,有两个不 同的S盒的替换运算,分别是3:盒替换与52盒替换运算,SFN算法Si盒替换运算的5:盒采用于 PRESENT密码加密的S盒,Si盒元素如表1所示。SFN算法S2盒替换运算的S2盒采用于mCrypton 密码加密的第一个S盒,S2盒元素如表2所示。轮函数中的S盒替换变换,将进行&盒变换的32 位数据分为 8 个 4位,记作为 ao,ai,a2,a3,a4,as,a6,a7,替换得到为 bo,bi,b2,b3,b4,bs,b6,b7; 将进行S2盒变换的32位数据分为8个4位,记作为CQ,Cl,C2,C3,C4,C5,C6,C7;替换得到为do,di, (12,(13,(14,(15,(16,(17,如公式所示(2)。
[0102] 有限域 tapbfSKaj)公式(2)
[0103] cj^dj = S2(Cj),CK j<7 [0104] 表1 SFN算法Si盒元素
[0108] P置换(Permutation) :P置换变换是按照表3所示位置规则,将每一比特位的位置 进行交换。由表3位置规则得知,将进行P置换的32位数据每一比特位i移动变换到P(i)所表 示的位置。
[0109] 表3 SFN算法P置换
[0111] SFN密码算法中SP网络结构加密运算模块描述:在SP网络结构中,轮运算进行将64 位数据的操作。
[0112] 轮密钥加(AddRoundKey):将64位每一轮值与轮密钥64位值进行异或运算,64位每 一轮值state。⑷、statei(4)、......、stateis⑷与轮密钥64位值rkey〇(4)、rkeyi(4)、......、 rkeyi5(4)的运算关系如下公式(3)。
[0113] state^ <- state^ ?rkey^ (〇 < / < 15) (3 )
[0114] Si盒替换(SubCellsl):在SP网络结构中,使用的S盒是与Feistel网络结构中3丄盒 一致都是引用于PRESENT算法加密的S盒;S盒元素见表1。16个单元state〇(4)、 statei(4)、......、statei5(4)。每个单元元素都经过S盒进行替换,运算关系如公式(4)。
[0115] statej(4)-Si(statej(4)) (CX j<15) (4)
[0116] 行移位变换(ShiftRows):对于16个单元组成的4X4矩阵,矩阵每一行循环左移不 同的单元,第零行单元循环左移3个单元,第一行单元循环左移两个单元,第二行单元循环 左移一个单元,第三行单元保持不变,行移位变换运算关系如图2所示。该行移位变换模块 采用于Surge密码算法中行移位变换。
[0117] 列混合变换(MixColumns):列混合变换矩阵M如下所示,其中数据以16进制表示。 该矩阵M采用于Surge密码算法中列混合矩阵。
[0119]列混合变换是将state(64)中元素4X4矩阵与列混合变换矩阵M在有限域GF(24)上 的乘法变换,变换公式(5),其中数据以16进制表示。 ,5 2: b /') {statc\,{4] state]{4) state 1[4) state,,4i ^
[0120]齡8 C 4 x气)成~)气)邮⑷ (5): 1 7 2 6 a 8 对state9{4) state10{4) staten{4) v4 1 2 2) [statel2{4] stateu{4] statel4{4) siatel5{4}/
[0121] 密钥扩展变换(KeyExpantion):算法的密钥扩展运算与密码算法加/解密方式有 着相同的变换网络结构,从而使得算法的密钥扩展与加/解密运算可以在两种结构间变换, 算法的随机性增加,提高算法的安全性,并且还能做到减少算法面积实现资源。密钥扩展中 的SP与Feistel网络结构与加/解密不同的是将轮函数结构的轮密钥加变换模块替换为常 数加变换模块,运算过程如算法2所示:
[0122] SFN分组密码算法密钥扩展伪代码描述:
[0123] 算法2: SFN密码密钥扩展过程
[0124] 输入:Key(96);
[0125] 输出:-%; 1. rkey{(M) <- Key(s?64) ,ckey (32) <- Key()g W); 2. for i=() to 31 do 3. ir(d(:々;'.:l==o)
[0126] r^eylm^)^ ^(32) <_ 5. AcldConslants( ,i); 6. SubCclisK 7. Pernmt.alion( A",";.,)); 8, SubCcIls2( }; 9_ Jff3Z2) ? X(32^ ;, la rkey^^X^X^; 1L end if 12. if(e-浩1u)==l) 1.3. ^ rkey!mif 14. AddConslants( rkey[M) ,i);
[0127] ^ 15. SubCcIlsl(r^\^4)): 16. SliiftRo\vs( rkeyl^); 17. MixCalumEs(rfer|64}); 18. rkey1^^ rkey{M): 19. end if :2〇.返回 21. end for
[0128] 常数加变换(AddConstants):为了提高算法安全与减少算法寄存器,在保证算法 安全方面中,主要是防御滑动攻击等一些攻击方法,选择轮数作为算法的轮常数。表示公式 如下(6):
[0129] r々e_y(64) ?<-.成明叫 ?.z' (〇 < /' < 31) ( 6)
[0130] 在密钥扩展算法过程中,其他运算组件和加密函数模块一致,这里不再进行描述。
[0131] SFN算法中SP网络结构与Fe i stel网络结构的解密流程如图3所示。SFN密码算法解 密描述如下算法3所示,其中控制密钥与轮密钥产生见密钥扩展模块描述。
[0132] SFN分组密码算法解密伪代码描述:
[0133] 算法3: SFN密码解密过程
[0134] 输入:Ciphertext(64),rkey(64),ckey(32);
[0135] 输出:Plaintext(64); 1. state^, <- Cipliortcxl((14i;
[0136] 2:. AddRouiidi<cy( ^tatc^4), rkey^ ): 3. fbri=31 toOdo 4. ir(c^vS〇)= = l) 5. - -^1~32) ^ Sto/e(fif32)? ^(32+)! Stofe(g32); 6. AddRoundKey( X^2], rkey'^m2^); 7. SubCcllsK^i); 8. Pernuitaiion( X^Z]); 9. SubCeIls2( Xr-'^); i〇- 端)u品?43 ,端卜齡Sk); 11. stated ^ X^2)\\X^; 12. end if 13. il、(c人!= =0)
[0137] ^ 14_ srC) 〇 s驗g32); 15. InvMkColumns( state,{l\] )* 16. In vS h i ft R o ws( state^l ^); 17. InvSubCclIs 1 (); 18. AddRounclKcy( , /^r, ;(>4) }; 19. %taie[^) <- 20. end if 21. end for 22. s如/e(G前 3,') G s如/ef后川: 23. Piainlcxl{(14i<- 24. 返回 Plaintext^,;
[0138] SFN算法解密过程中Feistel网络结构不进行任何变化,而SP网络结构使用了加密 运算变换模块的四种逆运算变换,并且相对于加密函数中各个运算组件运算顺序,解密函 数将逆运算组件的运算顺序变为相反顺序。在变换模块中轮密钥加变换的逆变换是自身。 轮密钥以加密运算相反的顺序对密文进行解密,解密过程的与加密过程使用相同的密钥。
[0139] Si盒替换逆运算(InvSubCellsl):SFN算法中SP结构的解密过程,解密的31盒是采 用PRESENT算法解密过程的逆P盒。逆盒如表4所示,其中数据以16进制表示。
[0140] 表4 SFN算法逆S-1盒元素
[0142] 16个单元为stateo(4)、statei(4)、......、statei5(4),每一个单元元素都经过逆S-1盒 元素进行替换,用公式(7)表示运算方法。
[0143] statej^S-1 (state j) 15) (7)
[0144] 行移位逆运算(InvShiftRows):对于16个单元组成的4X4矩阵,矩阵每一行循环 右移不同的单元,第零行单元循环右移3个单元,第一行单元循环右移两个单元,第二行单 元循环右移一个单元,第三行单元保持不变,行移位变换运算关系如图4所示。
[0145] 列混合逆运算(InvMixColumns):列混合逆运算矩阵if1如下所示,其中数据以16进 制表示。 ^9 2 9 1、 ,9 b b 8
[0146] M ' ^ 4 & / 3 ,8 2 2 :c^:
[0147] 列混合逆运算是将state(64)中元素4X4矩阵与列混合逆运算IT1在有限域GF(2 4) 上的乘法变换,变换公式(8),其中数据以16进制表示。 2 9 1) (state^ state^ state 2^ state^ ^ 9 b b S state aU、 state心 state以丄、 state7(A]
[0148] x 4(41 州 6(41 7W (8) 4 a f 3 state H(4} state*、 statem) state n{4] 2 2- cj ^
[0149] SFN算法测试数据如表5所示:
[0150] 表5 SFN算法测试数据
[0152] 本发明所述的SFN密码算法在ModelSim SE 6. If Evaluation上进行仿真;同时在 Synopsys Design Compiler Version B-2008.09进行综合,其中综合工艺库为SMIC 0.18]i m CMOS,在综合实验中,面积资源单位为GE。
[0153] SFN算法是用96位的密钥加密64位明文,需要是32个循环时钟信号。在频率为 lOOKHz场景下模拟,加/解密速率达到200kbps。
[0154] SFN算法各组件硬件实现资源具体描述为:64位的明文保存在寄存器中需要 344GE,96位的密钥保存在寄存器中需要为476GE。常数加模块中,轮常数是轮数,不需要寄 存器保存轮常数,而常数异或单元需要27GE。轮密钥加模块中,轮密钥异或单元需要 170.85GE。两个S盒替换模块,S盒的实现需要384GE。行移位模块与P置换模块,采用连线方 式实现,硬件实现不需要消耗资源。列混合模块,将乘法运算转换为异或与移位运算,可以 减少实现资源,从而只需要消耗资源为50GE。算法实现中,控制逻辑单元以及计数器共需要 40GE。SFN算法硬件实现仅需要1491.85GE。表6是SFN算法AS IC资源面积列表。
[0155] 表6 SFN面积资源列表
[0157] 对一些轻量级分组密码算法进行实现面积比较,由表7数据分析可知,SFN算法具 有低资源、高效的特点。
[0158] 表7各轻量级密码算法实现面积比较
[0160]在算法安全与灵活性上,通过原始密钥的最后32位作为每一轮控制选择,选择算 法两种结构中一种结构进行加/解密,同时另一种结构进行密钥扩展。从而有232 = 4294697296不同运算方式。相比固定密码结构进行加/解密与密钥扩展迭代运算,对于一些 攻击而言,可以提高232的防御难度系数。在ASIC实现平台上,算法硬件资源仅需要 1491.85GE,同时在频率为lOOKHz场景下模拟,加/解密速率达到200kbps。
[0161] 满足不同用户多层次的安全性需求,算法整体结构上既可以用SP网络结构运算又 可以用Feistel网络结构运算,充分体现了这两种结构相互之间的优势,从而使得算法更具 有灵活性、可扩展性,且具有高安全性以及低资源优点,有较好的应用前景。
[0162] 以上结合具体实施例对本发明进行了详细的说明,这些并非构成对发明的限制。 在不脱离本发明原理的情况下,本领域的技术人员还可以作出许多变形和改进,这些也应 属于本发明的保护范围。
【主权项】
1. 一种新型高安全的轻量级SFN分组密码实现方法,其特征在于,首先,将密钥划分成 待扩展密钥数据和轮运算过程的控制信号数据;其次,依据轮运算过程控制信号分别对待 扩展密钥和待加/解密数据进行密钥扩展和数据加/解密,每一轮扩展后的密钥用于下一轮 数据加/解密,直到完成所有轮数的轮运算;最后,输出密文/明文,完成加/解密操作; 所述待扩展密钥数据长度与待加/解密数据长度相同,所述轮运算过程的控制信号数 据长度与轮运算次数相同,依次从控制信号数据中选取一位作为一轮轮运算控制信号; 当轮运算过程控制信号为1时,待扩展密钥选择SP网络结构的轮运算函数进行密钥扩 展运算,待加/解密数据选择Feistel网络结构的轮运算函数进行加/解密运算; 当轮运算过程控制信号为〇时,待扩展密钥选择Feistel网络结构的轮运算函数进行密 钥扩展运算,待加/解密数据选择SP网络结构的轮运算函数进行加/解密运算。2. 根据权利要求1所述的方法,其特征在于,在轮运算中对所述待扩展密钥进行密钥扩 展的具体过程如下,密钥扩展进行32轮操作: 当轮运算控制信号select为O时,密钥扩展轮运算步骤如下: 1) 将64位待扩展密钥数据划分为前32位数据与后32位数据; 2) 对1)获得的前32位数据与轮常数进行常数加运算; 3) 对2)得到的运算结果进行S1盒字节替换运算; 4) 对3)得到的运算结果进行P置换运算; 5) 对4)得到的运算结果进行S2盒字节替换运算; 6) 对5)得到的运算结果与1)获得的后32位数据进行异或运算; 7) 对6)得到的运算结果作为下一轮前32位数据,并将1)获得的前32数据作为下一轮后 32位数据,得到轮密钥,即获得下一轮64位待扩展密钥数据,若轮运算的次数达到设定次 数,则结束密钥扩展,否则,依据轮运算控制信号,进行下一轮密钥扩展运算; 当轮运算控制信号select为1时,密钥扩展轮运算步骤如下: 8) 将64位待扩展密钥数据前后各32位数据相互调换位置; 9) 对8)所述调换位置后的待扩展密钥数据与轮常数进行常数加运算; 10) 对9)得到的运算结果进行S1盒字节替换运算; 11) 对10)得到的运算结果进行行移位变换运算; 12) 对11)得到的运算结果进行列混合变换运算,得到轮密钥; 13) 对12)得到的运算结果作为下一轮64位待扩展密钥数据,若轮运算的次数达到设定 次数,则结束密钥扩展,否则,依据轮运算控制信号,进行下一轮密钥扩展运算。3. 根据权利要求2所述的方法,其特征在于,在轮运算过程中对待加密数据进行加密的 具体过程如下,加密进行32轮操作: 当轮运算控制信号select为0时,加密轮运算步骤如下: 14) 将64位待加密数据的前后各32位数据相互调换位置; 15) 对14)所述调换位置的待加密数据与轮密钥进行轮密钥加运算; 16) 对15)得到的运算结果进行S1盒字节替换运算; 17) 对16)得到的运算结果进行行移位变换运算; 18) 对17)得到的运算结果进行列混合变换运算; 19) 对18)得到的运算结果作为下一轮加密轮运算中的64位待加密数据; 若轮运算的次数达到设定次数,则进入步骤27),否则,依据轮运算控制信号,进行下一 轮加密运算; 当轮运算控制信号select为1时,加密轮运算步骤如下: 20) 将64位加密数据分为前32位数据与后32位数据; 21) 对20)所述的前32位数据与轮密钥前32位进行轮密钥加运算; 22) 对21)得到的运算结果进行S1盒字节替换运算; 23) 对22)得到的运算结果进行P置换运算; 24) 对23)得到的运算结果进行S2盒字节替换运算; 25) 对24)得到的运算结果与20)得到的后32位数据进行异或运算; 26) 对25)得到的运算结果作为下一轮加密轮运算的待加密数据的前32位数据,将20) 得到的前32数据作为下一轮加密轮运算的待加密数据的后32位数据,得到下一轮64位待加 密数据;若轮运算的次数达到设定次数,则进入27),否则,依据轮运算控制信号,进行下一 轮加密运算; 27) 将所述经过32轮运算待加密64位数据前后各32位数据相互调换位置; 28) 对27)所述调换位置后的待加密数据与最后一轮密钥扩展轮运算得到的轮密钥进 行轮密钥加运算; 29) 对28)得到的运算结果作为密文,则加密运算操作结束; 加密轮运算过程中,第一轮加密轮运算所使用的轮密钥为初始密钥的前64位数据,从 第二轮开始依次为每一轮密钥扩展轮运算获得的轮密钥。4.根据权利要求2所述的方法,其特征在于,将密钥扩展轮运算得到的32个轮密钥逆序 用于解密轮运算过程,对待解密数据进行解密,具体过程如下,解密进行32轮操作: 30) 将64位待解密数据与最后一轮密钥扩展轮运算得到轮密钥进行轮密钥加运算; 31) 将30)得到的结果依据轮运算控制信号进行解密轮运算; 当轮运算控制信号select为0时,解密轮运算步骤如下: 32) 将进行轮运算的64位待解密数据前后各32位数据相互调换位置; 33) 对32)所述调换位置的待解密数据进行列混合逆运算; 34) 对33)得到的运算结果进行行移位逆运算; 35) 对34)得到的运算结果进行S1盒字节替换逆运算; 36) 对35)得到的运算结果与轮密钥进行轮密钥加运算; 37) 对36)得到的运算结果作为下一轮64位待解密数据;若轮运算的次数达到设定次 数,则进入步骤45 ),否则,依据轮运算控制信号,进行下一轮解密轮运算; 当轮运算控制信号select为1时,解密轮运算步骤如下: 38) 将进行轮运算的64位待解密数据分为前32位数据与后32位数据; 39) 对38)所述的前32位数据与轮密钥前32位进行轮密钥加运算; 40) 对39)得到的运算结果进行S1盒字节替换运算; 41) 对40)得到的运算结果进行P置换运算; 42) 对41)得到的运算结果进行S2盒字节替换运算; 43) 对42)得到的运算结果与38)所述的后32位数据进行异或运算; 44) 对43)得到的运算结果作为下一轮解密轮运算的待解密数据前32位数据,将38)得 到的前32位数据作为下一轮解密轮运算的待解密数据的后32位数据,得到下一轮64位待解 密数据;若轮运算的次数达到设定次数,则进入步骤45),否则,依据轮运算控制信号,进行 下一轮解密轮运算; 45) 将所述经过32轮运算待解密64位数据前后各32位数据相互调换位置; 46) 对45)得到的运算结果作为明文,则解密运算操作结束; 解密轮运算过程中,从第一轮到倒数第二轮解密轮运算所使用的轮密钥依次为密钥扩 展得到的倒数第二个轮密钥到第一个轮密钥,最后一轮解密轮运算所使用的轮密钥为初始 密钥的前64位数据。5.根据权利要求2-4任一项所述的方法,其特征在于,所述P置换运算是对数据中每一 比特位位置交换操作: 输入32位数据从高位到低位表示为:PO,Pl,P2,P3,P4,P5,P6,P7,P8,P9,pit),Pll,pi2,P13, P14,P15,P16,P17,P18,P19,P20,P21,P22,P23,P24,P25,P26,P27,P28,P29,P30,P31; 经P置换将数据比特位位置交换; 以 P0,P4,P8,P12,P16,P20,P24,P28,P1,P5,P9,P13,P17,P21,P25,P29,P2,P6,P10,P14,P18,P22,P26, P30,P3,P7,Pll,P15,P19,P23,P27,P31高位至丨J低位川页序数据输出〇
【文档编号】H04L9/08GK105959107SQ201610466022
【公开日】2016年9月21日
【申请日】2016年6月24日
【发明人】李浪, 刘波涛, 邹祎, 刘沛林, 邓运员, 焦铬, 陶娟, 王媛媛, 李永超
【申请人】衡阳师范学院
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1