所以我正在建立一个游戏网站。什么都不会受欢迎:P
现在我正在考虑密码安全,我会使用salting但是 而不是在帐户表中添加新列我考虑使用帐户名作为盐,因为它无法更改,并且是“独特的”。我的意思是2个用户不能拥有相同的帐户名。
但是我想如果让某人说帐户名为banana会有多安全。我的意思是这个词在黑客们使用的黑名单中很受欢迎。
让我们说帐户名是banana,密码是hello(用sha1哈希),这对我来说很容易逆转吗?
答案 0 :(得分:3)
不,您应该遵循标准做法并为每个用户生成一个新的独特盐,并将其直接存储在数据库中的其他字段旁边,这并不难。
答案 1 :(得分:1)
黑客可以在彩虹表中查找sha摘要,发现它与输入'bananahello'匹配(考虑到'bananahello'已经在车载彩虹表中)。他可以看到用户名是'banana',密码是'hello'。
我会哈希类似于HTTP Digest HA1哈希的东西:sha1(用户名。领域密码)。现在为您的领域('example.com')定制的彩虹桌很难再来。另一方面,您可以在您的网站上实际使用摘要式身份验证,这比基本和表单要好得多。
答案 2 :(得分:0)
没有风险。用户名无论如何都是公共知识。哈希从来都不容易反转 - 这就是哈希的重点。
对于字典攻击,您可以通过密码复杂性策略来防范它。
编辑:是的,为了防止彩虹攻击只是用一个长长的任意字符串添加盐。 SHA1(“whooooohooomysiteisthebest_bananahello”)不太可能在彩虹表中。
答案 3 :(得分:0)
最好不要使用盐,但不如随机盐那样安全。
答案 4 :(得分:0)
至少以计算方式置换用户名,只有你知道才能得到盐。虽然哈希不易逆转,但您希望保护自己免受暴力攻击。如果你使用非置换用户名作为salt,你就可以更容易地破解字典攻击。
答案 5 :(得分:0)
Salting只是防止预先计算的攻击。可以使用已经计算过字典盐的彩虹表,但它仍然无法阻止传统的强制执行,这将很快发现Remus的“bananahello”示例。
通过逐字使用公共用户名,您已经删除了salt的值,唯一的任务是计算已知盐的彩虹表。所以回答你的问题,是的,你的实施很容易(但可能不是很快)反转。