首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果密码的散列总是用不同的结果计算,如何检查它的有效性

如果密码的散列总是用不同的结果计算,如何检查它的有效性
EN

Stack Overflow用户
提问于 2022-07-19 05:35:21
回答 2查看 60关注 0票数 2

我目前正在使用蚊子(https://github.com/eclipse/mosquitto)的密码生成工具mosquitto_passwd,我对散列算法、盐类等等不太了解,但我想我理解的一件事是如何验证凭证--例如:密码使用特定的算法进行散列,存储,每次我们想检查用户是否获得正确的密码时,我们使用相同的算法散列输入,如果哈希与存储的密码相同,这意味着它是相同的密码。

但是当我用蚊子生成相同密码的散列时,我发现这些散列是不一样的:

$ mosquitto_passwd -H sha512 -b passfile user password生成:

第一次$6$Bu5dTpOWUYWMXZFk$unOkjDIots1jbOhzdthqXrz3WQ9uSx1ZmwGHlpBivtSMdysin+97xyJndbB1T3sIaLG4JxH0hPYHCXG3+H6z5Q==,和

第二个是$6$LL/Vto2dvR5rO/KR$PXoQIqiahL0vvpFZt091Q3tFrNHcf+MykrqmfVWPGnAMDHcdI1MbeF50NAWAyasbhGjcE0GyAN+CiB88bMV+bg==

散列格式为$hashtype$salt$hash,$6$用于sha512,其余为salt + hash。

通过查看源代码(src/password_mosq.c : int pw_hash()),我注意到盐是随机生成的。

我很难理解的是,如果密码的每一个散列都不同,程序应该如何检查密码的有效性?

假设我想使用would列表破解这个哈希,如何计算需要与数据库中的哈希进行比较的哈希?

EN

回答 2

Stack Overflow用户

发布于 2022-07-19 08:24:56

执行身份验证的应用程序可以访问mosquitto_passwd命令的整个输出,因此它具有用于创建该命令的散列和salt。

$6$Bu5dTpOWUYWMXZFk$unOkjDIots1jbOhzdthqXrz3WQ9uSx1ZmwGHlpBivtSMdysin+97xyJndbB1T3sIaLG4JxH0hPYHCXG3+H6z5Q==

  • 6 Hash type
  • Bu5dTpOWUYWMXZFk Salt
  • unOkjDIots1jbOhzdthqXrz3WQ9uSx1ZmwGHlpBivtSMdysin+97xyJndbB1T3sIaLG4JxH0hPYHCXG3+H6z5Q== Hash

因此,当用户提交密码时,它会将密码与salt组合在一起,然后对其进行散列。由此产生的输出应该与输出的哈希部分匹配。

关键是,即使攻击者从mosquitto_passwd中获得了整个字符串,他们仍然必须从每个用户的单词列表中生成散列(因为每个用户都有不同的随机盐),而不仅仅是散列一次并检查匹配。

票数 2
EN

Stack Overflow用户

发布于 2022-07-19 05:42:43

程序不应该用字符串相等来比较散列。

它应该为用户检索密码哈希(例如。使用一些身份,如电子邮件或登录),并验证它使用哈希算法,如果它是有效的一个给定的原始密码。

每次都有不同的散列防止彩虹表攻击你的密码的方法能力。

其他参考资料:

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

https://stackoverflow.com/questions/73031590

复制
相关文章

相似问题

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