如何在不读取第三方密码的情况下存储它们

How to store thirdparty passwords without reading them

我无法解决问题,需要帮助。我需要存储来自第三方服务的密码,我不希望它是人类可读的。

我想出了一个(可能是愚蠢的)解决方案:我的服务生成一个密钥 encrypts/decrypts 密码,并使用该密钥解密密码,当需要访问第三方服务时,并在需要存储时加密。

问题 我的解决方案安全吗?是好还是坏?有更好的方法吗? 能指点路吗?

存储可检索的密码可能是密码学中最困难的任务之一。您的应用程序需要获取这些明文密码,而具有足够权限的攻击者也可以这样做。不过,有一些常见的方法可以解决这个问题:

  1. 如果目标网站提供身份验证服务,您可以用令牌交换明文密码,并存储此令牌(而不是密码)以供将来请求使用。 OAuth2 协议就是这样工作的。
  2. 您可以在用户每次启动您的应用程序时请求主密码。此主密码用于加密网站密码,但不会自行存储,只会在应用程序运行时保存在内存中。
  3. 大多数操作系统都提供某种密钥存储,在 Windows 中称为 Data Protection API (DPAPI), in Android it's the KeyStore。密钥存储解决了 OS 级别的问题,即如果没有主密钥就无法加密密码(这引发了将主密钥存储在何处的问题...)。

None 以上系统都是防弹系统,毕竟应用程序本身必须能够获取密码。这就是为什么人们尽可能避免完全存储密码(例如存储哈希值)的原因。

如果您能负担得起专用硬件,您可以将密码管理外包给无法从互联网访问的第二台服务器,或者您可以考虑购买 hardware secuity modules