繁体   English   中英

Android 应用程序中的安全密钥存储

[英]Secure key storage in Android Application

我知道这不完全是一个编程主题,但也许有人对这个主题有经验。

我需要在我的 Android 应用程序中存储三个 128 位密钥以进行身份验证。 如何以最安全的方式做到这一点,以便应用程序的简单反编译将不允许读取这些代码? 通常,如何使这些密钥安全

我使用 Delphi 11。

您想在可执行文件中分发一些固定密钥。 我的猜测是,您只希望您的应用程序能够连接到 API 或设备。 然后,您使用这些密钥的对称加密。

根据这个官方指南所说的在 Android 中存储机密的内容,最好的方法是在本机代码中混淆密钥。 幸运的是,您的 Delphi 应用程序是本机应用程序,因此比 Android/JVM 应用程序更难反汇编。

所以我只会在源代码中使用来自几个常量(可能是文本和二进制的混合)的 SHA2/SHA3 派生——如果你想保密而不是源代码存储库的一部分,可能来自.inc文件。 你可以 hash 一个小的有界资源的二进制内容,例如一张图片。 这个混淆过程可能是一些纯帕斯卡代码,对于普通黑客来说很难破解。 只是不要将密钥作为普通常量存储在您的代码/可执行文件中的某处:从一些现有材料中派生密钥 - 这是 SHA2/SHA3 可能足够好的地方,例如使用 PBKDF2 算法和大量轮次。

不要把事情弄得太复杂:如果你的攻击者足以反汇编一些帕斯卡编译的 ARM,他/她很可能会击败你可能在内部定义的任何东西。

但我总是会说,这样的固定密钥永远不会安全。 如果可以的话,我会使用非对称密钥,密钥来自两个公钥/私钥对。 我会将私钥放在一个安全的地方(例如通过 API 访问的服务器),然后在用户注册应用程序时调用一次此 API。 例如,它将使用存储在其他服务器 API 或设备中的私钥进行 ECDH 质询。 然后我可能会将这个秘密存储在一个安全的地方, 例如使用 Android KeyStore API

无论如何,我总是会提供一种撤销密钥的方法。 在这种情况下,应用程序更新可能就足够了。

如果可以的话,让某人审计你的代码——甚至不熟悉 Delphi——他们知道安全和密码学。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM