显示用户是否安全,一次性密码是一些哈希值,是否与常规密码的哈希值相同或是否会影响密码破解的安全性?
示例一次性密码哈希向用户显示:$ 2y $ 10 $ bIta4cgF3o4K.7u2iry3S.iQCaUJ1Rb9uP2eu.618bjuYmONxJTP6
我不希望用户知道我如何创建一次密码,因此我想给他一个哈希值。
答案 0 :(得分:0)
我会同意那些问过你为什么需要这样做的人,不过这个问题已经过了你的问题,是的,这是一个坏主意。
首先,根据您提供的密码,我可以告诉您正在使用某种形式的bcrypt。不可否认,bcrypt是一种非常强大的散列算法,使用GPU和hashcat等工具不易破解,但是你仍然会通过发送给用户来披露实现细节。
此外,如果您担心用户知道您生成的一次性密码会告诉我它不是随机的。如果它不是随机的,那么即使是像bcrypt这样的非常强大的算法,如果有人想出你的一次性密码约定,也不会拯救你。
最后,我不完全确定您提出的解决方案是如何工作的,因为如果您向用户发送哈希值,他们将输入哈希作为密码。然后,标准登录过程将对它们输入的内容进行散列(在这种情况下是您生成的一次性密码的散列),并将其与存储在数据库中的内容进行比较。这太复杂了。
我建议只生成一个10-12个字符的随机一次性密码,并通过之前验证过的频道(即经过验证的电子邮件地址或手机号码)发送给用户。