加密密码和电子邮件检索的建议

时间:2011-01-19 23:47:36

标签: email encryption sha1 salt forgot-password

我刚刚使用盐渍sha1加密了我的数据库中的密码。当然,我需要实现忘记密码链接(电子邮件)。我现在制作那些不合适的版本。

我假设由于加密风格,我需要提示用户重置密码。

我只是在寻找最安全的方法来做到这一点。任何建议,或资源和教程的链接,以及我应该使用什么样的方法将不胜感激。

谢谢,美好的一天。

1 个答案:

答案 0 :(得分:2)

为了清楚起见,sha1,咸味或俗气的洋葱味,不加密,它被称为哈希。它是一种单向函数,具有独特的独特输出。对数据库中的密码使用salted哈希的想法是双重的:

  1. 哈希是单向函数,因此无权访问数据库的人实际上可以确定这些密码是什么。非常好的练习。
  2. 盐渍部分,假设您正在哈希用户名+密码+一些垃圾,意味着每个用户名+密码组合应该是唯一的哈希。它通过预先计算的哈希使字典攻击/快捷方式变得困难,因为大多数人都没有ninefingers:stackoverflow!!:{insertcommonwordhere}字典。它并没有阻止它们产生它,只是让它更加不方便。
  3. 现在我们已经清除了,是的,如果用户忘记了密码,你就不能通过电子邮件发送给他们,因为你无法反转哈希。按设计。

    相反,您要做的是允许用户安全地重置密码。最简单的形式是,如果用户输入他们的电子邮件地址,则会通过电子邮件向他们发送指向您网站的链接,其中包括一个在短时间内有效的唯一使用一次令牌。

    其他选择?生成密码并通过电子邮件发送给他们。英国的英国政府网关做了一件非常有趣的事情:网页包含一半密码,另一半包含电子邮件。您需要两个然后再次登录。

    现在,这个百万美元的问题:这是安全的吗?没有。没有什么是安全的。没有100%的安全性。永远。这种存储密码的特殊方法增加了安全性,因为:

    • DBA不能轻易滥用他们对用户表的访问权;
    • 以某种方式select * from table users;的恶意请求也无法轻易读取这些密码。

    但是,只要您依靠能够通过电子邮件将用户作为安全通信方式发送电子邮件,您就可以依赖:

    • 他们的电子邮件帐户是安全的;
    • 他们的电子邮件没有受到监控。

    那么问题就变成了 - 你真的需要多安全?实施email-out-a-reset-link解决方案适用于大多数情况,因为它们确实不是高价值目标。