(最初张贴在SOF上,但我没有得到任何答复)
我正在设计一个小应用程序,在我的公司内使用。我的应用程序需要连接到第三方网站代表我的应用程序用户。我希望将第三方站点的用户凭据安全地存储在我的数据库中。显然,将第三方密码存储为明文是不可能的。
我的建议如下:
我能发现的唯一弱点是,如果用户的本地密码比第三方密码弱,攻击者只需猜测本地密码,两者都会被破坏。
这个算法还有其他问题吗?是否有更好的方法来实现同样的结果?
发布于 2013-09-01 07:12:21
我在IT安全栈Exchange站点上写了大量关于如何解决这个问题的文章。让我指出我的答案在那里:
基本上,我建议你建立一个单独的机器来存储第三方网站的用户凭证以及他们本地密码的散列,对用户进行身份验证,然后直接连接到第三方网站。这台独立的机器应该尽可能小心地被保护和锁定,以减少它被破坏的可能性。但请阅读这些链接,以获得各种各样的详细信息和建议。
发布于 2013-08-31 10:40:01
这不是一个真正的算法,更多的是一个方案。从本质上讲,它没有什么问题,但是从计算上来说,确定一个散列与另一个散列应该是不可行的,因为每个散列对保护都是同样重要的。
除了在该方案中使用不同的盐值之外,我还会使用不同的哈希算法。
您也不能存储auth散列,而是等待第三方凭据的成功解密作为一种身份验证形式。这将使服务器工作量减少一半,或者允许您增加密钥派生工作量。您将需要使用从本地密码派生的密钥加密该记录的凭据和单个迭代散列,然后在解密时简单地验证该哈希。
https://crypto.stackexchange.com/questions/10086
复制相似问题