安全存储的局限性——KeyChain 和 KeyStore

Limitations of secure storage - KeyChain and KeyStore

我打算在我的应用中使用 flutter_secure_storage 来保存一些私钥和令牌。 我在 Android 和 iOS 上寻找安全存储的限制,但我找不到某些问题的答案:

  1. iOS 和 Android 上的 KeyChain 和 KeyStore 存储分别有多大?
  2. 我们可以在里面存放多少把钥匙?
  3. 单个密钥可以有多大?
  4. 存储的生命周期是多少?它仅在安装应用程序时存在吗?是持久的还是短暂的?

谢谢

安全存储就像共享 Prefences/NSUserDefaults。它以 key-value 对的形式存储数据。数据经过加密,并使用由唯一设备密钥生成的密钥来加密和解密存储的数据。数据存储在根目录中的某处,只有 OS 可以访问它。

  1. 安全存储没有存储限制(任何文档中都没有提到 space 限制,但我认为您不能存储 1Gb 以上的大量数据)
  2. 您可以在里面存储无限数量的密钥
  3. 基于 MKJParekh's answer,您最多可以存储 2147483647 个字符。
  4. 卸载应用程序后,数据将被删除。 (注意安全存储中的数据无法在Android中备份)Take a look at this

不要使用安全存储来存储敏感的私钥和令牌。您没有指定要在安全存储中存储哪些私钥和令牌。您可能正在存储您的数据库凭据或其他用户不应获取的内容。尽管存储在安全存储中的数据是加密的,但它并不完全安全。用户可以 root/jailbreak 他们的设备,这使他们可以完全控制 OS。有些工具可以拦截提供的密钥,并使用它来解密数据。防止这种情况的唯一方法是永远不要将密钥交给用户。您应该将其存储在您可以控制的服务器中。 (Firebase Cloud Functions、AWS ECS 或您自己的 VPS)是这些服务器的示例。

何时使用安全存储
使用安全存储来存储应该对用户加密和隐藏的数据。该数据应仅存储用户的敏感数据,例如他们的 api 密钥 而不是您的服务器私钥 .