当使用4.0.4 ICS中默认的android设备加密(AES-CBC 128位)时,我试图理解密钥派生函数是如何工作的?也就是说,如何将用户解密密码转换为用于解密的安全密钥?
解密密码是如何在设备上存储和散列的?
我试图演示我们的企业android设备上的潜在漏洞,以及缓解措施。
发布于 2013-01-23 14:10:50
Android加密实现说明非常详细地描述了如何从3.0开始实现磁盘加密。当用户启用加密时,如果他们还没有设置引脚,则需要设置一个。
主键是从/dev/urandom读取时创建的128位数。它使用由SSL库中的PBKDF2函数创建的用户密码的散列进行加密。页脚还包含一个随机盐(也从/dev/urandom读取),用于从PBKDF2向散列添加熵,并防止彩虹表对密码的攻击。
然后,主密钥存储在加密分区的页脚中。用于启动加密过程的大部分代码都在Vold,Android的卷守护进程中。如果您有用于android的完整AOSP源代码,可以查看/system/core/ vold /cryptfs.c,它实现了vold中许多用于加密的命令,以及用于验证和更改密码的命令。
在这篇博文中,Android磁盘加密还对密码植入以及将主密钥的解密与用户输入的密码绑定以解锁设备的含义有了一些很好的见解。
希望这能有所帮助。
https://security.stackexchange.com/questions/28998
复制相似问题