加密密钥:我可以使用混淆吗?

时间:2015-07-19 12:21:52

标签: ios objective-c security encryption key

我正在为某人制作iOS应用。该应用程序将用于模拟考试的专业许可证。问题数据存储在Core Data中,但问题和答案字符串需要加密,因为客户花了很多时间编写它们,并且不希望其他人窃取他的工作在竞争产品中使用。

所以我想做的是将核心数据中的属性设置为可转换,使用自定义NSValueTransformer将字符串转换为NSData,并在转换它们时使用RNEncrypt进行加密和解密。

到目前为止一切顺利。

这是我的困境:我需要使用密钥来加密和解密数据,但我如何获取/创建它?

我的选择:

  • 硬编码==坏!
  • 生成密钥并存储在钥匙串中==不是正确的安全类型。即..不保护设备的所有者。
  • 从用户密码生成密钥==没有其他原因让用户必须登录。
  • 该应用程序连接到服务器并获取一些带有一些身份验证的密钥(我不知道究竟涉及到什么)==我不想依赖网络连接让应用程序正常工作
  • 混淆,我觉得如果我从其他字符串和方法sigs的位创建一个字符串然后哈希它然后就足够==它可能不会成为。

我的问题是: - 混淆,是否足够,有没有其他人取得成功? - 根据我的研究,我了解到一个拥有ipa的黑客可以看到所有硬编码的字符串,类名和方法sig但是他们无法看到方法中的代码(这是正确的吗?),所以如何如果在方法中构建/生成密钥,有人可以读取密钥吗? - 作为标题,我可以使用混淆吗? - 我有没有错过任何选择?

为了记录,如果必须的话,我会让人们注册并登录。

1 个答案:

答案 0 :(得分:2)

无法在本地安全存储数据。一旦你能够解密它,攻击者也可以。这适用于每种加密技术。无论你尝试什么。

您必须为服务器上的每个数据点存储数据或不同的解密密钥,并且每次都要逐个检索。您还必须确保用户不仅发送100个请求并手动检索所有数据。

请注意,在服务器上只存储一个密钥将导致与在应用程序中编写硬编码完全相同的内容。并且不限制请求只会导致攻击者比仅查看已经解密的本地数据库需要更多的时间。

当然,您可以对其进行模糊处理,使其背后看起来有一些良好的加密效果 - 但如果有人 WANTS 来获取数据,他将能够。

关于ipa中的代码:您将无法看到原始代码,但您将能够看到某些代码,它们生成与原始代码相同的输出。只要设备可以生成有效密钥,攻击者也可以。

我不知道是否有一个庞大的社区正在通过随机应用来窃取其内部问题/答案/数据,我对此表示怀疑。

您必须使产品太好,以至于没有相同数据的竞争产品有任何机会反对它。数据本身总是“被盗”。