我已经使用 ECC key 对完成了 Android 应用程序。当我去年开发它时,我想在Android Keystore中创建ECC key 。不幸的是,这个 ECC key 用于生成 session key ,这要归功于 ECDH ,和 ECDH Android Keystore 不支持(这是我在这里所说的:ECDH with key in Android Key Store)
我遵循了建议:我在 Android KeyStore 中创建了一个 AES key ,并使用它来加密 ECC key ,然后再将其存储在 SharedPreferences 中。 Android KeyStore 确保 AES key 无法被提取,并且只有我的应用程序可以使用它来解密 ECC key 。
我现在有一个问题需要您的建议:
如果有人在已 root 的手机上安装我的应用程序,获取 APK,反编译并修改它以在读取和解密后打印 ECC key ,该怎么办?我没有这个技能,但我猜有些黑客有。 如果可行的话,说明我所使用的防护措施并不有效。
在我的情况下,使用 ECDH 是不可协商的那么我需要什么解决方案来保护我的 ECC key 对?
谢谢
最佳答案
除非有安全硬件支持,否则无法确保 key 不可提取。
对于 root 后的手机壳,攻击者无需修改并重新安装您的 APK 即可使用您的 key 。该设备上具有 root 权限的任何应用程序都可以挂接到您的应用程序并表现得像它一样。即使在受信任的环境中,他们也可以使用您的硬件支持的 key 。他们唯一不能做的就是从设备中提取 key 。
您可能想阅读有关 TEE 和 AndroidKeyStore 的相对较旧的论文:http://www.cs.ru.nl/~joeri/papers/spsm14.pdf 。特别是“设备绑定(bind)结果概述”
为了减少攻击面,您可以:
- 使用用户提供的密码以及 AndroidKeyStore AES key 来保护您的 key
- 使用 SafetyNet API 检查设备完整性:https://developer.android.com/training/safetynet/attestation
关于android - Android 应用程序中 ECC key 的保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54789464/