背景
根据一篇新的Android开发人员博客文章(可用的here),您应该使用一种新的技术来加密和解密存储在数据库或sharedPreferences中的敏感数据(例如密码),以便即使具有根权限的人也很难读取它。
新的方法是:
public static SecretKey generateKey() throws NoSuchAlgorithmException {
// Generate a 256-bit key
final int outputKeyLength = 256;
SecureRandom secureRandom = new SecureRandom();
// Do *not* seed secureRandom! Automatically seeded from system entropy.
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(outputKeyLength, secureRandom);
SecretKey key = keyGenerator.generateKey();
return key;
}问题
根据这篇文章(以及我尝试过的内容),这段代码每次调用它时都会创建一个新的不同的键,因此我有一些关于这个问题的问题:
事实上,Android现有的安全模型已经为这类数据提供了大量的保护。用户凭据应使用设置的MODE_PRIVATE标志存储,并存储在内部存储中。
什么意思?并不需要整个密钥生成,因为Android已经加密了一切?我的设备是有根根的,我可以很容易地说,数据从来没有加密过,而且易于读取(特别是sharedPreferences,它仅仅是xml)。
发布于 2013-02-24 01:55:07
对于旧版本的android,应用程序会做些什么?
不是这样的,因为它在所有版本的Android上都是无用的,正如博客文章所指出的。
因为它不是确定性的,它意味着解密不能重新创建相同的密钥,那么它是否意味着密钥也被存储以便用于解密(以及以后的加密)?难道这样的事不就错过了整个重点吗?
确切地说。引用博客文章的话说:“请注意,这种方法的安全性依赖于保护生成的密钥,这是基于内部存储的安全性的。将目标文件保持未加密(但设置为MODE_PRIVATE)将提供类似的安全性。”
老实说,我不知道为什么这篇博文是这样写的。唯一具有重要价值的加密形式是用户提供密码(或高级形式的密码,如双因素身份验证)。
什么意思?并不需要整个密钥生成,因为android已经加密了一切?
不,这意味着任何能够访问加密文件的人也可以访问加密密钥,这使得加密基本上没有意义。
请注意,Android将在用户打开全磁盘加密的设备上“对所有内容进行加密”。
https://stackoverflow.com/questions/15046686
复制相似问题