我需要加密 iOS 核心数据吗?

Do I need to encrypt iOS Core Data?

我想将敏感数据存储在 iPhone 应用程序中,但也可以通过触摸 ID 解锁。我想到了一些选项,none 其中完全实现了我的目标,并希望得到一些关于实施的建议。

  1. 密码保护应用程序并加密数据 - 仅存储使用用户密码加密的数据。每次解密查看数据时都要求输入密码。我看不出 Touch ID 在这种情况下如何工作。安全但每次都输入密码很痛苦

  2. 仅密码保护应用程序 - 存储原始数据,仅当用户提供正确的密码/触摸 ID 时才允许访问。这实现了我想要的用户体验,但这是不好的做法吗?苹果最终会不会因为敏感数据没有加密而拒绝这种方式?请记住,我只在本地存储数据,没有 cloud/web 服务器。

  3. 带缓存的场景 1 - 用户每天输入一次密码,数据被提取、解密然后缓存。用户只需要在解密数据保留在缓存中时对应用程序进行身份验证。如果应用程序关闭或达到时间限制,请清除缓存。

大家怎么看?

你有几个选择。

  1. 假设用户启用了密码,并且知道这意味着当设备锁定时数据库已加密。对于某些情况,这就足够了。

  2. 使用 Encrypted Core Data 加密核心数据。仅供参考,这确实有效,但它有很多限制和错误。我们在一个企业应用程序中使用它,我很后悔使用它。

  3. 使用 SQLCipher 从核心数据转移到 SQLite。这是我现在比较喜欢的。

请记住,如果您进行按应用加密,您仍然需要处理数据库密钥。您可以通过多种方式执行此操作。

  1. 在很多情况下,您只需将密钥存储在钥匙串中就足够了。
  2. 您还可以在启动 app/accessing 钥匙串项目时要求 passcode/Touch ID/Face ID
  3. 最后,您可以要求用户输入密码
  4. 无论您的选择如何,使用 PBKDF2 等密钥派生函数 ~100,000 次来使暴力破解更加困难。永远不要存储实际的数据库密钥(派生的)。