【问题标题】:Do I need to encrypt iOS Core Data?我需要加密 iOS 核心数据吗?
【发布时间】:2019-01-05 12:35:31
【问题描述】:

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

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

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

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

大家怎么看?

【问题讨论】:

    标签: ios encryption sensitive-data


    【解决方案1】:

    您有几个选择。

    1. 假设用户启用了他们的密码,并且知道这意味着当设备被锁定时数据库是加密的。在某些情况下,这就足够了。

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

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

    请记住,如果您对每个应用进行加密,您仍然需要处理数据库密钥。您可以通过多种方式做到这一点。

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

    【讨论】:

    • 感谢您的回复。在阅读了有关 ios 钥匙串的信息后,我认为这就是我想要的。所以基本上我会以原始形式而不是核心数据将数据存储在钥匙串中。然后在检索它时,将提示用户输入他们的密码或触摸 ID,如果经过身份验证,则显示数据。听起来对吗?
    • 如果您要存储的数据适合钥匙串,那么这可能是正确的解决方案。这就是钥匙链的设计目的。只需确保设置所需的 kSecAttrAccessible 值即可。
    猜你喜欢
    • 2014-06-05
    • 1970-01-01
    • 2011-10-17
    • 2012-11-25
    • 2013-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多