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

时间:2015-04-20 11:43:47

标签: ios sqlite core-data encryption data-protection

我正在开发使用Core Data的iOS 7及更高版本的应用,并且我被要求加密持久数据。我在幕后使用SQLite数据库。

我一直在阅读iOS Technology OverviewApp Programming Guide for iOS中的Data Protection功能,但我不确定它是否可以与Core Data一起使用加密SQLite文件......可以吗?怎么样?

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

提前致谢

2 个答案:

答案 0 :(得分:4)

  

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

this answer中提到的那样,您应该确保SQLite文件本身在创建时加密。

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

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

  

如果可以使用带有核心数据的数据保护,那么会满足   加密存储数据的要求?

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

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

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

要保护数据库文件的内容及其各自的属性,您可以将Transformable AttributesNSValueTransformerdetails)一起使用。

答案 1 :(得分:0)

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

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