SHA-1 哈希计算
在浏览器中实时计算输入字符串的 SHA-1 哈希值。SHA-1 生成 160 位哈希值,但 2017 年 SHAttered 攻击已实证碰撞,不建议用于新项目。
已复制!
SHA-1 杂凑值是什么
SHA-1 是由任意长度的数据计算出160位元固定长度值的杂凑函数。输出以40个十六进位字符表示,相同输入永远得到相同的值。本工具会在浏览器内即时计算所输入字符串的 SHA-1 杂凑值,输入内容不会送往外部。
不过 SHA-1 已无法用于新的资安用途。因为2017年已实证出可由两个不同文件刻意制造相同杂凑值的攻击。签章、凭证、密码保存请选用 SHA-256 以上。本工具的用途仅限于与既有系统所输出的值相互核对,或确认演算法的行为。
SHA-1 杂凑值的计算步骤
- 输入字符串 输入想杂凑化的字符串。输入的同时即会计算并显示结果。
- 确认结果 会显示40个十六进位字符。只要改动输入中的一个字符,值便会完全不同。
- 复制并核对 可用复制按钮放入剪贴板,与既有的值相互比对确认。
用好本工具的小技巧
- SHA-1 由 NSA 设计,1995 年被 NIST 标准化,输出 160 位(40 个十六进制字符)。
- 2017 年,Google 与 CWI 研究所通过"SHAttered"攻击首次实证 PDF 文件的 SHA-1 碰撞。
- 主流浏览器已于 2017 年起将基于 SHA-1 的 TLS 证书标记为不受信任,Git 也在向 SHA-256 迁移。
- 在
git log中可以看到 SHA-1 提交哈希,这是 SHA-1 在现实中最常见的形式之一。 - 新系统设计中请使用 SHA-256 或更高级别的算法。
SHA-1 杂凑计算的实用场景
与既有系统的值相互核对
可确认是否与仍持续使用 SHA-1 的系统所输出的值一致。可用于迁移作业中的验证。
理解 Git 的杂凑值
可实际产生与提交ID相同的40字符格式来确认。有助于掌握 Git 所处理的是怎样的值。
建立实作的测试数据
在实作杂凑处理时,可在此备妥可作为期望值使用的已知数值。
确认杂凑函数的性质
可实际观察只要改动输入中的一个字符、输出便完全改变的情形。
与杂凑相关的术语
- SHA-1
- 指产生160位元杂凑值的函数。1995年标准化,但现今安全性已被攻破。
- 碰撞
- 指两笔不同资料产生相同杂凑值的状态。SHA-1 已被实证可刻意制造出碰撞。
- SHAttered
- 指2017年发表的 SHA-1 碰撞攻击的名称。当时实际制作出两份具有相同杂凑值的 PDF。
- 十六进位表示法
- 指以0到F的符号表示数值的方法。SHA-1 的160位元以40个十六进位字符表现。
- SHA-256
- 指产生256位元杂凑值的函数。现今仍被视为安全,新的用途应选用此者以上。
常见问题
不适合用于安全场景(数字签名、证书、密码存储等)。2017 年 SHAttered 攻击已实证碰撞,请改用 SHA-256 或更高级别的算法。
不会。所有哈希计算均在浏览器本地完成,输入内容不会发送到任何服务器。
SHA-1 输出 160 位(40 个十六进制字符),MD5 输出 128 位(32 个十六进制字符)。两者均存在已知碰撞漏洞,均不适合用于安全目的。
闲话 ― SHAttered:以 9.22 京次计算实证的碰撞攻击
2017 年,Google 与荷兰 CWI 研究所合作,历时约 2 年、动用 9.9 万个 CPU 核心,成功生成了两个内容不同但 SHA-1 哈希完全相同的 PDF 文件——这就是"SHAttered"攻击。
此前,SHA-1 碰撞在理论上已被认为可行,但 SHAttered 首次将其付诸实践,迫使各大主流服务加速废弃 SHA-1。GitHub、Subversion 等代码托管平台随即宣布了迁移计划。
尽管如此,部分嵌入式设备和老旧系统仍在使用 SHA-1。完全废弃仍需时日,但在任何新规设计中使用 SHA-1 均不可接受。