加密iOS中的数据

时间:2014-10-09 08:00:34

标签: ios security encryption ios6.1

我是iOS开发的新手,并且正在开发一个存储用户敏感信息的小型iOS移动应用。最初我想过使用自定义AES加密来加密/解密所有数据。我还希望加密数据与iCloud同步。阅读更多后,我从iPhone 3GS了解到每台设备都内置了AES-256加密引擎。从XCode中,我发现我可以打开一个名为" Data Protection"用于移动应用程序以保护数据。根据我的分析,我在下面问题:

  1. 要为iPhone 3GS(使用iOS 6.1)使用数据保护,是否需要设置密码?

  2. 如果没有为设备设置密码,我如何使用内置加密引擎加密我的数据?

  3. 这些信息非常敏感,所以在这种情况下我是否需要实施自定义加密?

3 个答案:

答案 0 :(得分:4)

RNCryptor非常有用,但它基本上只是Apple自己的CommonCrypto功能的包装器(这使得实现起来非常简单)。如果你想加密甚至用户无法获得的设备上的数据,它会很有用。

关于您的具体问题:

  1. 数据保护使用Apple的设备级加密来加密您的应用数据(您自己不用密码保护它)。这有其用途 - 如果第三方无法解锁,它将使第三方无法访问设备上的数据 - 但不会阻止(例如)用户访问其未锁定设备上的数据。使用它构建的RNCryptor和CommonCrypto,AES256可以使用您选择的密码加密内容。

  2. Apple详细说明了这一点。基本上,从最终用户的角度来看,他们只是为他们的设备正常设置密码。您不使用自己选择的密码。

    您可以使用以下说明为您的应用设置此功能:

    https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/AddingCapabilities/AddingCapabilities.html#//apple_ref/doc/uid/TP40012582-CH26-SW30

  3. 这取决于数据的敏感程度以及您预见的威胁(您试图将其与谁保持距离?您是否有任何法律/法规要遵守?您想要做多少工作?你自己保护这些数据?)。在某些情况下可以采用许多权衡和警告。

    如果您有少量数据,可以考虑将其存储在iOS钥匙串中。否则,我建议尝试一下RNCryptor。它很容易整合。

  4. 我希望这会有所帮助。

    更新:需要考虑的另一件事......如果您实施自己的加密,即使使用RNCryptor / CommonCrypto,也可能会出现潜在的导出控制分支。根据您愿意处理的文书工作和/或延迟,这可能会影响您的决定。您可以在Apple网站上了解更多相关信息:

    https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/wo/20.0.0.13.7.2.7.9.3.1.2.3.3.1.5.7.1

答案 1 :(得分:2)

这实际上取决于您尝试防范的场景数量。如果给予足够的时间和精力,几乎任何您可能创建的场景都将被打破。但是要解决几点:

1)是的,您需要设置此功能的密码才能激活。

2)您可以使用CommonCrypto库(或者像RNCryptor一样包装它)

3)这是一个坏主意,原因很简单,开发安全算法非常困难。最轻微的漏洞将泄漏所有数据,人们花费了多年的时间来嗅出这些缺陷(尽管我可能误解了“自定义加密”的含义)

如果您希望尽可能安全,则必须执行此操作:将文件发送到服务器进行处理(通过HTTPS)。攻击服务器要难得多,那就是入侵iOS应用程序。如果您只是使用RNCryptor,那么将应用程序查找密码或如何获取密码是非常简单的。基本上,如果应用程序可以做到这一点,那么BlackHat也可以做到。

编辑我忘了一件事!如果你为每个安装生成一个随机密码并将其存储在钥匙串中,那么这将有所帮助,但它并非万无一失(iOS密钥链内容很有可能从越狱设备中检索,特别是如果用户有一个周密码)。但是,如果用户因任何原因擦除操作系统,这将使用户的数据无法恢复。

答案 2 :(得分:1)

非常非常简单:https://github.com/RNCryptor/RNCryptor 我用它来聊天应用程序非常好。