使用iOS中的Core Data保护数据

App*_*Dev 10 sqlite encryption data-protection core-data ios

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

1)我需要加密我存储的所有数据Core Data,但是我没有找到实现它的起点.在核心数据编程指南中,他们说:

Core Data不保证来自不受信任来源的持久存储的安全性,也无法检测文件是否被恶意修改.SQLite存储提供比XML和二进制存储稍微更好的安全性,但它不应被视为本身安全.请注意,您还应该考虑商店元数据的安全性,因为元数据中存档的数据可能会独立于商店数据进行篡改.如果要确保数据安全性,则应使用加密磁盘映像等技术.

这并没有让我明白我应该做什么......我也看了一下安全概述但是这个文件似乎没有涉及Core Data.然而,他们提到Data Protection,以确保文件,但我不知道这是什么,我真的我在寻找......我应该使用Data ProtectionSQLite哪个文件Core Data与工作?

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

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

提前致谢

que*_*ish 9

从iOS 5开始,Core Data持久存储默认使用Data Protection来加密数据.从iOS 5发行说明:

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

WWDC 2011会议"Core Data中的新功能"也对此进行了介绍.

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


小智 5

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

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

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

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

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


Ric*_*ich 2

您可以使用加密核心数据之类的东西,它是 SQLite Cipher 周围的核心数据访问器包装器。

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

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