哪种编码用于存储可解码密码?

时间:2010-08-18 11:33:22

标签: encryption passwords

我正在构建一个Web服务,该服务获取其他服务的凭据并代表用户轮询这些服务。即 - 考虑使用电子邮件聚合服务 - 在各种不同的电子邮件提供商处轮询您的帐户,并将它们整理在一个列表中。

在这种情况下,用户提供的密码必须能够被webapp解密,因此可以将它们传递给各种服务进行身份验证。

我应该如何存储这些密码?

我已经阅读了关于在db中存储密码的各种帖子(答案总是'不要'。),但在这种情况下,我看不到替代方案。 (虽然建议欢迎)

1 个答案:

答案 0 :(得分:0)

让我们在这里澄清一下:服务器必须能够恢复明文密码。

考虑一些你可能会做的事情:

  • 使用密钥加密密码。将密钥存储在配置文件中。
  • 使用智能卡/黑匣子加密密码。
  • 通过发送HTTPS请求,借助其他服务器加密/解密密码。
  • 使用RAM中的密钥加密密钥。使用mlock()来阻止它被交换到磁盘。希望你不必重新启动。

如果攻击者拥有root权限(但没有任何内容),他们都不会帮助你。如果攻击者切断电源并窃取盒子,大多数人都无法帮助你(RAM不像你想要的那样是非易失性的。)

你想要防御什么攻击?你忽略了什么攻击?

一种可能性是使用从用户密码派生的密钥加密密码(如OSX的Keychain和Windows的等效密码存储,没有人使用)。当用户登录到您的Web服务时,您可以将密钥保留在会话中(或者使用一次性填充对其进行异或,并将填充存储在cookie中,并且仅在用户发送请求时恢复密钥)。这使得从数据库备份中窃取外部密码至少与破解用户密码一样困难。但是,它对其他人没有多大帮助。