【问题标题】:How to use Data Protection with Core Data?如何将数据保护与核心数据一起使用?
【发布时间】:2015-06-27 02:57:02
【问题描述】:

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

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

如果使用Data ProtectionCore Data 是可能的,那是否满足加密存储数据的要求?我的意思是,这就够了吗?我还发现有一些第三方处理SQLite 数据加密,例如SQLCipher。我应该集成其中一种第三方吗?

提前致谢

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    如果可以将数据保护与 Core Data 结合使用,是否会满足 对存储数据加密的要求?

    这取决于存储数据的敏感性。 “通常”,Apple 提供的硬件加密对于正常用例来说已经足够了。

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

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

    要保护具有各个属性的数据库文件的内容,您可以使用Transformable AttributesNSValueTransformer (details)。

    【讨论】:

      【解决方案2】:
      NSDictionary *attr = @{ NSFileProtectionKey : NSFileProtectionComplete };
      NSError *error = nil;
      [[NSFileManager defaultManager] setAttributes:attr ofItemAtPath:YOUR_DATABASE_PATH error:&error];
      

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

      【讨论】:

        猜你喜欢
        • 2013-05-28
        • 2019-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-21
        • 2011-01-06
        • 2016-07-30
        相关资源
        最近更新 更多