Abr*_*raj 5 security iphone encryption cryptography
我正在开发一个有一些敏感信息的应用程序.我知道外行人很难入侵iPhone获取信息.如果我直接使用SQLite,我会使用SQLite Cipher来加密/编码数据库.
无论如何,我可以采用相同的方式加密coredata,这样黑客就很难进入数据.
有人可以对此有所了解吗?
提前致谢
Vic*_*Hee 18
核心数据现在默认加密(硬件加密)在iPhone 3GS和后来的设备上,包括iPad.这意味着使用硬件密钥自动加密数据.在iOS 4或更高版本中,按照Nick Harris更详细的博客条目中的步骤,可以启用第二层加密(称为"数据保护"),该加密也使用用户的密码来加密硬件密钥.
所有这一切都取决于用户在iOS 4中设置安全密码和启用数据保护.如果您是注册苹果开发人员,您还可以通过此链接观看iTunes中的"保护应用程序数据"的WWDC 2010视频,并在输入您的开发者ID和密码后查看幻灯片的PDF,以获取更多详细信息.文件加密.
要启用数据保护,请在- (NSPersistentStoreCoordinator *)persistentStoreCoordinator通话中使用下面的键和值更改.sqlite文件的文件属性.有关更详细的代码,请参阅Nick Harris的博客,包括如何检查iOS 4或更高版本是否处于活动状态.
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"MyAppName.sqlite"];
NSString *storePath = [storeURL path];
NSDictionary *fileAttributes = [NSDictionary dictionaryWithObject:NSFileProtectionComplete forKey:NSFileProtectionKey];
[[NSFileManager defaultManager] setAttributes:fileAttributes ofItemAtPath:storePath error:&error]
Run Code Online (Sandbox Code Playgroud)
《核心数据编程指南》明确指出,SQL 存储类型比 XML 或二进制更安全,但本质上并不安全 - 它建议使用加密的磁盘映像。不幸的是,这在 iPhone 上有点难以管理。
如果这是您真正关心的问题,您可能会考虑构建自己的持久存储类型 - 本指南中有一节介绍了创建您自己的原子存储,并建议您参考原子存储编程主题文档。构建一个存储,在启动时从用户提示中获取一些密钥,然后使用该密钥进行初始化以用于加密和解密目的。(请注意,如果您采用此路线,NSPersistentStore类参考表明 Core Data 中不支持直接子类化 NSPersistentStore - 您应该改为子类化 NSAtomicStore。)