孙杰,全晓峰,柳杨,李海涛,王成松,高宇,许健宇,陆仲达
(国网黑龙江省电力有限公司齐齐哈尔供电公司,黑龙江 齐齐哈尔 161006)
由于物联网节点间的开放性,使得数据传输过程中极易受到外部攻击,导致信息传输不完整。因此数据的加密保护极为重要。传统的DES(Data Encryption Standard)加密由于密钥短加密能力较弱,已无法满足目前加密需求。因此,美国NIST采用AES加密作为一种新的加密标准。AES加密算法基于SPN(Substitution Permutation Network)架构,对明文进行多轮置乱和扩散操作,转化为密文。近年来,研究人员提出对AES加密算法改进的方法,将SubBytes变换成圆密钥相关,ShiftRows由传统的按行移位转化成随机移位,提高了加密性能[1]。刘等[2]采用一种新的仿射变换产生S盒,在利用平方剩余算法产生随机密钥流序列的方法对AES算法进行改进。结果表明,改进的AES算法有效的提升了加密的性能。虽然改进后的AES算法的安全性能得到了提升,但是却需要更多的计算资源,对于部分轻量级设备的加密产生了巨大的挑战。王等[3]提出了高效可撤销的身份基在线离线加密方案,方案利用在线离线加密技术在得知身份之前离线完成大部分的加密工作,在得知身份之后轻量级设备在离线密文的基础上进行少量运算即可得到密文。李等[4]在ABE加密算法的基础上引入在线/离线加密技术,将加密算法分为离线和在线两个加密过程。其中,离线加密可以在准备阶段完成加密预处理,在线加密基于预处理结果快速高效地完成最终加密。尤等[5]提出将AES和椭圆曲线密码ECC相结合的混合密码技术,解决了密钥分配和管理的问题。本文为增强物联网信息传输过程中数据的安全性,在AES密钥扩展过程中设计双轮AES密钥扩展的方式。同时考虑到物联网中存在的大量轻量级设备,由于计算资源有限,因此,在双轮AES加密算法的基础上设计了在线离线的加密模式,在节省计算资源的同时提高了加密算法的计算速度。
传统AES加密算法的流程如图1所示,将明文和密钥作为加密算法的输入参数。首先调用密钥扩展算法,对初始密钥进行密钥扩展得到轮密钥,接着进入到轮加密操作中,轮加密是迭代操作,为使明文达到置换和扩散的目的。轮加密包含4个算法,字节替换是把数据矩阵的每一个字节根据S盒替换为另一个字节,行移位是将数据矩阵的每一行里的每一位循环移位一定长度。列混合是把数据矩阵中的每个字节通过一种映射关系得到一个新的字节。轮密钥加是将数据矩阵与密钥矩阵进行异或操作。轮加密结束后,得到最终的密文。
图1 AES加密算法流程图
为缓解轻量级设备计算资源的限制以及减少算法的加密时间,将传统的AES加密算法设计为在线离线的模式。将加密流程分成在线和离线两个部分进行,离线阶段执行主要部分的加密操作,在线阶段使用离线加密得到的中间密文和轮密钥继续执行AES轮加密操作,以减少加密算法的计算时间。
在线离线AES加密算法的流程图如图2所示,可分为两个阶段:在线和离线。离线加密以明文、密钥为参数,执行密钥扩展算法得到轮密钥,然后调用轮加密操作按顺序是:字节替代、行移位、列混合、轮密钥加。轮加密是一个循环操作,经过多次的轮加密之后,得到中间密文ICH以及当前的轮密钥K_temp,作为在线加密算法的输入参数,接着调用在线加密算法,继续执行轮加密操作,经过n轮加密后,得到最终密文。
图2 加密算法流程图
实现加密方案的算法,包括以下7个算法:
(1)离线加密算法(offlineEncrypt(P,ICH,K,n)):输入为明文P,密钥K和轮数n,输出为预处理的中间密文ICH和当前轮密钥K_temp。
(2)在线加密算法(onlineEncrypt (P,ICH,K_temp,n)):输入为明文P、当前轮密钥K_temp、中间密文ICH和轮数n,输出为最终密文C。
(3)密钥扩展算法(KeyExpansions(K,W)):即对原始密钥进行密钥扩展,其复杂程度直接影响着算法的安全性,算法的流程如图3所示。该算法的输入为初始密钥K,输出为扩展后的密钥W。传统的AES密钥扩展算法是子密钥通过计算上一轮的子密钥得到。本文为进一步增强加密算法的安全性,在传统AES加密基础上,设计了双轮AES加密。双轮AES加密算法的密钥扩展是通过计算前两轮的子密钥得到当前轮的密钥。也就是要想得到第二轮密钥,就必须要知道第一轮子密钥和初始密钥才行。双轮AES加密与传统AES加密相比,提高了各轮级间的相关性,使得安全性得到了加强。这里借鉴了Khazad算法在密钥扩展时的应用。Khazad算法的密钥长度为128位,需要9个子密钥,每个子密钥长度为64位。双轮AES加密产生第二轮子密钥用如下方程式表示:
图3 密钥扩展算法流程图
式(1)中SubBytes替换Khazad算法的g函数,ShiftRows替换掉Khazad算法的S盒,使用轮常量Rcon异或代替传统的异或。
双轮AES加密在计算第一轮密钥,由于只存在一轮初始密钥。因此,在双轮AES加密的第一轮密钥生成方式仍采用AES原算法中生成第一轮密钥的方式,即:
双轮AES加密在第一轮密钥的生成算法之后,每一轮子密钥都需要计算前两轮子密钥得到,增加了算法总体的复杂程度,提高了加密算法的安全性。假设攻击者破解了某一轮的子密钥,如果想破解其下一轮的子密钥,就必须要知道已知子密钥轮的前一轮的4个32位的子密钥,这样便需破解2128次,它的时间复杂度无异于穷尽破解。因此,双轮AES加密与传统AES加密相比,信息传输更加安全可靠。
(4)字节替换算法(SubBytes):加密算法里面唯一的非线性的替换操作,使用S盒查表把矩阵的每一个字节替换为另一个字节。S盒是一张二维数据表,默认系统自动生成的S盒,如图4所示。
图4 字节替换流程图
(5)行移位算法(ShiftRows):将数据矩阵的每一行里的每一位循环移位一定长度。本文以循环左移为例,即第k行循环左移k-1个单位,行移位算法流程如图5所示。以第1行的数据18以及第二行的f2为例,18在第1行第1列,循环左移0个单位后不变,f2在第2行第2列,循环左移1个单位后在第2行第1列。
图5 行移位流程图
(6)列混合(MixColumns):每一列中的每个字节通过一种映射关系得到一个新的字节,增加混淆程度。如图6所示,状态矩阵乘以一个数据矩阵得到一个新的状态矩阵。
图6 列混合流程图
(7)轮密钥加算法(AddRoundKey):将状态矩阵与密钥矩阵进行异或操得到新的状态矩阵,如图7所示。
离线加密、在线加密算法以及双轮AES加密的密钥扩展算法实现方法如下。
(1)离线加密:以明文P、密钥K和离线加密的轮数n为输入,经过n次轮加密,输出预处理的中间密文ICH,以及当前的轮密钥K_temp。算法伪代码如下:AES_offEncrypt离线加密(2)在线加密:以明文消息P、轮密钥K_temp、中间密文ICH和轮数n为输入,经过n次轮加密,输出最终密文C,算法伪代码如下:AES_onlineEncrypt在线加密(3)双轮AES加密的密钥扩展:将当前轮的前两轮密钥做为输入,长度为8字节。密钥扩展的第一个字是种子密钥,第二个字是传统 AES密钥扩展计算得到的第一轮密钥,之后的每一个字W[j]等于前面的字W[j-1]与W[j-2]的异或,算法的伪代码如下:KeyExpansion密钥扩展算法
雪崩效应指明文或密钥的少量变化会引起密文的很大变化。本文以采用128比特密钥的AES加密算法为例,明文、密钥及加密所得密文分别如下:
明文:776672656839333734696f6d626e6436
密钥:3537667232306a6c6b61736667686162
密文:e7af16d8c7a2a23898cfb5d6848ba4ef
将上述的128比特明文、密钥和密文作为测试标准,通过解密算法解密密文得到与明文相同的数据,证明了在线/离线的双轮AES加密算法是正确的。在保持明文不变的条件下,改变密钥的1位然后进行加密,以此测试改进的AES算法的密钥雪崩效应特性,得到对应的密文和相对于标准密文的密文变化比特数如表1所示。
由表1可知,传统的AES加密算法的雪崩效应为67.187 5% ,而改进的AES加密算法的雪崩效应为76.562 5%。即当翻转密钥中的一个位(第2位)时,使用改进的AES加密算法得到的密文中有超过76%的位发生了变化,而使用传统AES加密算法得到的密文仅有67%的位发生了变化。改进的AES加密算法与传统的AES加密算法相比,雪崩效应有所提高。使新一轮的子密钥与前两轮子密钥相关,敌手无法通过某一轮的子密钥得到全部的子密钥,提高了破解难度。敌手如果使用穷举攻击算法,则需要破解1 632个密钥,几乎不可能实现,保证了改进的AES算法的安全性。
表1 雪崩效应测试结果
执行时间即将明文转换为密文所需用的时间。加密时间的期望值很小,以便具有高效性。实验采用同一密钥对不同大小的明文进行加密,计算算法的平均加密时间并以毫秒(ms)为单位,结果如表2所示。
由表2的数据表明,在线离线的双轮AES加密算法的平均加密时间缩小,是传统AES加密算法的1/70。
表2 执行时间测试结果
在传统AES加密算法的基础上,设计了在线离线的双轮AES加密算法。在密钥扩展过程中,增强当前轮子密钥与前两轮子密钥的相关性,极大地增大了AES加密算法的破解难度,提高了加密算法的安全性能。同时将加密过程划分为在线离线阶段,节省了加密时间,从而快速高效地完成最终加密。在线离线的双轮AES加密算法在保证信息安全的同时增强了加密效率,能够适用于物联网中轻量级设备的信息传输。