postgresql - 为什么 PostgreSQL 默认将用户密码存储在 MD5 哈希中不是安全漏洞?

标签 postgresql security hash md5 internals

为什么 PostgreSQL 默认将用户密码存储在 MD5 散列中不是安全漏洞?我正在研究 PostgreSQL 的内部结构并已进入系统目录 pg_authid当我读到 MD5 哈希加密时,它似乎被认为是过时的。在我看来,如果管理员或用户能够访问底层文件存储,那么他们可以假设破解密码并执行任何所述凭据可以启用的操作。

我问为什么它不是安全漏洞,因为显然 PostgreSQL 已通过“通用标准认证”,根据它的 wiki 表明它似乎是军事级安全的,该 wiki 指出它来自西方国防组织。

谢谢!

最佳答案

首先,PostgreSQL 10 adds SCRAM-SHA256基于 SASL,使其成为一个有争议的问题。

对于旧版本:这是一个弱点,但由于多种原因它不是一个大的安全漏洞:

  • 互联网部署的 PostgreSQL 实例应该使用 SSL,以防止窃听协议(protocol)。这大大降低了成功窃取密码的几率。

  • 密码经过两次加盐处理。存储在磁盘上的密码用 salt 进行哈希处理,并采用 md5 摘要。但是在线路上发送的密码会使用身份验证交换特定的盐重新加盐并重新哈希,因此如果您在线上捕获哈希密码,则不能在以后的身份验证中简单地重放它。

如果您设法通过窃听明文连接获得相同的两次加盐密码的几个副本,您可能会利用 MD5 中的弱点找到存储在磁盘上的一次加盐版本,并使用它来验证数据库。

但这需要大量工作,而且使用 SSL 几乎可以完全避免。

就我个人而言,我认为“通用标准”接近于一堆官僚废话。它仅适用于一个特定的安装,具有非常狭窄的、特定版本的所有内容,从硬件开始。它应该有助于排除总蛇油,但它肯定不能证明任何东西都是安全的。 (见鬼,看看政府系统……)

关于postgresql - 为什么 PostgreSQL 默认将用户密码存储在 MD5 哈希中不是安全漏洞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45720637/

相关文章:

java - shiro 在身份验证 web 应用程序上按角色重定向

php - 在数据库中存储用户/客户端密码?需要你的意见

postgresql - pandas to_sql 中 ' unexpected keyword argument ' fetch' ' 错误的来源?

postgresql - 用户和角色有什么区别?

ruby-on-rails - Rails 获得最畅销的产品

sql - 按 hstore 中任意属性的值排序

security - 应用引擎 : what are best practices for transmitting a password and storing it securely in Google App Engine?

ajax - 如何通过 SSL HTTPS 制作安全的登录页面?

python - 如何处理要在 cron 作业中处理的新文件

Ruby:使用散列访问实例方法