繁体   English   中英

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

[英]How to store thirdparty passwords without reading them

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

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

问题是我的解决方案安全吗? 是好还是坏? 有没有更好的方法? 您能指点一下方向吗?

存储可检索密码可能是密码术中最困难的任务之一。 您的应用程序需要以明文形式获得这些密码,并且攻击者也可以使用足够的特权来获得这些密码。 但是,有一些常见的方法可以解决此问题:

  1. 如果目标网站提供身份验证服务,则可以将纯文本密码与令牌交换,并存储此令牌(而不是密码)以供将来使用。 OAuth2协议以这种方式工作。
  2. 您可以在用户每次启动应用程序时请求主密码。 该主密码用于加密网站密码,但从不存储自身,仅在应用程序运行时才保留在内存中。
  3. 大多数操作系统提供某种形式的密钥存储的,在Windows上,它被称为数据保护API (DPAPI),在Android中它的密钥库 密钥存储解决了OS级别的问题,即如果没有主密钥,就无法加密密码(这就提出了将主密钥存储在何处的问题……)。

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

如果您能负担得起专用硬件,则可以将密码管理外包给无法从Internet访问的第二台服务器,或者可以考虑购买硬件安全模块

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM