2024年4月21日发(作者:)
白盒AES加密在软件保护中的应用
摘要 加密是软件保护中最古老、最常见的方法,它常常和其他的方法和混合起来使用,
以进一步增强对软件的保护效果。由于软件是处在“白盒”的执行环境中的,传统的加密
方法在软件保护领域难以取得良好的效果,这并因为非加密算法的强度不够,而是由于软
件的执行过程是可以被跟踪的,也就是说密钥和加密算法对于攻击者是可见的,所以需要
特定的针对白盒模型的加密手段来保护软件及密钥安全。本文主要探讨软件保护中的密钥
安全问题,分析了传统软件密钥保护方法的局限与不足,提出一种最佳的解决方案,即白
盒加密算法,并具体分析了一种基于AES加密的白盒实现算法。
引言
软件保护主要是为了防止软件被破解、被修改或被盗版等,现在较为成熟的软件保护
技术主要包括,代码混淆[1]、加密、多态、水印、指纹、虚拟机、远程过程调用和基于硬
件的保护等,我们往往根据不同的保护目的,选择或混合使用不同技术对软件进行保护。
其中加密技术是使用最广泛的软件保护技术之一,如软件加壳就是对整个代码段进行一次
性加密并在软件运行时一次性解密,自修改代码就是在软件运行的过程中根据需要动态地
进行代码块的加解密。传统的加密技术的有一个基本假设就是攻击者无法获得密钥,具体
而言,认为攻击者并未实质性地接触到密钥或者任何内部操作,仅仅能观察到一些外部信
息或者操作,这些信息包括系统内的明文(输入)或者密文(输出)。但在软件保护领域传
统加密算法遇到了很大的挑战,这主要是由于软件实际上是处在白盒环境中的。白盒的定
义主要包括三点,一是攻击者对主机和软件具有完全控制权,二是软件动态执行过程是可
见的,三是加密算法内部细节完全可见。在这种白盒环境中,传统的密钥由于需要存储在
软件中,很容易被跟踪和定位,并以密钥为线索分析加密算法的种类进而对程序进行破解,
因此当加密技术应用于软件保护上时,需要更多关注如何隐藏和保护密钥。
1 相关研究
在软件保护领域中,密钥保护的思路主要有三种,第一种是自生成密钥,即密钥是由
需要保护信息自身生成出来的;第二种是分块密钥,即密钥有很多块,存放在不同位置。
第三种是白盒加密[2],其核心思想是让密钥固化在加密算法中,同时用人类无法理解的随
机矩阵将算法混淆。
1.1 自生成密钥
自生成密钥的基本思路是让由文件自身的信息来生成密钥,要从文件自身提取信息来
生成密钥就必须将文件分块加密,这是因为若文件没有分块,即仅有一块,加密后文件变
成了密文,密钥依赖的生成信息也就不存在了。自生成密钥的实现方法是首先对文件进行
分块,然后按指定顺序依次加密,每一块的密钥都不是提取自身的信息,而是依赖于其他
块的信息,这种顺序依赖原则可以保证始终有信息可以用来生成密钥,在解密时必须严格
按照加密相反的顺序逐块解密。
自生成密钥的缺点有两点,一是必须按顺序解密,所以当仅需要解密Bi块时,必须将
B1,B2,···Bi块全部解密。二是需要保存加密顺序t及分块的数量n,由于每次解密时都
需要访问t和n,因此它们是加密算法的敏感数据,很容易成为攻击的突破口。
自生成密钥算法的本质并没有脱离使用密钥,它是一种把单密钥设计改成循环动态生
成密钥并加密的算法,该算法严重依赖解密顺序,使用场景有一定的限制,而且重复生成
密钥会带来较大开销。
1.2 分块密钥


发布评论