【发布时间】:2019-08-10 23:49:12
【问题描述】:
我想使用硬件 Android 密钥库来安全地加密敏感数据并将其本地存储在设备上。标准实现看起来很简单,并且有足够多的教程来说明如何实现它。
但我得到的要求要求用户提供的机密(用户必须输入的用户密码或密码)包含在敏感数据的加密中。因此,数据的加密/解密仅适用于已知的用户秘密,而不是没有它。
我还没有找到向 Android Keystore 进程提供用户密码的方法。
如何使用 Android Keystore 加密/解密需要用户秘密输入才能实际工作的数据?
【问题讨论】:
-
您可以使用密钥库对密码的一部分进行加密以进行另一轮加密,其中用户提供的秘密构成密码的另一部分。组合密码可用于 SQLCipher for Android。
-
您的意思是在设备上创建一个随机密码短语,您将使用密钥库的力量来保护它(通过使用密钥库密钥对其进行加密来保持它)并将其与由提供的用户结合类似于 SecretKeyFactory 的 PBKDF2?然后使用我们使用 PBKDF2 生成的密钥来实际加密/解密我们的敏感数据?
-
“你的意思是在设备上创建一个随机密码短语,你会用密钥库的力量来保护它(通过使用密钥库密钥对其进行加密来保持它)”——是的。 “他们将其与由 PBKDF2 之类的东西提供的用户结合起来”——您是否需要像 PBKDF2 轮次那样的密钥拉伸取决于将使用组合密钥的内容。例如,适用于 Android 的 SQLCipher 已经进行了自己的 PBKDF2 轮次,因此您不需要自己添加更多轮次。 “然后用那个密钥……真正加密/解密我们的敏感数据?” -- 是的。
-
非常感谢您的帮助
标签: android security android-keystore