我有一个简单的问题:
我下载了一个使用NSFileProtectionComplete类的iOS应用程序来保护包含敏感信息的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
任何帮助将不胜感激。
感谢。
答案 0 :(得分:7)
从您链接的文档文件中:
完全保护(NSFileProtectionComplete):类键是 使用从用户密码和设备派生的密钥进行保护 UID。用户锁定设备后不久(10秒,如果要求 密码设置是立即),解密的类密钥是 丢弃,渲染此类中的所有数据都无法访问,直到 用户再次输入密码。
如果要访问该文件,应该解锁设备。这就是苹果公司的成就。
编辑:在“黑客攻击和保护iOS应用程序”中找到:
保护类密钥是主加密密钥,用于根据文件的访问策略解锁文件。 保护类是用于强制执行文件访问策略的加密机制。
某些文件非常重要,只有在设备的用户界面解锁时,操作系统才能解密它们。这些文件的加密密钥包含一个只在用户输入密码后才可用的类密钥。当设备再次锁定时,将从内存中擦除密钥,使文件再次不可用。
保护类主密钥存储在称为密钥包的托管中。密钥包包含加密的保护类主密钥,以及设备上系统文件的其他密钥。系统密钥包使用另一个名为BAGI的加密密钥加密,该密钥也存储在NAND的可擦除存储器中。只要用户进行身份验证以满足特定的安全保护策略,就可以解密密钥包中的加密密钥。
因此传输了该文件的密钥,但是已加密。当您输入密码时,操作系统会解密该密钥,然后可以使用它来解密受其保护的文件。
答案 1 :(得分:0)
这对我来说只适用于我的应用程序中的SQLite数据库,而不是我希望的其他资源。但是,在锁定设备并等待几分钟后iManager仍处于打开状态并且设备仍然连接时,我仍然可以访问数据库。如果我断开iPad并重新连接,iExplore强制刷新我想我然后无法访问数据库。所以不确定它是否只在内存中存在旧的“未加密”数据库信息或者是什么。