【问题标题】:Can a "secret" string in a compiled Obj-C app be discovered?可以发现已编译的 Obj-C 应用程序中的“秘密”字符串吗?
【发布时间】:2011-03-27 11:56:37
【问题描述】:

我需要将数据从我的 iPhone 应用程序发送到我的网络服务器,然后再返回。为了安全地做到这一点,我使用了一种加密算法。它需要一个服务器和用户都必须知道的密钥,这样才能进行解密。我本来想在我的应用程序和服务器上只使用一个简单的静态字符串作为键,但后来我想起编译后的代码仍然可以反汇编和查看,但只能在一定程度上。

那么,将加密方法和“秘密”字符串放在我的应用程序的源代码中,我的安全性如何?还有其他方法可以安全地完成应用程序和服务器之间的通信吗?

谢谢。

【问题讨论】:

    标签: objective-c cocoa-touch encryption disassembly


    【解决方案1】:

    是的,很容易找到。在您的可执行文件上运行strings 程序,您可能会找到它。此外,您的程序中的任何内容都可以“找到”,因为它必须是开放阅读的。

    使用 SSL 进行安全连接。它使用非对称加密,这意味着加密数据的密钥与解密数据所需的密钥不同。这样,即使攻击者找到了您的加密密钥,他们仍然无法使用它进行解码。所有主要的 HTTP 服务器和客户端库都支持 HTTPS,这就是它的作用。

    【讨论】:

    • 谢谢,在了解了非对称算法的工作原理之后,SSL 似乎是最简单但最安全的实现方式......
    • 当应用程序运行时,黑客是否有可能转储实习字符串?如果是这样,有没有办法防止这样做?
    • @vinnybad,通常可以转储程序的所有内存并对其进行扫描,但没有特定的方法可以防止它。
    • @zneak 我以前在 Java 中使用字节数组来隐藏字符串的内容。有没有办法从 iOS 的文本字段中提取值并完全绕过 NSString 来创建一个 C 字符串?虽然这不能抵御所有攻击,但它肯定会使内容更难理解。你知道怎么做吗?
    • @vinnybad,那个does not do much even in Java。如果您不希望字符串可转储,则它只需要在内存中停留最短的时间。
    【解决方案2】:

    您认为这究竟是什么“一定程度”?您的应用程序包含的每条指令和每条数据都可以查看。此外,为每台设备使用相同的密钥是密码疯狂的终极目标。

    只需使用 HTTPS。 SSL/TLS 是一种安全且经过验证的技术,内置于每个主要的 HTTP 服务器和每个主要的 HTTP 客户端库中。

    【讨论】:

      【解决方案3】:

      您使用对称算法。如果您需要高安全性,也许您应该考虑采用非对称方法。这样,您甚至可以在每次会话时重新创建密钥,并且只需要交换公钥。

      这里有一些例子:

      • RSA
      • 迪菲-赫尔曼
      • ElGamal
      • ECDSA
      • XTR

      【讨论】:

        【解决方案4】:

        iOS 具有钥匙串服务,用于安全且(相对)轻松地存储加密密钥等内容。查看Keychain Services Programming

        您可能需要的所有加密 API 也可以在 libSystem 中包含的 CommonCrypto 库中找到。简而言之,在保护您的 iOS 应用程序方面无需走捷径。

        【讨论】:

          【解决方案5】:

          正如其他人所说,您的提议完全不安全。如果有人关心您的应用,他们会在发布后 10 分钟内将密钥发布到互联网上。

          你需要研究的是:

          1. 非对称加密算法
          2. Diffie-Hellman 密钥交换

          (注意 - 我并不是说这些是您的问题的解决方案,但了解它们将教育您了解所涉及的问题并更好地为您选择解决方案做好准备)

          另外说明一下,为什么不能只使用 HTTPS 连接?

          最后,如果这种加密方案可以保护关键数据,您最好聘请顾问来帮助您,因为作为该主题的新手,您肯定会犯一些基本错误。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-11-19
            • 2023-03-13
            • 2018-08-17
            • 2015-10-03
            • 2012-01-19
            • 2014-04-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多