【问题标题】:encrypt and decrypt application keys加密和解密应用程序密钥
【发布时间】:2014-05-14 20:36:26
【问题描述】:

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

我想将它们加密存储,并在必要时解密它们。理想情况下,当有人反编译我的应用程序时,他们看不到我的密钥是什么,或者如果他们能看到一些字符串,那么它只是一个没有经过我的解密函数的加密密钥。

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

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

见识见识

【问题讨论】:

标签: java android encryption oauth proguard


【解决方案1】:

你不会比一个偶然的攻击者更有威慑力。更不用说任何人都可以确定您的代码的作用以及密钥的加密方式,数据包嗅探器等工具可以轻松地使您的密钥失效。

我建议您转移信任,这样您就不需要验证 android 客户端(可能除了用户拥有的用户名和密码之外)。如果您可以确切地告诉我们您要保护什么,那么我可以编辑此答案以提供有关如何安全保护它的更详细的想法。

【讨论】:

  • 我使用 SSL ..... 这会使数据包嗅探器无用,并且密钥不会在 http 请求的 url 部分发送。假设我的 Twitter Oauth Keys“消费者密钥和消费者秘密”目前在应用程序中被硬编码,我不希望它们如此,但我仍然需要使用它们
【解决方案2】:

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

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

如果您使用的 API 有办法将您对 API 的使用与应用的签名密钥(例如 Play 服务)联系起来,那么没有您的签名密钥就无法使用您的 API 密钥,因此它可以找到不是问题。

欢迎您使用DexGuard,它会加密您应用中的数据。这并不能阻止一个坚定的黑客,但它至少会减慢一个黑客的速度。随便的黑客很可能会绕过您的应用,然后攻击较弱的猎物。

如果这些都不是一个选项,请不要担心。例如,如果您是独立开发者,并且被盗的 API 密钥是您最关心的 100 个问题,那么您担心的太多了。只需计划定期轮换密钥(例如,每次应用程序更新),最终在不再使用旧密钥时将其淘汰,以最大程度地降低如果某些攻击者确实获得了您的密钥而造成损坏的风险。你有更大的鱼要炒,比如你将如何推销应用程序。

特别是,滚动您自己的加密货币,而不是仅仅购买 DexGuard,是浪费时间。如果你负担不起 DexGuard 许可费,你也不能为推出自己的加密货币而大惊小怪。就保护您的密钥而言,您自己的加密货币值得花时间编写它的可能性很小。

【讨论】:

  • 谢谢,这是一个风险投资支持的项目,DexGuard 看起来正是我所需要的
  • @CQM:哦,当然。不过,这可能意味着办公室少了一把 Aeron 椅子...... :-) 说真的,我特别向一位我尊重他的工作的 Android 安全研究人员询问了 DexGuard。他的回答并不完全适合家庭,但他表示这不会阻止他,但现在可能需要几分钟的时间可能需要一天多的时间。不过,如果 Web API 允许您拥有多个可以以这种方式旋转的密钥,我仍然会考虑轮换密钥,以防万一有人确实花费一天多的时间来获取您的键。
猜你喜欢
  • 2020-04-23
  • 1970-01-01
  • 1970-01-01
  • 2011-05-09
  • 1970-01-01
  • 1970-01-01
  • 2013-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多