【问题标题】:Securing data using Core Data in iOS在 iOS 中使用 Core Data 保护数据
【发布时间】:2014-11-03 00:49:36
【问题描述】:

我有几个关于保护我的应用的数据的问题:

1) 我需要通过Core Data 加密我存储的所有数据,但我没有找到实现该目标的起点。在Core Data Programming Guide 他们说:

Core Data 不保证来自不受信任来源的持久存储的安全性,并且无法检测文件是否被恶意修改。 SQLite 存储提供比 XML 和二进制存储稍好的安全性,但不应将其视为天生安全。请注意,您还应该考虑存储元数据的安全性,因为元数据中存档的数据可能会被独立于存储数据而被篡改。如果要保证数据安全,应该使用加密磁盘镜像等技术。

这并没有让我清楚我应该做什么......我也看过Security Overview但是这个文件似乎没有处理Core Data。但是,他们提到Data Protection 来保护文件,但我不确定这是否是我真正想要的......我应该将Data Protection 用于SQLiteCore Data 一起使用的文件吗?

我需要一些关于如何加密所有 Core Data 存储数据的指导

2) 将用户密码存储在钥匙串中,而不是使用Core Data 加密和存储它们是否更好?

提前致谢

【问题讨论】:

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


【解决方案1】:

从 iOS 5 开始,Core Data 持久存储默认使用数据保护来加密数据。来自iOS 5 release notes

对于为 iOS 5.0 或更高版本构建的应用程序,持久存储现在默认以加密格式将数据存储在磁盘上。默认保护级别会阻止对数据的访问,直到用户首次解锁设备。在配置持久存储时,您可以通过为 NSPersistentStoreFileProtectionKey 键分配自定义值来更改保护级别。有关 iOS 5.0 中新增的数据保护的更多信息,请参阅“数据保护改进”。

这也包含在 WWDC 2011 会议“Core Data 中的新功能”中。

作为最佳实践,用户名和密码应存储在钥匙串中。如果您要为远程服务(例如 HTTP 服务器、FTP 服务器等)存储用户名和密码,最好通过NSURLCredentialStorage API 使用钥匙串。

【讨论】:

    【解决方案2】:

    encrypted-core-data”项目对平均到复杂的数据模型有限制。在我的 iOS 应用程序中,我们有一些多对多关系,以及某些实体之间的一些一对多关系。

    桥接代码(将核心数据桥接到 SQLCihper 的代码)有一些不足,例如它没有 NSOrderedSet 实现。修改桥接代码对我们来说是一项高成本的工作。

    因此,我们决定改为加密列中的敏感数据。因此,我们使用了transformable attributes 的核心数据原生能力,并使用加密库来加密实体的属性。此功能在数据进入列时对其进行加密,并在读取时对其进行解密。这是自动完成的。

    当我们查询多行数据以显示在列表视图中时,这会导致我们出现性能问题。为了解决这个问题,我们然后将列类型恢复为正常的string 类型,然后在代码中手动进行加密和解密,但仅在需要时进行。我们还在模型中使用瞬态属性来存储解密的形式。这有助于我们将性能恢复到可接受的水平。

    我仍在寻找一种更好的方法来加密整个数据库,同时使用核心数据。

    【讨论】:

      【解决方案3】:

      您可以使用 encrypted-core-data 之类的东西,它是围绕 SQLite Cipher 的核心数据访问器包装器。

      这是NSIncrementalStore 的子类,它与加密数据库交互。

      如果您只是存储密码,那么钥匙串是更好的选择,但如果您想加密 Core Data 存储,那么上面是更好的选择。

      【讨论】:

        【解决方案4】:

        “2. 将用户密码存储在钥匙串中,而不是使用Core Data加密和存储它们更好吗?”

        是的,这就是钥匙串的用途。您可以创建比钥匙串更安全的存储的机会很小。即使在“越狱”iOS 的情况下,仍然存在无法绕过的安全计时,即每次访问尝试的最短时间。

        【讨论】:

          猜你喜欢
          • 2018-05-09
          • 1970-01-01
          • 2019-01-27
          • 1970-01-01
          • 2020-11-20
          • 1970-01-01
          • 1970-01-01
          • 2022-06-29
          • 1970-01-01
          相关资源
          最近更新 更多