随着信息化的发展,数据安全显得越来越重要,因此对数据的存储和传输进行加密操作逐渐进入大众视线。数据加密的过程中必然涉及由一系列参数组成的密钥,而密钥正是攻击者所垂涎的目标,这是由于相比于破解加密算法,盗取密匙要来得更为容易,也是直通数据“仓库”的捷径之一。
因此,密钥安全称之为“数据安全的基础”也不为过,尤其是在不可信的移动端环境中,常见的有获取了最高权限的 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 内存、抓包分析,应用运行时的密钥和存储在应用内的密钥容易被逆向获取。白盒密码的作用就在于在白盒攻击环境下保护密钥,对密钥进行加解密操作,阻止攻击者利用计算能力暴力破解。
网易易盾自研白盒加密分为静态白盒和动态白盒,不同业务可以选择不同的白盒方案。该加密凯发app官网的服务支持目前常用密码算法,涵盖主流的 aes、sm4、rsa、sm2,并且其运算结果与标准算法结果相同,助力业务无缝替换。在保障安全的同时,自研白盒算法兼顾了性能和便携性,可以满足绝大多数的业务需求。(作者:易盾移动安全专家流风 )