APP下载

轻量级密码算法设计及其在软件区块加密中的应用

2022-02-02李浩华郭现峰张育铭

关键词:加密算法密钥代码

李浩华,郭现峰,张育铭

(西南民族大学计算机科学与工程学院,四川 成都 610041)

软件安全存在软件破解与逻辑篡改、代码窃取三大类问题[1].软件版权保护是网络安全的重要组成部分,在软件的开发的过程中,会碰到困难,如技术难度高,项目复杂,开发周期短等,潜伏安全性的隐患的几率是很大的.当前的软件本身愈发复杂,开发一个软件产品所需考虑的问题也会越来越多[2],防止软件被盗版,阻止被修改是互联网安全领域的一个重要研究方向[3].文献[4]提出了一种基于RSA 算法的数据加密技术,虽然该算法较为成熟,但与相同安全级别的加密算法相比,该算法需要更长的密钥.这就使运算速度较慢,不利于对大量的数据加密.文献[5]提出的基于代码碎片化的软件保护技术,为逆向破解增加了跟踪难度,但未对函数进行混淆加密,安全性存在不足之处.为了能更好的保护软件,提高软件的安全性,保证系统安全、避免财产损失,抵御静态分析,为软件添加加密锁是非常有必要的,本文结合SMC 动态加密技术并提出一个适用于轻量级加密算法方案.该方案使用提出的加密算法,利用SMC 动态加密技术对软件核心区块代码进行加密.这一些保护措施能够给非法复制或是非法滥用造成有效的障碍.

1 算法设计

1.1 密码体制

在密码学原理中,可以把密码体制分成两个大类,一个是对称密钥加密[6].对称密钥加密是指加密双方使用同一个密钥Ke=Kd,或本质上相同的密码体制,对称密钥加密的算法公开,其加密速度快,效率高,适用于轻量级开发,便于实现.典型代表算法有DES(data encryption standard)、AES(advanced encryption standard)、RC4[7]等.另一个则是非对称密钥加密[6],非对称密钥加密算法是指通过在加密和解密过程分别使用两个不同的密钥来实现的,并且要求通过加密密钥推导不出解密秘钥.目前在密码学领域中,典型的公钥加密算法有RSA[8]、ECC[9]算法等.

1.2 加解密算法设计

本文提出的加密算法采用的是非线性混沌映射流密码[10]实现的思路,是一种已分组长度n 为参数的叠加式流密码体制.将明文序列设为:M =m1m2…mn-1mn;key 密钥数组为输入密钥通过非线性混沌映射Logistic 映射得到的,见式(1);密钥序列为:K =k1k2…kn;经一系列加密变换得到密文流:C =c1c2…cn.解密过程则是加密算法的逆过程,将密文流C转换为明文流M的流程.

其中xi为输入密钥数组中第i位的ASCII 值,μ为Logistic 混沌映射的混沌参数.

加解密算法具体步骤如下:

Step1:根据SizeOfRawData 函数读取到的待加密文件的dLen,即被加密数据的长度、key 密钥数组、Klen 密钥长度进行密钥填充K-box 数组.见图1.

图1 S 和K-box 的初始变化Fig.1 The initial schanges of S and K

Step2:将密钥key 字符串转化为ASCII 码数组,使用K-box 与key 数组长度进行数组置换.公式为,其中i,j 为指针,控制K-1 的变化.如图2所示:

图2 数组置换Fig.2 Array permutation

Step3:根据SizeOfRawData-dLen 与K-1 进行循环伪随机密钥流数组异或混淆,得到K-2 数组.公式为,其中d 代表待加密段数据长度.再根据SizeOfRawData-dLen 数组的长度进行数组置换,得到K数组.如图3 所示:

图3 异或和置换Fig.3 XOR and permutation

Step4:使用PointerToRawData 数据指针与密钥流K-2 数组对数据进行加密后输出K-3,即将K-2 进行混淆后的伪随机密钥流数据与PointerToRawData 指针对应的数据进行异或运算输出.如图4 所示:

图4 二次混淆Fig.4 Secondary confusion

1.3 密钥流的随机性测试

在软件版权保护中,代码安全与否,取决于加密算法生成的密钥序列是否具有良好的随机性,即生成的密钥序列越良好,随机性越好,其安全性也就会越高.

本文使用的是NIST 统计测试套件[11]对本文加密算法生成的密钥流进行测试,测试对象为RC4 算法和本文提出的加密算法,采用的参数配置为文献[12]中所使用的参数配置,取显著性水平α =0.01.本文使用Matlab 平台进行仿真实验,生成100 组随机生成的密钥流序列,在Ubuntu16.04 虚拟机环境下进行随机性测试.密钥流序列随机性测试如图5 所示:

图5 密钥流随机性测试流程Fag 5 Key stream randomness test process

运用NIST 统计测试套件对RC4 算法与本文设计的算法的测试平均结果如表1 所示:

表1 NIST 的的是结果Table 1 NIST test results

测试结果如上表可知,RC4、AES 和本文中的加密算法生成的密钥流序列都通过测试,都具有良好的随机性.其中频率测试、游程测试、Maurer 的通用统计测试,这三项重要测试的结果都比RC4 的要高,游程测试、二元矩阵秩、重叠模块匹配、序列测试的测试结果略高于AES 加密算法.此外,本文的加密算法的多数测试结果都要比RC4 算法测试结果高,因此可得出结论,本文的加密算法的密钥流序列的随机性要比RC4 算法以及AES 算法的密钥流序列的随机性好.从而验证了本文设计的加密算法的安全性.

1.4 密钥空间分析

本文提出的算法在实际应用中可根据实际场景设置不同长度的密钥以达到保护软件的目的,具有一定的灵活性.在实际的过程中,计算机计算性能和精度会影响到取值的精度.以本文提出的的加密算法应用到本文设计开发的Test 中为例,一共有3 个参数,假设使用的密钥长度为64bit,仅计算该算法下参数的密钥空间可以达到,其密钥空间是足够抵抗一般的穷举性攻击的.在此基础上,进行密钥相关性分析实验,对密钥进行小幅度修改,即对密钥序列加上1-bit,再进行相关性分析,结果如表2 所示:

表2 密钥序列与修改过的密钥序列相关性系数对比Table 2 Comparison of correlation coefficient between key sequence and modified key sequence

经过相关性测试,对比结果表明,本文加密算法生成的密钥序列的相关性系数的水平方向结果较低于RC4 算法、AES 算法,密钥空间安全性较高,达到了密文保护的目的.

1.5 明文敏感性分析

一般来说明文序列中,相邻间的数据值有具有较强的相关性,经过加密后,密文中相邻的数据值得相关性越是趋近于0 表示其越不相关.本文随机选取100 对明文序列和密文序列进行仿真实验,将两者作为研究对象进行计算,计算结果如表3 所示,相关系数计算公式为:

表3 敏感性分析结果Table 3 Sensitivity analysis results

从上表中,可以得到密文相邻数据的相关系数更趋近于0,无论是水平方向还是垂直方向,都比同类加密算法密文的相邻数据的相关性更小,由此表明本文提出的算法的加密效果更好.

2 软件加密与实验

2.1 SMC

本项目是基于SMC 技术下展开的,关于SMC(Self Modifying Code)技术,是指一种将可执行文件中的代码或数据进行加密[13-14],防止别人使用逆向工程工具(比如一些常见的反汇编工具)对编译后的代码进行静态分析的方式,在程序执行期间对自身代码和数据进行修改,以便正常地运行程序和访问数据.SMC 技术在软件保护等领域的使用也十分广泛,例如为软件加壳、病毒等等.为增大逆向分析的难度,保护软件本身逻辑不被破解或是修改,运用SMC 技术可以混淆软件中部分代码,提高自身安全性系数.SMC 执行流程如图6 所示:

图6 执行流程图Fig.6 Encryption execution process

2.2 实验平台

本项目使用Microsoft Visual Studio 2013 作为开发IDE 工具进行开发,运用C ++语言进行编程.根据国内密码学研究与设计方案,设计了SMC 自修改方案[15],并运用在应用保护中.项目主要包括两个大模块,分别为加密模块与解密模块.

2.3 加密模块

加密模块包括加密程序以及加密算法,如图所示.通过选择文件读取待加密文件信息,得到文件的相关数据,PE 结构见表4.得到表中的所有值之后,在Key 编辑框输入密钥Key 后,点击加密区块,程序会对待加密工具进行加密操作.加密时,加密程序会检测待加密程序中是否存在指定的区块即SMC 区块,若无,则提示未找到.SMC 段,若有则进行加密操作,待加密完成后弹出提示框显示SMC 加密成功.加密程序执行流程如图7 所示:

图7 执行流程图Fig.7 Encryption execution process

表4 PE 结构(部分)Table 4 PE structure(Part)

2.4 解密模块

解密模块主要包括待解密程序以及解密算法,为配合验证加密程序的加密机制,该模块将使用Microsoft Visual Studio 2013 作为开发IDE 工具开发名为Test 的程序,功能包括密钥Key 录入,以及执行SMC区块内的代码,见下图.在Key 编辑框输入与加密程序相对应的密钥后,点击加密被加密代码是,程序会提示Key 录入成功,并对SMC 区段内的代码进行解密.点击执行被加密代码按钮,若能成功解密则会弹出提示框提示正在执行被加密代码即证明了Key 能够将加密的代码进行解密,若密钥Key 错误,则会提示Key 不正确,重新输入.

3 安全性测试

软件测试是针对Test 程序进行的,验证SMC 加壳工具是否满足了需求规格的定义,是否对核心代码进行了混淆,是否是混淆后的程序正常运行.对测试程序Test 进行动静态测试分析,两种测试分析结果表明,文本提出的加密算法已成功对目标程序的重要区块代码数据进行加密混淆.

3.1 软件动态测试

OllyDbg 是反汇编工作的常用工具,可对目标程序进行动态逆向分析实验,测试Test 程序加密前后的内部核心代码是否被加密.加密前结果如下图,可以看到提示码被放在USER32 中,代码被执行时,读取601000 数据地址里的HEX 数据.与加密后的数据进行对比发现,数据已呈乱码状态,已达到保护作用.加密前后程序如图8、图9 所示:

图8 加密前的程序Fig.8 Pre encryption program

图9 加密后的程序1Fig.9 Encrypted program 1

3.2 软件静态测试

IDA Pro 是静态反编译常用工具,可对目标程序进行静态反编译分析实验,对加密程序Test 进行静态反编译分析,结果见图10,可以看到601000 数据地址里的HEX 数据.与图8 的加密前数据进行对比发现,数据已呈乱码状态,结果表明加密算法已成功加密重要区块数据,达到安全保护作用.

图10 加密后的程序2Fig.10 Encrypted program 2

4 结论

为了能更好的保护软件,提高软件的安全性,保证系统安全、避免财产损失,抵御静态分析,本文利用非线性混沌技术构造了一个安全高效的轻量级加密算法,并结合SMC 动态技术实现了一个软件核心区块代码加密方案.设计了一种轻量级的对称加密算法,并运用于软件加密中,又利用SMC 动态加密技术对软件的核心区块进行了加密.利用非线性混沌技术构造了一个安全高效的轻量级加密算法,并结合SMC动态技术实现了一个软件核心区块代码加密方案.通过构造的方案,能对软件核心代码区域实现加密,并有效抵御反编译、非法授权等安全问题.本文算法在随机性测试、密钥空间分析、明文敏感性分析以及安全性测试的实验中,验证了该算法的安全性和优越性.本文采用相同的密钥进行解密无疑降低了软件的安全程度,对于如何解决这个安全性问题,例如是否可以使用双重密钥加解密的方式,又或者是否可以使用非对称加密的方式加以解决,这是往后继续改进的重点.

猜你喜欢

加密算法密钥代码
幻中邂逅之金色密钥
幻中邂逅之金色密钥
基于DES加密算法的改进研究
密码系统中密钥的状态与保护*
基于整数矩阵乘法的图像加密算法
TPM 2.0密钥迁移协议研究
创世代码
创世代码
创世代码
创世代码