可以在已编译的Obj-C应用程序中发现“秘密”字符串吗?

时间:2010-08-09 19:52:46

标签: objective-c cocoa-touch encryption disassembly

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

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

感谢。

5 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:4)

您认为这究竟是什么“某种程度”?您的应用程序包含的每条指令和每条数据都可以查看。此外,对每个设备使用相同的密钥是最终的加密疯狂。

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

答案 2 :(得分:2)

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

这里有一些例子:

  • RSA
  • 的Diffie-Hellman
  • ElGamal
  • ECDSA
  • XTR

答案 3 :(得分:1)

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

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

答案 4 :(得分:0)

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

您需要研究的事项是:

  1. 不对称加密算法
  2. Diffie-Hellman密钥交换
  3. (注意 - 我不是说这些是你问题的解决方案,但了解它们会教会你所涉及的问题并更好地为你准备解决方案)

    另外请注意,为什么不能只使用HTTPS连接?

    最后,如果这种加密方案正在保护关键数据,那么聘请顾问可能会很好地帮助您,因为作为该主题的新手,您肯定会犯下基本错误。