Apple的文档说明如下:
受保护,除非打开。文件已加密。设备锁定时无法访问已关闭的文件。设备解锁后, 您的应用可以打开并使用该文件。如果用户打开了文件并且 锁定设备(例如,通过按下睡眠按钮),您的应用程序 可以继续访问该文件。
还有:
完成,除非已经打开。该文件已加密。关闭的文件是 设备锁定时无法访问。用户解锁后 设备,您的应用程序可以打开文件并使用它。如果用户锁定了 但是,当文件打开时,您的应用可以继续访问该设备 它。指定NSDataWritingFileProtectionCompleteUnlessOpen选项 (NSData)或NSFileProtectionCompleteUnlessOpen属性 (的NSFileManager)。
Protecting Data Using On-Disk Encryption
这似乎是一个很好的选择,允许我完成文件上的任何剩余工作,然后自己关闭它。文档没有说明文件关闭时会发生什么。例如,在以下情况下会发生什么:
现在,文件是否受保护,因为它现在已关闭?或者可以重新开放吗?
答案 0 :(得分:3)
它使用公钥来确保在设备解锁之前无法打开文件。
受保护除非打开
(NSFileProtectionCompleteUnlessOpen):有些 设备锁定时可能需要写入文件。一个好的 例如,在后台下载邮件附件。 通过使用非对称椭圆曲线实现此行为 密码学(ECDH over Curve25519)。与通常的每个文件一起 密钥,Data Protection生成文件公钥/私钥对。一个 共享密钥是使用文件的私钥和 受保护除非Open类公钥,其对应私有 密钥由用户的密码和设备UID保护。该 每个文件密钥包含此共享密钥的哈希值 存储在文件的元数据中以及文件的公钥;该 然后从内存中擦除相应的私钥。一旦到了 文件已关闭,每个文件密钥也会从内存中擦除。打开 再次使用受保护的文件重新创建共享密钥 除非Open class的私钥和文件的短暂公钥; 它的哈希用于解包每个文件密钥,然后用于 解密文件。
来自http://images.apple.com/iphone/business/docs/iOS_Security_Oct12.pdf(第10页)