首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从MD5移动到SHA-512

从MD5移动到SHA-512
EN

Security用户
提问于 2011-06-24 14:59:34
回答 4查看 10.3K关注 0票数 11

这个问题与其说是一个技术安全问题,不如说是一个安全策略。

许多年前,我开发了一个asp.net站点,实现了表单身份验证,并将用户密码存储为MD5哈希。从基本的安全新闻来看,很明显MD5已经不再有用了。我看到了处理当前用户的两种可能的计划。

  1. 将旧用户表复制到新设计中,并将当前的MD5哈希到SHA-512中。然后,当用户登录时,我将首先以MD5的形式散列他们的输入,然后以SHA-512的形式散列输入。有点像,但它一点也不困扰我的用户
  2. 强制所有用户重置密码,使用MD5检查旧密码,但将新密码存储为SHA-512。

有什么想法吗?我错过了第三种选择?

注意:我喜欢OpenID,但在这个网站上它不是一个选项

EN

回答 4

Security用户

回答已采纳

发布于 2011-06-24 17:09:53

我曾经两次解决过这个问题:

  1. 我的第一个web应用程序,实际上我知道的足够MD5哈希用户的密码;然而,我不知道盐,并在以后的工作。
  2. 实际上,几年后,当我决定从现有的MD5“升级”到SHA-512时,也是同一个web应用程序。

在这两种情况下,我都没有使用您的选项,而是使用选项3:在用户下次登录时,使用密码生成新的哈希并替换旧的哈希(在对照旧的哈希进行验证之后)。

在添加盐的情况下,这非常简单:我所做的就是默认每个人都使用"“(空字符串)的盐类,它可以连接起来,然后进行散列,而不会对结果哈希产生任何影响;一旦经过身份验证,我就为用户生成一个新的盐,然后重新对密码进行散列,从而保存新的结果。

从MD5升级到SHA-512有点棘手,但只需查看表中has的字符串长度(我没有为新哈希使用新列,只需扩展现有的一列以适应较长的哈希),我就可以知道使用哪种算法,然后对用户进行适当的身份验证;一旦通过身份验证,如果他们仍然在旧哈希中,我将计算一个新的哈希(也会借此机会生成一个全新的盐)并存储它。

当然,在这两种情况下,我最终都会遇到“旧风格”密码仍然存在的情况。在等待了适当的时间(例如6个月)后,只需确定自采用新样式以来还没有登录的密码是“非活动”的:为他们生成和存储一个新的、完全随机的密码(当然,使用新的存储方式),如果他们真的回来了,就必须使用您的密码重置机制来重新访问。(或者,保留原样,但只需删除旧样式的代码即可有效地使其失效。)您也可以(如果适用)向这些用户发送一封电子邮件,要求他们登录以完成其帐户上的安全升级,然后才能使他们的当前密码无效。

当然,这种方法在身份验证例程中需要额外的代码,但这只是暂时的--一旦每个人都升级了(无论是登录还是“强制”进入,就像上一段那样),您可以删除所有负责执行升级的代码。安全升级完成,您的大多数用户(和您的所有常规用户)从来没有注意到任何事情!

票数 14
EN

Security用户

发布于 2011-06-24 15:28:17

我以前曾在一家需要做同样事情的公司中使用过选项2。备选方案1没有任何问题,但第2项似乎更简单。

也可以使用PBKDF2bcrypt,而不是SHA-512作为密码。

好的,Open已经过时了,但是你可以使用out,使用像Twitter或Facebook这样的连接,并且完全消除用户名和密码的存储和管理吗?

票数 9
EN

Security用户

发布于 2011-06-24 20:43:41

这不是一个真正的答案,因为它没有解决您的具体问题,但是我同意添加另一个联合您的ID的选项。因此,无论是OpenID、Facebook、Google还是whoever...the,安全存储用户凭证的最佳选择就是干脆不这么做。

TL;DR:联邦身份验证(如果/如果可能的话)。

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

https://security.stackexchange.com/questions/4754

复制
相关文章

相似问题

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