从Watch应用程序调用父应用程序时如何使用文件加密?

时间:2015-05-02 10:20:36

标签: ios core-data watchkit

我使用openParentApplicationhandleWatchKitExtensionRequest从Apple Watch应用程序调用iPhone上的父应用程序。在主应用程序中,我使用CoreData以及addPersistentStoreWithType:

的以下选项
NSDictionary *options = @{
        NSMigratePersistentStoresAutomaticallyOption : @YES,    //
        NSInferMappingModelAutomaticallyOption : @YES,          //
        NSSQLitePragmasOption : @{@"journal_mode" : @"DELETE"}, //
        NSPersistentStoreFileProtectionKey : NSFileProtectionCompleteUnlessOpen
    };

这引起了异常:

  

此NSPersistentStoreCoordinator没有持久存储(设备   锁定)。它无法执行保存操作。

这是否意味着我既不能使用NSFileProtectionCompleteUnlessOpen也不能使用NSFileProtectionComplete

我必须使用NSFileProtectionNoneNSFileProtectionCompleteUntilFirstUserAuthentication吗?

我想知道一种使用NSFileProtectionCompleteUnlessOpen保护我的数据的方法,并且当我的Watch应用程序使用openParentApplication时仍能访问数据。

解决问题的可能方法(但不是真正的解决方案)

  • 有两个文件(例如,SQL数据库),其中一个是加密的,另一个不是。后者仅存储Watch应用程序所需的数据。

1 个答案:

答案 0 :(得分:0)

NSFileProtectionCompleteUntilFirstUserAuthentication似乎是我的推荐方式。它确保用户必须至少自上次启动后解锁设备一次。

iOS 7和后台刷新引入了此问题。要防止物理取证分析读取未加密的数据。

来自https://security.stackexchange.com/questions/57588/iphone-ios-7-encryption-at-lock-screen的补充信息:

  • NSFileProtectionNone:即使设备已锁定,也可以随时访问该文件;
  • NSFileProtectionComplete:只有在设备解锁时才能访问文件(请注意,在设备被锁定且设备仍可访问的情况下,有~10秒的宽限期);
  • NSFileProtectionCompleteUnlessOpen:文件可以在设备锁定时创建,但一旦关闭,只能在设备解锁时访问;
  • NSFileProtectionCompleteUntilFirstUserAuthentication:只有在设备自启动后至少解锁一次后才能访问该文件。

来自Gilt的人们也在这里解释了很多关于这种行为:http://tech.gilt.com/post/67708037571/sleuthing-and-solving-the-user-logout-bug-on-ios

我想到的另一个想法是使用app group容器。请在此处查看问题:WatchKit SDK not retrieving data from NSUserDefaults这样,它不仅应该共享NSUserDefaults,还应该共享相同的钥匙串。这应该与iOS应用程序共享相同的钥匙串的方式相同。