iOS 数据保护的工作原理
Posted
技术标签:
【中文标题】iOS 数据保护的工作原理【英文标题】:How does iOS data protection work 【发布时间】:2013-03-06 10:38:04 【问题描述】:我有一个小问题:
我下载了一个 ios 应用程序,它使用 NSFileProtectionComplete 类来保护包含敏感信息的 sqlite 文件。
根据 iOS 安全文档 (http://images.apple.com/ipad/business/docs/iOS_Security_May12.pdf),当设备 (iPhone/iPad) 与笔记本电脑配对时,笔记本电脑会从移动设备获取托管密钥包。密钥包包含解密设备信息所需的所有类密钥。
但是,我注意到当我将设备与笔记本电脑配对并使用 iExplorer 浏览文件系统时,sqlite 文件仅在设备解锁时可用。当手机被锁定(仍然配对)时,文件不可读。未使用 NSFileProtectionComplete 的文件可以在设备锁定时查看。
如果托管密钥包包含解密信息的所有类密钥,为什么我必须解锁设备才能通过 iExplorer 访问它?
我在 iPad3 上使用 iOS 6.0,并使用 ios-dataprotection 工具 (https://github.com/ciso/ios-dataprotection) 来确定文件使用的数据保护等级。
iOS 应用程序:AccountVault 文件:PointMinder.sqlite
任何帮助将不胜感激。
谢谢。
【问题讨论】:
忘了说 iPad 是受密码保护的。 iExplorer 是否知道在哪里可以找到托管密钥包和备份密码? 如果设备未配对,iExplorer 将无法访问文件系统。配对设备后唯一改变的是钥匙包被转移了。所以我猜它使用托管密钥包很像 iTunes 来解密和读取信息。 你有没有找到任何关于这方面的额外信息? 【参考方案1】:来自您链接的文档文件:
完全保护(NSFileProtectionComplete):类键是 使用从用户密码和设备派生的密钥进行保护 用户标识符。用户锁定设备后不久(10 秒,如果需要 密码设置为立即),解密的类密钥为 丢弃,使此类中的所有数据都无法访问,直到 用户再次输入密码。
因此,如果您想访问该文件,则应解锁设备。苹果就是这样做到的。
编辑:在“黑客和保护 iOS 应用程序”中找到:
保护类密钥是用于根据访问策略解锁文件的主加密密钥。 保护类是用于强制执行文件访问策略的加密机制。 有些文件非常重要,以至于操作系统应该只有在设备的用户界面解锁时才能解密它们。这些文件的加密密钥用一个类密钥包装,只有在用户输入他的密码后才可用。当设备再次锁定时,密钥会从内存中擦除,从而使文件再次不可用。 保护类主密钥存储在称为密钥包的托管中。密钥包包含加密 保护类主密钥,以及设备上系统文件的其他密钥。系统密钥包使用另一个名为 BAGI 的加密密钥进行加密,该密钥也存储在 NAND 的可擦除存储器中。每当用户进行身份验证以满足特定的安全保护策略时,密钥包中的加密密钥就可以被解密。
因此,该文件的密钥已传输,但已加密。当您输入密码时,操作系统会解密该密钥,然后可以使用它来解密受它保护的文件。
【讨论】:
感谢您的回复。在您发表评论后,我尝试了另一项测试:将设备与 iTunes 配对并解锁设备后,我打开了 iExplorer。在这个阶段,可以访问 sqlite 文件 - 就像它最初一样。执行此操作后,我锁定了设备并等待了 5 分钟以上,并注意到 sqlite 文件仍然可以访问。这个实验也没有按预期进行。我应该在这里指出,设备设置为立即解锁,并且 sqlite 文件正在使用 NSFileProtectionComplete - 我仔细检查了它。 根据我提到的文件:“当密码锁定的设备首次连接到iTunes时,会提示用户输入密码。然后设备会创建一个托管密钥包并将其传递给主机. Escrow keybag 包含与设备上使用的完全相同的类密钥。” 它指出所有类密钥都存在于 escrow keybag 中。如果我已经拥有所有班级密钥,为什么还需要密码才能解锁班级密钥?也就是说,需要UID和passcode的组合来获取class key,但是escrow keybag中已经存在所有class key了。 奇怪的是,5 分钟后文件仍然可以访问。也许它类似于 iExplorer 中的缓存版本(我自己从未使用过它)?另外:每个文件的密钥由几个类密钥之一包装,具体取决于文件应可访问的情况。这可能意味着并非所有类密钥都在配对时被解密。 @John Topley,感谢您的编辑。现在我知道更多格式。 :) 可能是的。我会继续研究。【参考方案2】:这仅适用于我的应用程序中的 SQLite 数据库,不适用于我希望的其他资源。但是,在锁定设备并等待几分钟 iExplore 仍然打开并且设备仍然连接后,我仍然能够访问数据库。如果我断开 iPad 并重新连接,我猜 iExplore 会强制刷新,然后我就无法访问数据库。所以不确定它是否只是在内存中有旧的“未加密”数据库信息或什么。
【讨论】:
以上是关于iOS 数据保护的工作原理的主要内容,如果未能解决你的问题,请参考以下文章