中文站

一种新型自研白盒密钥算法,让攻击者无迹可寻

随着信息化的发展,数据安全显得越来越重要,因此对数据的存储和传输进行加密操作逐渐进入大众视线。数据加密的过程中必然涉及由一系列参数组成的密钥,而密钥正是攻击者所垂涎的目标,这是由于相比于破解加密算法,盗取密匙要来得更为容易,也是直通数据“仓库”的捷径之一。

因此,密钥安全称之为“数据安全的基础”也不为过,尤其是在不可信的移动端环境中,常见的有获取了最高权限的 Android、iOS 设备。 本文基于移动端密钥使用和存储的痛点,介绍了一种自研的白盒加密方案,为保障移动应用内敏感信息、本地数据和传输数据的安全提供设计与应用思路。

01 密钥安全需求

当前,移动端常见的几种不安全的密钥存储方式:

1. 直接硬编码在代码中,很容易被逆向分析;

2. 存储在私有目录的文件中,有最高权限的终端可以导出查看;

3. 将密钥分段,分别存储在代码和文件中,最终在内存中拼接起来,由于内存中还是出现了完整的原始密钥,所以攻击者只需要花点时间,也可以逆向分析出来;

4. 将密钥存储在动态库中,同时加解密也都在动态库中进行,这在一定程度上增大了分析难度,但是有经验的攻击者并不难将其逆向出来;

5. 用另外一个密钥B加密这个密钥A,将密钥A的密文存储在文件或代码中,在实际使用时进行解密,虽然增加了静态分析难度,但可以使用动态调试的方法,对加解密方法进行插桩,即 Hook,也可以分析出密钥 A 。

一般而言,将密码软件的执行对攻击者完全可见的环境称为白盒攻击环境。有最高权限的移动端环境就是白盒攻击环境。在白盒攻击环境中,攻击者通过观察或者执行密码软件,可以轻而易举地获得密钥信息。

为了抵御此类攻击,白盒密码孕育而生。白盒密码是针对白盒攻击环境提出来的,其目的是为了在白盒攻击环境中,对密钥进行隐藏,有效地防止攻击者获得密钥信息。

02 密码体系

密钥分为对称密钥和非对称密钥,而密码体系分为对称加密算法和非对称加密算法。

对称加密算法中的对称密钥是指加密和解密使用相同的密钥,常用的算法有 DES、AES 和 SM4 等。

非对称密钥又称为公钥加密,加密和解密分别使用不同的密钥,一般加密使用的密钥称为公钥,可以对外公开,而解密使用的密钥称为私钥,不能公开。常用的算法有 RSA、ECC。

03 现有白盒方案

目前,在市场上被普遍使用的白盒方案为 Chow 等人于2003年提出的白盒 AES 算法。该算法将密钥隐藏在查找表中,密码算法的执行过程则通过查找表格来实现,攻击者根据查找表无法得出密钥信息。不过,与标准AES算法相比,该白盒方案也存在一些不足:

1. 性能比标准 AES 算法慢近10倍。

2. 存储空间上会多出一个查找表,这个查找表为752KB,如果同时进行加密和解密,则会多出两个查找表,即加密和解密各有一个查找表,非常占用空间。

3. 一个密钥绑定一个查找表,如果要更新密钥,则需要更新查找表,而查找表巨大的体积,容易致使更新不便。

04 自研白盒方案

在深入了解密码算法原理之后,易盾对不同的算法分别进行白盒化,已经实现了白盒化的密码算法有 AES、RSA、SM4 和 SM2,未来还将支持更多的通用密码算法。

具体而言,针对 AES 和 SM4 算法,我们借鉴 Chow 等人的白盒思路,将密钥隐藏在查找表中,并在此基础上进行性能和体积优化;针对 RSA 和 SM2 算法,我们通过自研方案,将密钥进行拆分,一部分密钥动态生成,而且在存储时和内存中均不会出现完整密钥。

为了解决上述查找表体积过大、更新密钥不便的问题,易盾提出动态白盒方案,减小查找表体积,密钥与查找表不进行绑定,可以很方便地进行密钥更新。与现行白盒算法相比,新型自研算法在功能性和安全性方面更为优越,主要表现为以下几点:

1. 对静态白盒进行补充,形成动态白盒。

静态白盒是指原始密钥经过白盒密码技术处理得到查找表,再与白盒算法相结合,形成白盒库。白盒库具备加解密功能,并且能在白盒攻击环境下有效地保护原始密钥的安全。静态白盒更新密钥,需要重新生成查找表。

动态白盒是指白盒库生成后就不需要再更新,原始密钥经过动态白盒密码技术处理得到白盒密钥,白盒密钥与白盒库相结合进行正常的加解密。白盒密钥是安全的,攻击者不能通过分析白盒密钥得到任何关于原始密钥的信息。动态白盒在更新时,只需要重新生成白盒密钥即可。


2. 对主流算法进行了白盒化,包括 AES、SM4、RSA 和 SM2,其中静态白盒支持 AES 和 SM4,动态白盒全部支持。

3. 支持对白盒密钥进行限制,比如密钥只能加密,不能解密;只能签名,不能解密等。

4. 对白盒算法的性能和体积进行优化,其效果改善如下表所示:

静态白盒:


动态白盒:


05 白盒应用场景

如何保护密钥安全,一直是移动安全长期探讨的关键问题之一。白盒密钥保护适用于多种移动应用场景,包括:

1. 终端数据安全

字符串加密:对代码中的字符串进行普通加密,在实际运行时用白盒密码去解密,避免攻击者通过静态分析字符串轻易分析出业务逻辑,并在一定程度上增加攻击者动态分析难度。

文件加密:对文件进白盒密码加密保护

核心代码保护:对动态库或其他文件中的核心代码进行标准加密保护,在动态加载还原时,用白盒密码解密。

2. 数据传输安全

在客户端用白盒密码加密需要传输的数据,在服务端用标准密码进行解密;在服务端用标准密码加密需要传输数据,在客户端使用白盒密码进行解密。

3. IOT

随着物联网产品的普及,其安全性受到了广泛重视。针对低性能、低存储空间的 IOT 设备,白盒密钥算法也能满足白盒加密需求,对需要更新的固件进行白盒加密保护。

06 总结

移动端应用本身运行在一种白盒攻击的环境中,应用可以被调试、二次修改、dump 内存、抓包分析,应用运行时的密钥和存储在应用内的密钥容易被逆向获取。白盒密码的作用就在于在白盒攻击环境下保护密钥,对密钥进行加解密操作,阻止攻击者利用计算能力暴力破解。

网易易盾自研白盒加密分为静态白盒和动态白盒,不同业务可以选择不同的白盒方案。该加密服务支持目前常用密码算法,涵盖主流的 AES、SM4、RSA、SM2,并且其运算结果与标准算法结果相同,助力业务无缝替换。在保障安全的同时,自研白盒算法兼顾了性能和便携性,可以满足绝大多数的业务需求。(作者:易盾移动安全专家流风 )