如何将数据保护与核心数据一起使用?

我正在开发一个使用Core Data的iOS 7及更高版本的应用程序,我被要求加密持久化数据。 我在后台使用SQLite数据库。

我一直在阅读iOS技术概述和iOS 应用程序编程指南中的 Data Protectionfunction,但我不确定它是否可以与Core Data一起使用来加密SQLite文件……可以吗? 怎么样?

如果可以使用带有Core Data Data Protection ,那是否符合加密存储数据的要求? 我的意思是,这还够吗? 我还发现有一些第三方处理SQLite数据加密,如SQLCipher 。 我应该整合这种第三方之一吗?

提前致谢

[…]但我不确定它是否可以与Core Data一起使用来加密SQLite文件……可以吗?

就像在这个答案中提到的那样,你应该确保SQLite文件本身在创建时被加密。

NSPersistentStoreFileProtectionKeyNSFileProtectionComplete选项一起使用意味着“[…]文件以加密格式存储在磁盘上,并且在设备被锁定或启动时无法读取或写入”。 查看所有可用选项的文档 。

与上面提到的DV_一样,这仅在设备获得密码时有效。

如果可以使用带有核心数据的数据保护,那是否符合加密存储数据的要求?

这取决于存储数据的灵敏度。 “通常”Apple提供的硬件加密足以满足正常使用情况。

如果未设置密码或攻击者可以通过获取物理访问权来解锁设备,则可以在设备越狱时访问数据库文件及其内容。

像SQLCipher这样的工具有助于防止这种情况,因为您不依赖于系统提供的安全框架。 即使设备受到危害,数据库文件也会被加密,因为en / / decryption将从应用程序本身处理。

要使用各自的属性保护数据库文件的内容,可以将Transformable AttributesNSValueTransformer一起使用( 详细信息 )。

 NSDictionary *attr = @{ NSFileProtectionKey : NSFileProtectionComplete }; NSError *error = nil; [[NSFileManager defaultManager] setAttributes:attr ofItemAtPath:YOUR_DATABASE_PATH error:&error]; 

但这将使用基于iPhone 4位密码和设备uid的密钥加密数据库。 它不适用于没有密码的手机。