Android 设备磁盘加密全解析
1. 密钥推导
在 Android 系统中,磁盘加密密钥(在 Android 源代码中称为“主密钥”)会使用另一个 128 位的 AES 密钥(KEK)进行加密,而这个 KEK 是从用户提供的密码推导而来的。
- PBKDF2 算法(Android 3.0 - 4.3) :在 Android 3.0 到 4.3 版本中,使用的密钥推导函数是 PBKDF2,迭代次数为 2000 次,并且使用 128 位的随机盐值。推导得到的加密主密钥和盐值会与其他元数据(如解密失败尝试次数)一起存储在加密分区最后 16KB 的页脚结构中,这个结构被称为加密页脚。将加密密钥存储在磁盘上,而不是直接使用从用户提供的密码推导的密钥,这样可以快速更改解密密码,因为只需要使用从新密码推导的密钥对主密钥(16 字节)进行重新加密。然而,按照如今的标准,PBKDF2 使用的 2000 次迭代次数并不足够多。而且,PBKDF2 是一种迭代算法,基于标准且相对容易实现的哈希函数,这使得 PBKDF2 密钥推导可以并行化,充分利用多核设备(如 GPU)的处理能力,即使是相当复杂的字母数字密码短语,也可能在几天甚至几小时内被暴力破解。
- scrypt 算法(Android 4.4 及以后) :为了增加暴力破解磁盘加密密码的难度,Android 4.4 引入了对新的密钥推导函数 scrypt 的支持。scrypt 采用的密钥推导算法专门设计为需要大量内存以及多次迭代(这种算法被称为内存密集型),这使得在专用硬件(如 ASIC 或 GPU)上进行暴力攻击变得更加困难,因为这些硬件通常内存有限。scrypt 可以通过指定可变参数 N
超级会员免费看
订阅专栏 解锁全文
720

被折叠的 条评论
为什么被折叠?



