Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 保护Coredata对象_Iphone_Security_Encryption_Cryptography - Fatal编程技术网

Iphone 保护Coredata对象

Iphone 保护Coredata对象,iphone,security,encryption,cryptography,Iphone,Security,Encryption,Cryptography,我正在处理一个获得一些敏感信息的应用程序。我知道外行很难侵入iphone获取信息。如果我直接使用SQLite,我有一个叫做SQLite密码的东西来加密/编码数据库 无论如何,我可以用同样的方法加密核心数据,这样黑客就很难进入数据了 有人能解释一下吗 提前感谢核心数据编程指南明确指出,SQL存储类型比XML或二进制略为安全,但并非天生安全—它建议使用加密的磁盘映像。不幸的是,这在iPhone上有点难以管理 你可能会考虑,如果这是你真正关心的,是建立你自己的持久存储类型-指南有一个关于创建你自己的原

我正在处理一个获得一些敏感信息的应用程序。我知道外行很难侵入iphone获取信息。如果我直接使用SQLite,我有一个叫做SQLite密码的东西来加密/编码数据库

无论如何,我可以用同样的方法加密核心数据,这样黑客就很难进入数据了

有人能解释一下吗


提前感谢

核心数据编程指南明确指出,SQL存储类型比XML或二进制略为安全,但并非天生安全—它建议使用加密的磁盘映像。不幸的是,这在iPhone上有点难以管理


你可能会考虑,如果这是你真正关心的,是建立你自己的持久存储类型-指南有一个关于创建你自己的原子存储,并把你指给文档。构建一个存储区,该存储区在启动时从用户提示中获取一些密钥,然后使用该密钥进行初始化以进行加密和解密。(请注意,如果您采用这种方法,类引用指出,核心数据中不支持直接将NSPersistentStore子类化-您应该将NSAtomicStore子类化。)

如果有人使用的是一部破烂不堪的iphone,您绝对无能为力。您用于加密和解密的函数可以挂接以获取所使用的密钥/iv。你们也可以做一些讨厌的事情,比如完全转储闪存、键盘缓冲区和其他“调试”信息

为了使事情变得更加困难,您可以限制设备上存储秘密的时间。在远程系统上存储机密并通过ssl传输,在不需要时删除它们。这可以防止有人窃取iphone,越狱,然后转储数据库。我不确定这是否是威胁您的特定应用程序的攻击


对于一个“外行”(不识字的人?:)来说,那么你就没有什么可担心的了。苹果有保护措施,防止已安装的应用程序相互读取/写入资源

您可以为实体添加一个类别,该类别覆盖对持久存储的读写值。然后,您可以连接到
CommonCrypto
例程,以便在应用程序存储和检索这些值时对其进行私钥和公钥加密和解密

核心数据现在在iPhone3GS和包括iPad在内的更高版本设备上默认加密(硬件加密)。这意味着数据将使用硬件密钥自动加密。在iOS 4或更高版本中,可以启用第二层加密(称为“数据保护”),该层还使用用户密码加密硬件密钥

所有这一切都取决于你。如果您是注册的apple开发者,您还可以在输入开发者id和密码后,获取有关文件加密的更多详细信息

要启用数据保护,在您的
-(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]