iOS 如何通过加密存储持久数据?

Posted

技术标签:

【中文标题】iOS 如何通过加密存储持久数据?【英文标题】:How does iOS store persistent data with encryption? 【发布时间】:2011-09-22 07:51:13 【问题描述】:

iPhone 应用程序可以加密其存储的数据吗?这样即使是拥有越狱 ios 设备的用户也无法访问该文件。例如,游戏中心可能与本地数据同步,您不希望用户操纵分数。您也不希望您的 IAP 被规避。

有没有一种简单的方法可以在写入设备之前加密您的数据?

也许我的问题不是很清楚。他们确实是:

    当我使用类似的东西时:[array writeToFile:path atomically:YES];是否有任何自动加密可确保只有我的应用才能正确访问文件?

    如果没有,最简单的实现方法是什么?

PS:现在我发现 NSData 可以完成这项工作,但是 NSDataWritingFileProtectionComplete 标志需要#if __IPHONE_4_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED。我想知道在不受支持的设备上会发生什么?

【问题讨论】:

请注意,即使在普通的 iOS 设备上,用户也可以访问所有数据(只读)。使用 iPhoneExplorer 之类的应用程序。 【参考方案1】:

在@GrahamLee 对this question 的回答以及security.stackexchange.com 上的其他iOS 标记问题中了解有关iOS 加密的更多信息。

基本总结 - 仅基于 iPhone 控件:

如果有人拥有该设备且该设备未锁定,则他们可以访问所有数据 如果有人拥有设备并且该设备被锁定,他们可以获得大部分数据,甚至可能全部(某些例外情况可能适用)

您可以在存储数据时在您的应用中进行混淆处理并使用加密,但攻击者可以对该加密代码进行逆向工程以进行解密。

您需要弄清楚此类 DRM 技术的价值,并决定它们在这种情况下是否值得。

【讨论】:

+1 如果 Apple 投入巨资解决问题,并且完全控制硬件、固件和操作系统,无法阻止设备越狱,那么您无法创建更高层的东西将更加牢不可破。这并不意味着一点点混淆是不值得的,但不要指望它是灵丹妙药。【参考方案2】:

该文档将帮助您找到更准确的答案:

http://sit.sit.fraunhofer.de/studies/en/sc-iphone-passwords.pdf http://sit.sit.fraunhofer.de/studies/en/sc-iphone-passwords-faq.pdf

【讨论】:

以上是关于iOS 如何通过加密存储持久数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何测试 Core Data SQLite 文件是不是已加密?

在 iphone/ipad 的持久存储上加密数据的最安全方法是啥?

存储在 RabbitMQ 持久存储中时加密消息

核心数据 SQLite 加密?

SwiftUI / iOS / iPhone如何在存储之前加密数据/图像以及在哪里/如何在本地存储,一般最佳实践?

存储的战争第六集——对称加密与非对称加密