我正在开发使用Core Data
的iOS 7及更高版本的应用,并且我被要求加密持久数据。我在幕后使用SQLite
数据库。
我一直在阅读iOS Technology Overview和App Programming Guide for iOS中的Data Protection
功能,但我不确定它是否可以与Core Data
一起使用加密SQLite
文件......可以吗?怎么样?
如果可以Data Protection
使用Core Data
,是否符合加密存储数据的要求?我的意思是,这还够吗?我还发现有些第三方处理SQLite
数据加密,例如SQLCipher。我应该整合这种第三方之一吗?
提前致谢
答案 0 :(得分:4)
[...]但我不确定它是否可以与Core Data一起使用来加密 SQLite文件......可以吗?
如this answer中提到的那样,您应该确保SQLite文件本身在创建时加密。
将NSPersistentStoreFileProtectionKey
与NSFileProtectionComplete
选项一起使用意味着" [...]文件以加密格式存储在磁盘上,并且在设备上无法读取或写入被锁定或启动"。查看所有可用选项的documentation。
与上面提到的DV_一样,这仅在设备获得密码时有效。
如果可以使用带有核心数据的数据保护,那么会满足 加密存储数据的要求?
这取决于存储数据的灵敏度。 "通常" Apple提供的硬件加密足以满足正常使用情况。
如果未设置密码或攻击者可以通过获取物理访问权来解锁设备,则可以在设备越狱时访问数据库文件及其内容。
像SQLCipher这样的工具有助于防止这种情况,因为您不依赖于系统提供的安全框架。即使设备受到危害,数据库文件也会被加密,因为将通过应用程序本身处理加密/解密。
要保护数据库文件的内容及其各自的属性,您可以将Transformable Attributes
与NSValueTransformer
(details)一起使用。
答案 1 :(得分:0)
NSDictionary *attr = @{ NSFileProtectionKey : NSFileProtectionComplete };
NSError *error = nil;
[[NSFileManager defaultManager] setAttributes:attr ofItemAtPath:YOUR_DATABASE_PATH error:&error];
但是这将使用基于iPhone 4位密码和设备uid的密钥加密数据库。它不适用于没有密码的手机。