2014-05-14 98 views
0

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

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

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

应该有必须的加密方法和解密方法,可提供足够的熵,人们不只是会看我的加密密钥和猜测,我使用Base64或其它已知方法加密它。

洞察赞赏

+0

嗨。我只想指向一个预览与我的答案类似的问题:http://stackoverflow.com/questions/21457794/securely-storing-credentials/21458465#21458465 – Budius

回答

1

我寻找处理这一问题的最佳实践。

如果您尝试使用的API提供瞬态令牌(例如,AWS的令牌自动售卖机),请使用它,这样您就不会首先将长寿的密钥烧入应用程序中。或者,根据六项建议,请为此制作自己的计划,API密钥位于您的服务器上,并且您的应用程序使用您的服务器代表应用程序执行操作。

如果您正在使用的API有一种方法将API的使用与您的应用程序的签名密钥(例如Play Services)绑定,那么您的API密钥不能在没有您的签名密钥的情况下使用,它可以被发现是一个非问题。

欢迎您泉水为DexGuard,将在您的应用程序对数据进行加密。这并不能阻止一个确定的黑客,但它至少会减慢一个。偶尔的黑客可能只是绕过你的应用程序,并与较弱的猎物一起。

如果这些都不是一个选项,不要担心。例如,如果您是独立开发人员,并且被盗的API密钥是您的前100名关注点,那么您担心的太多了。只需定期轮换键(例如,每次应用程序更新),最终在不再使用旧键时退出,以便在某些攻击者获得您的密钥时将受损风险降至最低。你有更大的鱼来炒,就像你要如何推销应用程序一样。

特别是,滚动你自己的加密,而不是只购买DexGuard,是浪费时间。如果您无法承担DexGuard许可证费用,则无法绕过自己的加密技术。而且在保护你的密钥方面,你自己的加密算法值得花时间来写它,这是不大可能的。

+0

谢谢,这是一个风险投资项目和DexGuard长相就像我需要的那样 – CQM

+0

@CQM:哦,绝对。虽然,这可能意味着办公室的Aeron椅子减少了一半...... :-)尽管我非常认真,但我还是专门询问了一位尊重我工作的Android安全研究员的DexGuard。他的回答并不完全适合家庭,但他表示不会阻止他,但现在需要几分钟的时间可能需要一天多的时间。但是,如果Web API允许您有多个可以旋转的键,那么我仍然会考虑旋转键,只是为了减轻损害,以防止有人*花费一天的时间来获取您的密钥。 – CommonsWare

+0

现在成为成本效益分析 – CQM

2

你不会有太大的运气比阻止随意攻击者更多。更别说任何人都可以确定你的代码是做什么的,以及密钥是如何加密的,一个像数据包嗅探器这样的工具很容易使你的密钥无用。

我会建议转移信任,让您不必到Android客户端(超越,也许,用户名和用户密码所拥有)认证。如果您可以准确地告诉我们您想要保护的内容,那么我可以编辑此答案,以提供有关如何安全保护它的更详细的建议。

+0

我使用SSL .....这会使得数据包嗅探器无用,并且这些密钥不会在http请求的url部分中发送。让我们说像我的Twitter Oauth Keys“消费者密钥和消费者密钥”目前在应用程序中硬编码,我不希望它们是,但我仍然需要使用它们 – CQM