我已经使用 ECC 密钥对完成了 Android 应用程序。当我去年开发它时,我想在Android Keystore中创建ECC密钥。不幸的是,这个 ECC 密钥用于生成会话密钥,这要归功于ECDH https://en.wikipedia.org/wiki/Elliptic-curve_Diffie%E2%80%93Hellman, and ECDH https://en.wikipedia.org/wiki/Elliptic-curve_Diffie%E2%80%93HellmanAndroid Keystore 不支持(这是我在这里所说的:ECDH 以及 Android 密钥存储中的密钥 https://stackoverflow.com/questions/51950587/ecdh-with-key-in-android-key-store )
我遵循了建议:我在 Android KeyStore 中创建了一个 AES 密钥,并使用它来加密 ECC 密钥,然后将其存储在 SharedPreferences 中。 Android KeyStore 确保 AES 密钥无法被提取,并且只有我的应用程序可以使用它来解密 ECC 密钥。
我现在有一个问题希望得到您的建议:
如果有人在已 root 的手机上安装我的应用程序、获取 APK、反编译并修改它以在读取和解密后打印 ECC 密钥,该怎么办?我没有这个技能,但我猜有些黑客有。
如果可行的话,说明我所使用的保护效果并不理想。
对于我来说,使用 ECDH 是没有商量余地的那么我需要什么解决方案来保护我的 ECC 密钥对呢?
Thanks
除非有安全硬件支持,否则无法确保密钥不可提取。
对于 root 后的手机壳,攻击者无需修改并重新安装您的 APK 即可使用您的密钥。该设备上具有 root 权限的任何应用程序都可以连接到您的应用程序并表现得像它。即使在受信任的环境中,他们也可以使用您的硬件支持的密钥。他们唯一不能做的就是从设备中提取密钥。
您可能想阅读有关 TEE 和 AndroidKeyStore 的相对较旧的论文:http://www.cs.ru.nl/~joeri/papers/spsm14.pdf http://www.cs.ru.nl/~joeri/papers/spsm14.pdf。特别是“设备绑定结果概述”
为了减少攻击面,您可以:
- 使用用户提供的密码以及 AndroidKeyStore AES 密钥保护您的密钥
- 使用 SafetyNet API 检查设备完整性:https://developer.android.com/training/safetynet/attestation https://developer.android.com/training/safetynet/attestation
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)