加密和解密应用程序密钥

时间:2014-05-14 20:36:26

标签: java android encryption oauth proguard

我有很多用于我的Android应用程序使用的各种身份验证方法的密钥。它们目前是硬编码的,我只需在必要时将密钥传递给服务器。

我想将它们存储为加密,并在必要时解密它们。理想情况下,当有人反编译我的应用程序时,他们无法看到我的密钥是什么,或者他们是否可以看到一些字符串,那么它只是一个没有通过我的解密功能的加密密钥。

我正在寻找处理这个问题的最佳做法。

应该有一种加密方法和解密方法,它提供足够的熵,人们不会只看我的加密密钥,并猜测我是用base64或其他已知方法加密的。

洞察力

2 个答案:

答案 0 :(得分:2)

除了偶然的攻击者之外,你不会有太多的运气威慑力。更不用说任何人都可以确定你的代码做了什么以及如何加密密钥,像数据包嗅探器这样的工具可以轻松地使你的密钥无用。

我建议转移信任,这样您就不需要对Android客户端进行身份验证(可能还有用户拥有的用户名和密码)。如果您可以准确地告诉我们您要保护的内容,那么我可以编辑此答案,以提供有关如何安全保护它的更详细的想法。

答案 1 :(得分:1)

  

我正在寻找处理这个问题的最佳做法。

如果您尝试使用的API提供瞬态令牌(例如,AWS的令牌自动售货机),请使用它,这样您就不会首先将长期密钥烘焙到应用程序中。或者,正如hexafraction建议的那样,为此制定自己的方案,其中API密钥在您的服务器上,并且您的应用程序使用您的服务器代表应用程序执行操作。

如果您使用的API有办法将API的使用与您应用的签名密钥(例如,Play服务)联系起来,那么没有您的签名密钥就无法使用您的API密钥,因此它就是这样的事实可以发现是一个非问题。

欢迎您加入DexGuard,它会加密您应用中的数据。这并没有阻止一个坚定的黑客,但它确实至少减慢了一个。休闲黑客可能会绕过你的应用程序并使用较弱的猎物。

如果这些都不是一个选项,请不要担心。例如,如果您是独立开发人员,并且被盗的API密钥位于您的前100个问题中,那么您会非常担心。只是计划定期轮换密钥(例如,每次更新应用程序),最终在不再使用时退出旧密钥,以便在某些攻击者获得密钥时将损坏的风险降至最低。你有更大的鱼来炒,就像你推销应用程序一样。

特别是,滚动自己的加密,而不是仅仅购买DexGuard,是浪费时间。如果您负担不起DexGuard许可证费用,那么您也无法为自己的加密付费而烦恼。而且,在保护你的密钥方面,你自己的加密值得花时间来编写它的可能性很小。