繁体   English   中英

在Android应用程序中隐藏加密密钥

[英]Hiding encryption key in Android Application

我想隐藏用户在加密的用户手机中输入的一些数据。 据我所知,我可以使用键/种子值加密/解密数据,但如果我在代码中隐藏键值,我知道它可以以某种方式找到(例如反编译Java代码)。

您有什么建议让这个过程更难吗?

在应用程序中隐藏密钥是不可能的,因此资源丰富的黑客无法将其拉出来。 您可以尝试对密钥进行模糊处理并使其难以查找,但它始终可以执行。

请参阅: https//www.excelsior-usa.com/articles/java-obfuscators.html#examples

最好的选择是要求您的用户指定PIN或密码并将其用作加密密钥。 这样,如果设备丢失或被盗,密钥仍然是安全的,它还可以防止有人反编译您的应用程序并获取应用程序的所有实例的加密密钥。

冰淇淋三明治(Android 4.0)的一个新功能是钥匙串API 平台亮点页面 (强调我的):

Android 4.0使应用程序更容易管理身份验证和安全会话。 新的钥匙串API和底层加密存储允许应用程序存储和检索私钥及其相应的证书链。 任何应用程序都可以使用钥匙串API安全地安装和存储用户证书和CA.

如果您正在为用户名/密码数据执行此操作,则应该签出实施身份验证器

由于android上没有任何安全存储(至少从2.2开始),你必须自己编写。

真正安全地执行此操作的唯一方法是使用从用户提供的密码派生的密钥进行加密(PBKDF2 / RFc2898就是这样)。 加密只能像你的密钥一样安全,如果你把它存储在手机上,那么有人可以找到并使用它。 这允许您让用户存储密钥而无需实际记住大型AES密钥。

有些库可以为android做这个。 如果你想要一些如何做的基础,我写了一个可以在这里找到的Windows手机。

如果加密/解密都发生在手机上,那么坚定的黑客就能破解它。 您可以通过使用obfustication或(如果适合您的应用程序)将用户输入添加到加密/解密代码中来使生活更加艰难。

如果您的应用程序需要网络连接,则可能需要将某些代码卸载到其他地方运行的服务器,以便加密数据存在于设备上,但是密钥会在运行时下载。 仍然没有防黑客,但它降低了被盗设备上机密数据的风险。

暂无
暂无

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

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