fer*_*hur 5 android keystore android-keystore
鉴于无法使用Android KeyChain
API 存储对称密钥,以下是存储对称密钥的安全方法:
第一部分:密钥生成和存储
symmetric_key
(private_key, public_key)
,存储它们KeyChain
symmetric_key
使用public_key
如下:encrypted_symmetric_key = public_encrypt(symmetric_key)
encrypted_symmetric_key
在本地存储(SharedPreferences
,SQLite
,等)第二部分:使用 symmetric_key
当应用程序想要加密/解密时:
private_key
到内存中KeyChain
encrypted_symmetric_key
从磁盘 加载symmetric_key := private_decrypt(encrypted_symmetric_key)
encrypt(symmetric_key, some_message)
要么 decrypt(symmetric_key, some_ciphertext)
关注:
(private_key, public_key)
对吗?(private_key, public_key)
对的应用程序是唯一可以读取密钥对的用户吗?根据文档(https://developer.android.com/reference/android/security/KeyChain.html):KeyChain类提供对凭证存储中的私钥及其相应证书链的访问。
私钥意味着它是非对称的(私钥和公钥是非对称密钥的两个部分)。
在第 1 部分中,您描述了在 Android 设备上存储对称密钥的首选方式。你的第二部分也是正确的(至少据我所知)。
至于你的担忧——你也是对的。在获得 root 权限的设备上 - 存储在设备上的密钥容易受到攻击,并且可以由有权访问该设备的人获取。在非 root 设备上 - 只有应用程序才能访问它创建的密钥。
关于 root - 您可以使用 RootShell ( https://github.com/Stericson/RootShell ) 等 root 检测库来检测设备是否已 root,然后采取相应措施(在该设备上禁用您的应用程序或类似的东西)并且您还应该查看Google的SafetyNet(https://developer.android.com/training/safetynet/index.html)来检测设备是否被篡改(它也可以检测root)。
归档时间: |
|
查看次数: |
1583 次 |
最近记录: |