吕 炜 李永忠
(江苏科技大学计算机学院 镇江 212003)
随着互联网技术的不断发展,网络中的数据在传输时面临了诸多安全威胁。若未对信道中传输的隐私数据未进行任何加密保护,则数据很可能面临被篡改的风险或导致数据泄露等问题[1~2]。在实际应用时,采用单一密码体制存在密钥管理困难或加解密效果不理想等问题,因此混合加密方案兼顾了安全性与效率而受到业内广泛关注[3~4]。刘见龙[5]采用SM2 结合SM4 的混合加密方案,实现了一个WIFI 热点管理系统,提高了WIFI 热点的安全性。王红珍[6]采用ECC 结合AES的混合加密方案,设计了一个加密系统。肖振久[7]改进了AES 和RSA算法,将两者结合设计了一个基于混合加密的数字签名系统。
本文提一种改进的AES 算法结合国密SM2 算法对网络中的数据进行加密传输。利用改进AES算法加密速率快和国密SM2 算法便于管理密钥的优势,对需要传输的数据进行安全高效的加密。同时加入SM3算法,用于数据完整性检验。
美国于2001 年提出了AES 对称加密加法,该算法的密钥有128 位、192 位和256 位可选,其具有加密灵活、适应能力强和加解密效率高等特点[8~9]。
AES算法的加密流程如图1所示。
图1 AES加密流程
我国国密SM系列算法中的SM2算法是基于国外的ECC 椭圆曲线密码体制研发的,但是SM2 算法的各方面性能要优于ECC算法,其加解密步骤如下[10~11]。
1)接收方选择一条椭圆曲线Ep(a,b),并在曲线上选择一个基点G,生成密钥对(dB,PB),将公钥发送给消息发送方;
2)发送方根据接收到的公钥PB将明文M 编码到Ep(a,b)上,将密文传输给接收方;
3)接收方收到密文数据包后使用私钥dB解密得明文M'。
SM3算法是国密系列算法中唯一的杂凑算法,要求输入的明文信息长度l<264bit,然后将消息经过信息填充、迭代过程、消息扩展和压缩函数等处理,最终输出一个固定长度为256bit的杂凑值[12]。
1)AES密钥扩展改进
传统AES 加密算法10 轮密钥扩展过程为,将输入的初始128bit 放到一个4*4 的状态矩阵中,然后判断,若i 的值不为整除4,则W[i]=W[i-4]⊕W[i-1];若i 的值能整除4,则W[i]=W[i-4]⊕T(W[i-1]),最后扩展成44列的扩展密钥数组。由此可知W[i]的结果都由W[i-1]和W[i-4]运算得到,虽然这种密钥扩展方式高效但是存在一个缺陷,若是攻击者获取到其中一轮的密钥,就能根据逆变换倒推出前面的密钥以及推导出后面的密钥,从而获取到剩余的所有密钥[13]。
文献[7]中提供了一种密钥扩展的改进方法,原理如图2所示。
图2 改进的AES密钥扩展
初始密钥不变,依旧按照原来的密钥扩展算法进行轮密钥扩展。但在接下来的十轮密钥扩展中,第一轮密钥扩展时使用一个与初始密钥无关的新密钥填入其中,后面的密钥扩展过程依据AES固有的扩展算法在新密钥的基础上进行扩展,这样能大大提高密钥的安全性。
2)AES列混合操作改进
在传统AES算法中,列混合变换是通过固定矩阵M 相乘来实现的,分为解密时的正向列混合变换,如式(1)所示,以及解密时的逆向列混合变换,如式(2)所示。
文献[7]中提供了一种列混合操作的改进方法,使固定矩阵M的逆矩阵与原矩阵相等,如式(3)所示,则解密时的列混合变换就跟加密一样只需要进行2 次乘法运算和4 次异或运算,能大大提高解密速度。
1)加密过程[14]
输入:长度为klen的明文M,公钥PB;
(1)产生随机整数k,k∈[1,n-1] ;
(2)求C1=[k]G=(x1,y1),将C1转化为比特串;
(3)求S=[h]PB,判断若S 为无穷远点,则报错;
(4)求(x2,y2)=[k]PB;
(5)求t=KDF(x2||y2,klen),若t 全为0,则返回(1);
(6)求C2=M⊕t;
(7)求C3=Hash(x2||M||y2);
输出密文C=C1||C2||C3。
2)解密过程[15]
输入:密文比特串C,私钥dB;
(1)提取出C1,将C1转化成椭圆曲线上一点;
(2)求S=[h]C1,判断若S为无穷远点,则报错;
(3)求(x2,y2)=[dB]C1;
(4)求t=KDF(x2||y2,klen),若t 全为0,则返回(1);
(5)提取C2,求M'=C2⊕t;
(6)求u=Hash(x2||M'||y2),若u=C3进入下一步,否则报错;
输出明文M'。
对消息M计算其哈希值过程如下:
其中V(0)表示长度为256bit 的初始值IV。CF表示压缩函数。B(i)表示消息M填充后的分组。V(n)表示最后计算出的哈希值。
本文提出的基于改进的AES 与SM2 混合加密算法整体流程如图3所示。
图3 算法整体流程
使用改进的AES算法对隐私数据进行加密,对于加解密过程中使用的对称密钥,使用国密SM2算法进行加密保护。此外,利用国密SM3哈希算法对需要传输数据进行哈希值的计算,在接收端对数据进行完整性验证,验证通过则接受此消息,否则拒绝接收。本文的混合加密算法步骤如下:
1)消息接收端产生非对称密钥对,将公钥publicKey发送给消息发送端;
2)发送端产生对称密钥Key,对明文M 进行哈希值计算得Z,用Key 对拼合的消息M//Z 加密,用公钥publicKey 对密钥Key 加密,将密文数据包发送给接收端;
3)接收端用私钥praviteKey 解密密钥密文得Key,使用密钥解密得M'//Z,对M'进行哈希值计算得Z'。
4)判断Z是否等于Z',若Z=Z',则输出明文M',否则拒接接受此消息。
实现环境为Windows7 系统,处理器CPU 为Interl Core i5-2450m,2.50HG,运行内存6G,编程语言为Java语言,工具为ecplice。
图4 是数据集,利用程序生成的模拟身份隐私信息其中包含姓名、电话、地址和身份证号等。
图4 隐私数据
图5 是对文本隐私数据进行对称加密后输出的密文,由图可知加密成功。
图5 密文
图6是导出的双对称密钥明文。
图6 双对称密钥
图7 是经过SM2 加密的对称密钥密文,由图可知加密成功。
图7 密钥密文
测试运行环境为Windows7 系统,处理器CPU为Interl Core i5-2450m,2.50HG,编程语言为JAVA语言,工具为ecplice。
本文混合加密算法使用两个128bit 长度的对称密钥对60MB 以内的文本隐私数据进行加解密时间测试,另外对SM2+AES 和RSA+AES 两种混合加密算法也进行了测试,测试结果如表1所示。
表1 加解密耗时对比
图8和图9分别是三种混合加密算法加密和解密耗时的折线对比图。
图8 加密耗时对比
图9 解密耗时对比
由图可知三种混合加密算法中,加密时,RSA+AES算法加密速度相对快一点,考虑到RSA密钥对生成时间慢,所以优势不明显。SM2+AES 和SM2+改进的AES算法加密速度几乎相等,且SM2密钥对生成时间快。解密时,SM2+改进的AES 算法的解密速度最快,其次是RSA+AES 算法,最后是SM2+AES 算法,因此本文提出的混合加密算法性能较好。
此外改进的AES算法,使用的两个不相关的对称密钥,攻击者需要平均进行2255次尝试才能破解密钥,以当前的计算能力想破解密钥起码需要数亿年的时间。且使用SM2 非对称密码算法对AES 算法的密钥进行加密传输,能够很好地保证对称密钥的分配安全。
综上,本文的混合加密算法在提高密钥安全性的同时提升了解密速度。
本文提出了一个基于改进的AES 算法和SM2算法的混合加密算法,用以保障数据的传输安全。通过实验分析对比了三种混合加密算法的加解密性能,得出本文提出的混合加密算法性能更好,安全性更高。但在网络中的隐私数据安全所要面对的挑战远不止于此,形势依然很严峻。而该混合加密算法从研究到应用还有很长的一段路要走,因此今后会继续深入的研究,确保改进的混合加密算法能更好地保证隐私数据的传输安全。