SHA-256 (SHA-2 256 位版本)
定义
SHA-256 是 SHA-2 哈希家族中输出 256 位摘要的成员,由 NIST FIPS 180-4 规定,是当今 TLS 证书签名和指纹的标准哈希算法。
SHA-256 是 SHA-2 家族中的一员,属于哈希函数,由 NIST 在 FIPS 180-4 中规定,输出 256 位摘要,抗碰撞强度约 128 位。同一家族还有 SHA-384、SHA-512。2010 年代中期,它在 WebPKI 中全面取代了 SHA-1。
为什么重要
SHA-256 在 TLS 中无处不在。大多数证书用 sha256WithRSAEncryption 或 ecdsa-with-SHA256 签名(P-384 证书常用 SHA-384);TLS 1.2 的 PRF 通常基于它,TLS 1.3 中 TLS_AES_128_GCM_SHA256 等套件用它做 HKDF;证书透明度日志用它构建 Merkle 树;证书指纹和 DANE 的 TLSA 记录一般也基于它。已知的量子算法对哈希函数只有有限的加速,SHA-256 不会像 RSA、ECC 那样受到根本威胁。国密 SM3 与它同为 256 位输出,常被拿来对比。
例子
计算证书指纹,以及证书公钥的 SHA-256 哈希(即 TLSA 3 1 1 记录使用的值):
openssl x509 -in example.com.crt -noout -fingerprint -sha256
openssl x509 -in example.com.crt -noout -pubkey | openssl pkey -pubin -outform DER | openssl dgst -sha256
证书指纹每次续期都会变,而只要继续沿用同一把私钥,公钥哈希就保持不变。
常见误区
- "SHA-256 证书"是一种特殊产品。 SHA-256 只是签名所用的哈希算法,今天签发的所有公开信任证书都使用 SHA-256 或更强的算法。
- SHA-256 就是 256 位加密。 它是哈希函数而不是加密算法,不加密任何数据。
- 量子计算机会像破解 RSA 一样破解 SHA-256。 Shor 算法不适用于哈希函数,Grover 类搜索带来的加速对 SHA-256 来说仍留有充足余量。