App*_*Dev 10 sqlite encryption data-protection core-data ios
我有几个关于保护我的应用程序数据的问题:
1)我需要加密我存储的所有数据Core Data
,但是我没有找到实现它的起点.在核心数据编程指南中,他们说:
Core Data不保证来自不受信任来源的持久存储的安全性,也无法检测文件是否被恶意修改.SQLite存储提供比XML和二进制存储稍微更好的安全性,但它不应被视为本身安全.请注意,您还应该考虑商店元数据的安全性,因为元数据中存档的数据可能会独立于商店数据进行篡改.如果要确保数据安全性,则应使用加密磁盘映像等技术.
这并没有让我明白我应该做什么......我也看了一下安全概述但是这个文件似乎没有涉及Core Data
.然而,他们提到Data Protection
,以确保文件,但我不知道这是什么,我真的我在寻找......我应该使用Data Protection
的SQLite
哪个文件Core Data
与工作?
我需要一些关于如何加密所有Core Data
存储数据的指导
2)将用户密码存储在钥匙串中是否应该更好,而不是通过使用加密和存储它们Core Data
?
提前致谢
从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
类型,然后在代码中手动进行加密和解密,但仅在需要时进行。我们还在模型中使用了一个瞬态属性来存储解密的表单。这有助于我们将性能恢复到可接受的水平。
我仍在寻找一种在使用核心数据的同时加密整个数据库的更好方法。
归档时间: |
|
查看次数: |
6938 次 |
最近记录: |