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

我需要加密iOS核心数据吗?,ios,encryption,sensitive-data,Ios,Encryption,Sensitive Data,我想在iPhone应用程序中存储敏感数据,但也可以通过触摸ID解锁。我已经想到了一些选项,其中没有一个能够完全实现我的目标,我希望得到一些实施建议 密码保护应用程序和加密数据-仅存储使用用户密码加密的数据。每次解密查看数据时都要求输入密码。我不知道Touch ID在这种情况下会如何工作。它是安全的,但每次输入密码都很痛苦 仅限密码保护应用程序-存储原始数据并仅在用户提供正确的密码/触摸ID时允许访问。这实现了我想要的用户体验,但这是一种糟糕的做法吗?苹果最终会因为敏感数据未加密而拒绝这种方法吗?

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

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

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

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


  • 每个人都怎么想?

    你有几个选择

  • 假设用户已启用其密码,并且知道这意味着设备锁定时DB已加密。在某些情况下,这就足够了

  • 使用对核心数据进行加密。仅供参考,这确实有效,但它有很多限制和缺陷。我们在一个企业应用程序中使用了它,我很后悔使用它

  • 使用SQLCipher将核心数据转移到SQLite。这是我现在喜欢的

  • 请记住,如果执行每应用程序加密,您仍然必须处理DB密钥。您可以通过多种方式来实现这一点

  • 在许多情况下,只需将钥匙存储在钥匙链中即可
  • 启动应用程序/访问钥匙链项目时,您还可以要求密码/触摸ID/面部ID
  • 最后,您需要用户输入密码短语
  • 不管您选择什么,都要使用诸如PBKDF2之类的键派生函数~100000次,以使暴力强制更加困难。永远不要存储实际的数据库密钥(它是派生的)

  • 谢谢你的回复。在阅读了有关ios钥匙链的内容后,我想这就是我想要的。因此,基本上我会以原始形式将数据存储在钥匙链中,而不是核心数据。然后,在检索时,会提示用户输入密码或触摸id,如果经过验证,则会显示数据。听起来不错吧?如果你想存储的数据能够放入钥匙链,那么这可能是正确的解决方案。这就是钥匙链的设计目的。只需确保设置了所需的ksecattracessible值。