首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储第三方的凭据

存储第三方的凭据
EN

Cryptography用户
提问于 2013-08-30 18:03:58
回答 2查看 14K关注 0票数 19

(最初张贴在SOF上,但我没有得到任何答复)

我正在设计一个小应用程序,在我的公司内使用。我的应用程序需要连接到第三方网站代表我的应用程序用户。我希望将第三方站点的用户凭据安全地存储在我的数据库中。显然,将第三方密码存储为明文是不可能的。

我的建议如下:

  • 当用户在我的应用程序中创建一个帐户时,应用程序生成两个salt值。
  • 用户为我的站点输入一个新密码,以及第三方站点的凭据(用户名和密码)。
  • 我的应用程序使用第一个salt值和PBKDF2bcrypt来散列用户的本地密码。此散列保存在数据库中,以供以后的身份验证。
  • 我的应用程序使用第二个盐值和相同的密钥派生函数来生成第二个哈希。第二个哈希用于AES-加密第三方凭据。加密的凭据保存在数据库中,以便对第三方站点进行身份验证。

我能发现的唯一弱点是,如果用户的本地密码比第三方密码弱,攻击者只需猜测本地密码,两者都会被破坏。

这个算法还有其他问题吗?是否有更好的方法来实现同样的结果?

EN

回答 2

Cryptography用户

回答已采纳

发布于 2013-09-01 07:12:21

我在IT安全栈Exchange站点上写了大量关于如何解决这个问题的文章。让我指出我的答案在那里:

基本上,我建议你建立一个单独的机器来存储第三方网站的用户凭证以及他们本地密码的散列,对用户进行身份验证,然后直接连接到第三方网站。这台独立的机器应该尽可能小心地被保护和锁定,以减少它被破坏的可能性。但请阅读这些链接,以获得各种各样的详细信息和建议。

票数 14
EN

Cryptography用户

发布于 2013-08-31 10:40:01

这不是一个真正的算法,更多的是一个方案。从本质上讲,它没有什么问题,但是从计算上来说,确定一个散列与另一个散列应该是不可行的,因为每个散列对保护都是同样重要的。

除了在该方案中使用不同的盐值之外,我还会使用不同的哈希算法。

您也不能存储auth散列,而是等待第三方凭据的成功解密作为一种身份验证形式。这将使服务器工作量减少一半,或者允许您增加密钥派生工作量。您将需要使用从本地密码派生的密钥加密该记录的凭据和单个迭代散列,然后在解密时简单地验证该哈希。

票数 1
EN
页面原文内容由Cryptography提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://crypto.stackexchange.com/questions/10086

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档