为什么将用户密码默认存储为MD5哈希值不是安全风险?

5
默认情况下,PostgreSQL将用户密码存储在MD5哈希中,为什么这不是安全漏洞?我正在研究PostgreSQL的内部机制,并已经到达系统目录pg_authid,当我阅读有关MD5哈希加密的内容时,它似乎被认为是过时的。我认为,如果管理员或用户能够访问底层文件存储,则他们可以理论上破解密码并执行所述凭据允许的任何操作。

我问为什么这不是安全漏洞,因为显然PostgreSQL已经通过了“公共标准认证”,根据其维基百科,这似乎是军用级别的安全性,并且注明其起源于西方国防组织。

谢谢!


版本10将提供scram-sha-256身份验证方法 - Clodoaldo Neto
那么可以说,在许多默认安装中存在一个巨大的安全漏洞,这样说是公平的吗? - John Drinane
@ClodoaldoNeto ^ - John Drinane
这一点都不公平。如果哈希密码落入错误的手中,除非使用昂贵的加密方法,否则加密方法将变得不太重要。 - Clodoaldo Neto
@clodoaldoNeto 我想我可能有点迟钝...但如果我正确理解你的回答的话,似乎你在说仅访问哈希是最重要的,那么为什么要加密它呢? - John Drinane
1个回答

5
首先,基于SASL,PostgreSQL 10添加了SCRAM-SHA256,使这个问题变得不再重要。
对于旧版本来说,这是一个弱点,但出于以下几个原因,它并不是一个很大的安全漏洞:
- 部署在互联网上的PostgreSQL实例应该使用SSL,以防止协议被窃听。这大大降低了成功盗取密码的机会。 - 密码被双重加盐。磁盘上存储的密码与盐一起进行哈希处理,并获取MD5摘要。但发送到网络上的密码会重新进行加盐和哈希处理,使用特定的认证交换盐。如果你在网络上截获了哈希密码,你不能简单地在后续的身份验证中重复使用它。 - 如果通过窃听明文连接获取了同一个双重加盐的密码副本,你可能会利用MD5的弱点找到存储在磁盘上的单次加盐版本,并用其进行数据库身份验证。
但这需要付出大量的工作,而且使用SSL基本上可以完全防止这种情况。
就个人而言,我认为“公共标准”接近于一堆官僚主义的废话。它仅适用于具有非常狭窄和特定版本的所有硬件等的一个特定安装。它应该有助于排除彻头彻尾的骗局,但它确实不能证明任何东西是安全的。(见鬼,看看政府系统......)

谢谢!数据库的配置增加了系统的重要安全层,我明白他们不会随便给任何软件颁发通用标准认证。另外,@Craig Ringer,我很好奇在哪里可以学习更多关于正确部署流程的知识,以及第二个要点是否有文档记录? - John Drinane
@johndrinane 我不确定PostgreSQL中MD5身份验证握手的详细信息是否在源代码之外有记录。请参阅src/backend/libpq/auth.c - Craig Ringer
我会考虑将其添加到文档中,谢谢! - John Drinane
2
密码哈希的目的是为了防止他人获取存储的值。它与MITM攻击无关。MD5仅对强密码提供保护(与明文相比)。 - OrangeDog
@OrangeDog 嗯,对于保护存储的密码免受曝光,加盐和哈希密码非常重要。但是第二个、独立的哈希层也是防范MITM重放攻击的关键。 - Craig Ringer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接