我读到很多身份验证系统都使用加密哈希函数,这样,它们不保留用户的用户名和密码,而是只保留用户名和相关密码的哈希。这样,系统只需将输入密码的哈希与与该用户名密码关联的已知哈希进行比较。
由于散列在理论上是唯一的,哈希函数总是映射到相同的输出,这似乎是一种安全的方案。
但是,我正在考虑以下场景:假设黑客能够访问服务器的数据库,并且可以从使用的哈希函数中看到密码散列的输出。黑客不能选择密码(任何合法密码),获取密码的哈希,然后修改数据库,用黑客自己的密码哈希替换另一个用户的密码哈希吗?从而欺骗服务器,使其认为与该用户名相关的哈希是该用户密码的哈希,而实际上是黑客密码的哈希。
我相信这完全是假的,否则它总是会发生,但我很好奇它是不可行的。
很明显,人们可能会怀疑这样做的必要性,那就是黑客已经获得了对服务器数据库的访问权,但我想到的情况是,其他有价值的信息都是加密的,只有某些用户才能访问。
发布于 2019-04-24 19:15:57
如果攻击者获得了对数据库的写访问权限(例如通过SQL注入),那么没有什么可以阻止他们将用户的密码哈希更改为自己的。它没有经常被提及的原因是,正如您所指出的,如果攻击者能够对数据库进行写入访问,通常会出现更严重的问题。
我想到了一种情况,即对其他有价值的信息进行加密,只有特定用户才能访问。
最好的方法是从用户的密码(与用于登录的密码散列分开。)派生密钥,在这种情况下,替换密码哈希将不允许攻击者解密信息。
https://security.stackexchange.com/questions/208963
复制相似问题