无论输入多大,SHA-256 摘要都是 32 字节;输入中只要改变一位,输出大约有一半的位会改变。凡是需要逐字节完整性的地方,都用摘要来标识内容:容器镜像(sha256:…)、Git 对象、子资源完整性属性(sha384-…)、锁文件中的 integrity 字段、HTTP Content-Digest(RFC 9530)、JWK 指纹和证书指纹。
签名的对象是摘要:ECDSA 和 RSA 先对消息计算哈希,CMS 对内容摘要连同已签名属性一起签名,JWS 对 header.payload 的摘要签名。只有当作为参照的摘要本身来自可信来源时,摘要才能保护数据;在同一台服务器上把 sha256sum 的输出放在下载文件旁边,只能防止文件损坏,无法防范服务器被入侵。
始终把算法与摘要值一起记录(sha256:…、multihash、DigestInfo 中的 OID);当摘要充当秘密值时,要用常量时间比较;在安全用途中,不要把摘要截断到抗碰撞强度低于 128 位。