将纯文本散列为值得密码的字符串

时间:2019-02-19 06:02:29

标签: security hash openssl cryptography passwords

我想创建一种确定性地创建强密码的方法。意思是每次注册网站时,我都想记住某种“提示”,并将“提示”的“哈希”变成该站点的强密码。我认为,它比密码存储应用程序更好,并且比记住密码更安全。

一种简单的方法是使用openssl。例如:

echo -n "password hint for facebook" | openssl dgst -sha256
>>159cb97d048a50a9bc124d2e6795cec1f5e0850ee9f5148fbb1d4e822dd4dd9c

但是以这种方式创建的哈希值不够强。即不包含特殊字符。出于实用目的可能很好,但是某些站点会要求您的密码至少包含一个特殊字符。有人有更好的主意吗?

1 个答案:

答案 0 :(得分:1)

密码破解者非常了解这种确定性技术,并且不会产生更安全的密码。

使用此技术的公共泄漏密码经常以高速度批量破解。像mdxfind这样的工具将尝试数千种不同类型的嵌套哈希组合,像John the Ripper这样的工具将允许您构造嵌套哈希的任意动态组合(使用其动态哈希算法语法),并且hashcat内置了许多常见的嵌套。 / p>

还请注意,根据站点名称更改密码的单个元素也是一种非常著名的存储技术,密码破解者可以利用此优势。

要评估您提出的方法的安全性,您必须想象如果攻击者确切知道您的方法是什么,该方法将被削弱。如果您的方法在公开后无论如何还是较弱,那是不够的。这就是所谓的Kerckhoff's Principle

在这种情况下,如果唯一更改密码的是站点名称,则一旦在任何站点上将其破解,攻击者将立即识别出该模式并能够重建您的密码。 所有网站的密码。显而易见,这为什么不好。

您最好使用密码管理器,该密码管理器受两因素身份验证和随机生成的密码保护,然后为所有其他帐户生成真正随机的密码。这样,您实际上只需要记住一个密码,就可以提高密码强度(例如,从20,000个单词的词典中随机抽取六个单词)。