当只有加盐的哈希存储在没有加盐的数据库中时,Freeradius 如何检测提供的密码是否正确

信息安全 哈希 自由半径
2021-08-29 21:58:34

我正在发现 Freeradius 和密码散列机制。我建立了一个数据库(在 MySQL 中)来存储一些用户的密码。我有一个用户的密码是明文,另一个在 SHA256 中散列,没有加盐,最后一个在 SHA256 中散列并加盐。

我使用这个脚本来创建加盐哈希:https ://gist.github.com/bestrocker221/f506eee8ccadc60cab71d5f633b7cc07

当我测试与半径服务器的连接时(使用命令radtest和另一台运行 ubuntu 的计算机),可以访问所有帐户。

这是数据库内容:(每个用户都有相同的密码,“passroot”)

mysql> select * from radcheck;
| id | username | attribute         | op | value
|  1 |   user1  |Cleartext-Password | := | passroot
|  2 |   user2  |SHA2-Password      | := | ef653cafdcaf5b3733c7c5aa24b781c5c952618642efd2abc04b9c6efccac8258bc84a881850d9ffa8e6c91953c8ca7613f49dea007ae6437ccf26b8f10fadfb
|  4 |   toto   |SSHA2-256-Password | := | /F8Bymi/qgL4rQHP9C+8jDciSLmr/PZEc5JJNoCwRelzZWxkZW1lcg==

使用 salt 方法对帐户进行身份验证是有效的:

root@Principale:"/share# radtest toto passroot 192.168.150.1 1812 passroot
Sent Access-Request Id 117 from 0.0.0.0:39617 to 192.168.150.1:1812 length 74
User-Name = "toto"
User-Password = "passroot"
NAS-IP-Address = 127.0.1.1
NAS-Port = 1812
Message-Authenticator = 0x00
Cleartext-Password = "passroot"
Received Access-Accept Id 117 from 192.168.150.1:1812 to 192.168.150.1:39617   length 20

root@Principale:"/share# tail /var/log/freeradius/radius.log
Tue May 4 16:32:07 2021 : Info: Need 7 more connections to reach 10 spares
Tue May 4 16:32:07 2021 : Info: rlm_sql (sql): Opening additional connection (42), 1 of 29 pending _slots used
Tue May 4 16:32:07 2021 : Auth: (164) Login OK: [toto/passroot] (from client test port 1812)
root@Principale:"/share#

我不明白当用户不知道我使用的盐时,freeradius 如何将用户提供的密码与存储在数据库中的加盐哈希相匹配。

1个回答

哈希和盐都在value列中。在 Base64 解码后,前 32 个字节是哈希,其余的是盐(在您的情况下,它是 ASCII 字符串seldemer)。