【问题标题】:Generating a unique encryption key or salt per app installation为每个应用程序安装生成唯一的加密密钥或盐
【发布时间】:2018-11-07 11:27:46
【问题描述】:

我正在研究如何在 Android 设备上安全地存储敏感数据。当然,没有 100% 安全的方法,我希望尽可能安全。

我已经阅读了the official recommendations

举个例子,我有一个存储文本的应用程序(例如私人日记)。文本存储在 xml 文件中,该文件使用密钥加密 (aes256),存储在 Android KeyStore 中。

这应该意味着数据安全地存储在加密的 xml 文件中。 root 用户仍然可以从 KeyStore 访问密钥并对其进行解密,或者在应用程序解密后获取数据。

不过,这也意味着每个应用都使用相同的密钥。所以我可以在我的手机上安装应用程序,并使用我的密钥来解密其他手机的xml日记文件。

问题是,我如何创建一个密钥或至少是盐,这对于每个应用安装都是唯一的?

【问题讨论】:

  • 来自您的链接:“使用现有的加密算法,例如 Cipher 类中提供的 AES 和 RSA 的实现。”。他们将创建唯一的密钥。

标签: android encryption aes keystore key-management


【解决方案1】:

Key Derivation Function KFS 就是为此而生的

来自维基百科;

在密码学中,密钥派生函数 (KDF) 使用伪随机函数从一个秘密值(例如主密钥、密码或密码短语)派生一个或多个秘密密钥。

您可以使用Argon2Password Hashing Competition 的获胜者。

选择IMEI号作为参数之一,用户密码和手机中的随机数。

【讨论】:

  • 要获得 IMEI,您需要一些权利。也许还有一个好的提示是使用:android.os.Build.MODEL;或其他
  • 感谢您的建议。使用完全随机的值(即使用 Android Keystore 生成随机 AES 密钥)不是更合理吗?
  • Android Keystore 使用 AES 和 HMAC-SHA 系列;阅读[这个答案(crypto.stackexchange.com/a/54587/61539),现在由你来决定
猜你喜欢
  • 1970-01-01
  • 2019-04-08
  • 2016-05-20
  • 2011-11-10
  • 1970-01-01
  • 2010-09-08
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多