首页 > 解决方案 > 使用 CloudKit 加密 CoreData

问题描述

在 CoreData 中加密值的最佳方法是什么?

当 Apple 已经在加密 App Container 时,为什么我需要加密数据?我想将数据同步到 iCloud。iCloud 中的数据也是加密的,但不是端到端加密的。[iCloud 安全]
Apple 使用自己的密钥加密数据。CoreData 内部使用 SQLite 以明文形式存储数据库。如果此数据与 iCloud 同步,则在被 Apple 自己的密钥加密之前仍然容易受到攻击。有什么方法可以让 iCloud 中的数据也被加密而不用担心 Apple 自己的加密?

我尝试过的一种方法是使用 ValueTransformers:
我尝试过使用 ValueTransformers 来加密 DateOfBirth 和用户密码等字段。现在,由于信息以二进制形式写入 SQLite 数据库,因此它解决了其中一个问题。但是 ValueTransformer 的问题是属性的 dataType 变成了 Transformable ,我无法在该字段上使用 NSPredicate 。例如,我无法搜索某年出生的用户。看起来 NSPredicate 不适用于可转换数据,因为它在 CoreData SQL 中存储为二进制数据。

是否可以在同步到 iCloud 之前加密数据并在从 iCloud 接收回数据时将其解密?今年在 WWDC 2019 上,Apple 宣布通过 CloudKit 支持 iCloud。在与 CloudKit 同步数据之前,有什么方法可以进行加密吗?任何其他资源都会有所帮助。

标签: iosencryptioncore-datacloudkit

解决方案


我相信您需要在将数据写入 CoreData之前对其进行加密。

在 iOS 13 中,Apple 引入了CryptoKit,它可以真正帮助解决这个问题。还有一个示例项目。它非常快,除非您拥有非常重要的数据,否则根据我的经验,它不会影响性能。

高级方法是生成一个密钥并将其存储在钥匙串中,然后使用该密钥对数据进行加密和解密。


推荐阅读