【问题标题】:FMDB and encryptionFMDB 和加密
【发布时间】:2013-08-21 23:35:55
【问题描述】:

我正在使用 FMDB 来处理 sqlite,我希望避免对 SQLCipher 的依赖。我如何才能简单地利用 iOS 中内置的 DataProtection 功能?这可能吗?唯一的要求是在手机被盗时保护数据。

如果手机使用 PIN 码解锁,用户可以访问数据库是正常的 - 这是他们的数据。

【问题讨论】:

    标签: ios objective-c sqlite encryption fmdb


    【解决方案1】:

    寻找你做databaseWithPath:(或initWithPath:)的那一行,然后添加:

    FMDatabase *db = [FMDatabase databaseWithPath:path];
    
    NSDictionary *attributes = @{NSFileProtectionKey: NSFileProtectionCompleteUnlessOpen};
    NSError *error;
    BOOL success = [[NSFileManager defaultManager] setAttributes:attributes
                                                    ofItemAtPath:path
                                                           error:&error];
    if (!success) {
        NSLog(@"File protection failed: %@", error);
    }
    

    NSFileProtectionKey 键的possible Values 是:

    • NSFileProtectionNone: 该文件没有与之相关的特殊保护。可以随时读取或写入。
    • NSFileProtectionComplete: 该文件以加密格式存储在磁盘上,在设备锁定或启动时无法读取或写入。
    • NSFileProtectionCompleteUnlessOpen: 该文件以加密格式存储在磁盘上。文件可以在设备锁定时创建,但一旦关闭,在设备解锁之前无法再次打开。如果文件在解锁时打开,即使用户锁定设备,您也可以继续正常访问该文件。当文件被创建和打开时,会有一个小的性能损失,虽然在被写入或读取时不会。这可以通过在设备解锁时将文件保护更改为 NSFileProtectionComplete 来缓解。
    • NSFileProtectionCompleteUntilFirstUserAuthentication: 该文件以加密格式存储在磁盘上,直到设备启动后才能访问。用户首次解锁设备后,您的应用可以访问该文件并继续访问该文件,即使用户随后锁定了设备。

    正确的保护类型可能取决于 iOS 版本(最后两个在 iOS 4 上不可用)以及您在设备锁定时是否使用数据库。

    【讨论】:

    • 如果用户没有指定设备 PIN,这是否意味着文件未加密?
    【解决方案2】:

    到目前为止,最简单的方法是为整个应用开启数据保护。转到App IDs,点击“编辑”,将“共享和权限”设置为“完全保护”。

    使用您的新应用程序 ID 信息更新 Xcode,然后,系统会自动为您的应用程序处理它。

    【讨论】:

    • 谢谢,是否可以对特定的 sqlite 文件使用数据保护?
    • 是的,使用[NSFileManager setAttibutes:]NSFileProtectionKey : NSFileProtectionComplete。请参阅此 preso 的第 18 页:github.com/rnapier/practical-security/blob/master/….
    • @RobNapier 如果我使用您的方法并为整个应用程序打开数据保护,我是否需要在 sqlite 数据库文件上设置NSFileProtectionKey : NSFileProtectionComplete?在 Core Data 中使用后台上下文进行后台访问是否有效?
    • @mradlmaier 如果您打开应用程序范围的数据保护,那么您不必同时设置保护密钥(除非它已设置为其他内容)。您将能够在后台访问该文件,但不能在设备锁定时访问。如果您需要这样做,则需要对该文件或应用程序范围使用“除非打开保护”。
    • 所以我必须在 App ID 中启用数据保护,并在我的 Core Data 文件上额外使用“除非打开受保护”,并且后台访问将被启用,Core Data 是否加密?如何知道设备是否被锁定?
    猜你喜欢
    • 2013-01-16
    • 2017-01-30
    • 1970-01-01
    • 2015-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    • 2011-12-13
    相关资源
    最近更新 更多