【问题标题】:Keeping secret key SECRET - within Android app.. any ideas保留密钥 SECRET - 在 Android 应用程序中.. 任何想法
【发布时间】:2011-10-31 09:40:41
【问题描述】:

我的一个 Android 应用程序中有一个 mcrypt 加密和解密例程。这本质上是解密通过获取的字符串。远程呼叫。当然,“密钥”存储在代码中,但是任何使用 apktool 的人都可以明显地看到代码并看到我的密钥。

有没有办法加密所有的 Java 代码,这样即使反编译它也无法阅读/理解?

我听说过 ProGuard,但通过阅读它,似乎不足以达到此目的。

【问题讨论】:

  • 问题是为什么要加密字符串?如果是为了传输和服务器存储安全,则使用公钥加密。如果您想对用户“隐藏”它,那么您就不走运了,因为您的应用程序可以“看到”所有内容,用户也可以。
  • 字符串被加密以隐藏流式传输文件的位置 - 目的是混淆并至少使临时用户/脚本小子更难独立于应用程序下载 mp3。我知道你在说什么,并且完全理解应用程序可以看到的任何东西——任何有足够决心的人都可以调试、解密或反编译——我只是想让它变得更加困难。有决心的人仍然会经历这一切并取得成功。没什么大不了的..基本上把脚本小子挡在外面..
  • 为什么不让客户端生成密钥对并将其公钥与请求一起发送到服务器?
  • @Nathan 好主意,在客户端上创建一个随机密钥。另外:密钥可以存储在 SQLite DB 中或以其他形式存储在应用程序私有存储中。这应该可以防止从您的应用外部访问 - 至少在非 root 设备上。
  • @HannoBinder,是的,或者可以根据所需的复杂性即时生成密钥。

标签: java android encryption mcrypt


【解决方案1】:

您不应该在代码中放置密钥。编译后的代码可以很容易地进行逆向工程,任何拥有调试器的人都可以连接到创建实际密钥的位置。安全性始终依赖于算法,假设客户端代码是公开的并且潜在的攻击者有一个副本。

在代码中隐藏文字只会延迟攻击者获取密钥的过程,但不会以任何方式阻止它。

【讨论】:

  • 那么,您有什么建议?
  • 可能会有一个配置屏幕,以便用户能够定义自己的 psw。然后存储 usr pasw 的哈希值,当应用程序启动时,请求 psw。如果 psw 哈希与存储的哈希匹配,则您授予用户访问权限。您还可以向用户颁发密钥,将哈希值存储在您的数据库中,并让他们在首次在线使用时验证他们的应用程序。
【解决方案2】:

客户端机器上的所有代码都可以读取。你能做的最好的事情就是让找到钥匙变得更加困难。

建议:您的代码中会有一些文本字符串,例如“请稍候,正在处理您的请求...”找到这样的消息,并生成一个字节数组,通过对带有文本字符串的字节数组。

例如“松鼠”异或 [16 1D 10 19 1A 13 0B 18] => “大象”

只有“squirrel”和字节数组实际出现在您的代码中。

【讨论】:

  • 嗨!是的,这与我最初的想法一致。基本上有一些例程(利用算法),它们从 string.xml 中的数据以及其他一些随机嵌入的变量中创建密钥。将所有这些组合成嵌入在单独类中的几个方法。然后最后使用 ProGuard,这将使跟踪哪些特定功能/例程更具挑战性..
  • 我知道即使在这种情况下仍然有人可以解决它,但它会花费更多时间 - 从简单的反编译和阅读到必须跟踪代码几分钟。
【解决方案3】:

我也不是安全专家,但我知道 VM 编译语言可以轻松反编译您可以尝试使用 ProGuard 混淆您的代码但仍然可读,我建议它尝试保存它并加密您的密钥使用Java Crypto,类似Android Crypting DatabaseEncrypt Information in Android 之前有人问过这类问题,我不希望回答你的问题,但给你一个指导方针,从现在开始。

【讨论】:

  • 谢谢 Necronet。我在这里阅读了几篇没有明确解决方案的帖子。我会检查你链接的那些。
【解决方案4】:

您可以在每次需要获取字符串时生成一个新密钥

然后,您需要使用硬编码证书进行密钥交换(如果实施得当,这是安全的)

如果只是为了在传输过程中保护安全,则只使用 SSL

【讨论】:

  • 这种方法听起来很合理。每次生成一个新密钥是可行的,但我不熟悉使用硬编码证书进行密钥交换。您能否进一步详细说明或指出我的方向?我'
猜你喜欢
  • 1970-01-01
  • 2019-07-14
  • 1970-01-01
  • 1970-01-01
  • 2019-11-11
  • 1970-01-01
  • 2013-01-25
  • 2019-09-19
  • 2012-10-07
相关资源
最近更新 更多