首页
/ JohnTheRipper 项目新增 PostgreSQL SCRAM-SHA-256 哈希支持的技术解析

JohnTheRipper 项目新增 PostgreSQL SCRAM-SHA-256 哈希支持的技术解析

2025-05-21 06:51:49作者:平淮齐Percy

在密码安全领域,JohnTheRipper 作为一款知名的开源密码分析工具,持续扩展其对各类哈希算法的支持。近期开发团队针对 PostgreSQL 数据库特有的 SCRAM-SHA-256 认证机制实现了兼容支持,这一技术演进值得深入探讨。

技术背景

PostgreSQL 从 10.0 版本开始引入 SCRAM-SHA-256 作为默认认证方式,其密码存储格式具有特定结构:

SCRAM-SHA-256$<迭代次数>:<Base64盐值>$<Base64存储密钥>:<Base64服务端密钥>

这种格式与传统的 MongoDB SCRAM 实现存在两个关键差异:

  1. 字段间使用冒号分隔而非标准SCRAM的逗号
  2. 盐值长度不固定(不同于MongoDB的固定长度)

实现挑战

开发过程中面临两个主要技术难点:

  1. 分隔符兼容性问题 原始代码仅支持标准SCRAM的逗号分隔格式,需要扩展解析逻辑以处理PostgreSQL特有的冒号分隔符。团队选择通过prepare方法实现格式转换,而非单独开发2john脚本,这保持了代码架构的统一性。

  2. 动态盐值长度支持 原实现硬编码了盐值长度校验(针对MongoDB),导致无法正确处理PostgreSQL的可变长度盐值。解决方案是移除长度限制,同时确保安全参数检查。

技术实现细节

核心改进包括:

  1. 增强的格式解析器 新增支持解析如下典型格式:
SCRAM-SHA-256$4096:Wn/IWH721Aj+HbEQRJiD3A==$xtjWYz23fPW4dXUZMzTup6bUOqSAVzlChcrhHCfIXfo=:EyLID0avoAyy1JzKwD7yKQ9HuWQ0VlSurm180/sQFYE=
  1. 输出优化 当前--show功能输出包含密码和部分哈希组分,未来可能优化为更简洁的显示方式。示例输出:
user:test:L6Nhfyy6pos5mpvTRXQOTQ==$...(略)

安全实践建议

对于使用PostgreSQL的管理员:

  1. 建议迭代次数设置为10000以上
  2. 定期检查pg_authid表中的密码哈希格式
  3. 考虑使用\password命令定期更新密码

对于安全研究人员:

  1. 测试时注意区分MongoDB和PostgreSQL的SCRAM实现差异
  2. 可利用新支持验证数据库密码强度

未来方向

团队计划进一步优化哈希显示格式,并探索对其他数据库SCRAM变体的支持。此次升级体现了JohnTheRipper对新兴认证标准的快速响应能力,为数据库安全审计提供了更完备的工具支持。

登录后查看全文
热门项目推荐
相关项目推荐