数据保护、钥匙串和核心数据的 Sqlite 文件

Posted

技术标签:

【中文标题】数据保护、钥匙串和核心数据的 Sqlite 文件【英文标题】:Data Protection, Keychain and Core Data's Sqlite files 【发布时间】:2015-11-25 10:09:18 【问题描述】:

如果有人能澄清我对Data Protection 功能的一些疑问,我将不胜感激:

    是否需要/建议启用Data Protection 来加密和保护由Core Data 管理的SQLite 文件?如果是这样,我应该如何加密和保护这些文件?

    我遵循了使用Keychain 的教程,它说必须为Apple Member Center 中的App ID 启用Data Protection 的完整级别,所以我做到了。但是,它没有提到在Xcode 的项目中也启用Data Protection,所以我没有。似乎我可以在我的 ios 应用程序中毫无问题地访问 Keychain,但这看起来很奇怪......我是否也应该在目标的设置中启用 Data Protection

非常感谢

【问题讨论】:

您在保护谁的数据:设备用户或获得设备访问权限的第 3 方。 【参考方案1】:

    这取决于您在其中存储的内容,因此如果有人访问它会面临什么风险。在大多数情况下,您不需要专门加密数据库中的数据,因为有人会使用设备锁来保护设备,并且您想要确保安全的任何特定数据都应该存储在钥匙串中。这通常是用户识别数据和帐户身份验证令牌。

    如果有人可以访问已解锁的设备(PIN 码/触摸 ID 已被清除或验证),那么他们几乎可以对设备做任何他们想做的事情(钥匙串和自动加密的数据),而且您无法停止它们(充其量可以减慢它们的速度)。

    Apple 确实提到,如果有人试图在事后添加他们的指纹,您可以限制对钥匙串数据的访问。更多信息在https://www.apple.com/business/docs/iOS_Security_Guide.pdf的钥匙串部分

您唯一能做的就是在每次需要加密/解密时使用用户明确输入的密钥显式加密需要它的数据。该密钥可以暂时存储在内存中,但您永远无法将其写入磁盘。这样用户必须输入密钥才能使用数据,并且密钥只能来自用户。

【讨论】:

谢谢。我真的很想保护我Core Data 的一个数据模型中的所有数据,因为它存储了用户的敏感数据。那么,我怎样才能加密相应的SQLite 文件呢?我没有找到任何关于那个的教程...... 即使用谷歌搜索encrypt core data sqlite store ? 很可能不是。正如我在回答中所说,这完全取决于您要实现的目标。 “真正”的安全性仅来自使用用户提供的密钥进行显式加密 那么,Data Protection 有什么用处?您能否提供一些指导以遵循您提到的方法? 这是一种将您的应用绑定到使用设备锁的“简单”方式(如果用户设置了密码)。它告诉操作系统您希望数据加密的内容和方式(何时应该解密)。

以上是关于数据保护、钥匙串和核心数据的 Sqlite 文件的主要内容,如果未能解决你的问题,请参考以下文章

ORA-19809: 超出了恢复文件数的限制

vue 超大数据下载Excel,自定义文件数和请求次数无卡顿

核心数据返回空字符串和内容

Sqlserver filestream 引发文件数剧增

Apache Hudi一种基于增量日志文件数的压缩策略

Apache Hudi一种基于增量日志文件数的压缩策略