什么是 SHA 加密?SHA-1 与 SHA-2 对比
SHA 加密(安全哈希算法)是一组密码哈希函数,用于为数字签名、证书和加密货币提供安全的数据哈希能力。SHA-1 尽管过去应用广泛,如今已被认定存在安全弱点,被安全性更强的 SHA-2 取代,后者包含 SHA-256、SHA-512 等版本。更新的变体 SHA-3 采用先进结构,进一步提升了安全性。SHA 加密是 TLS/SSL 协议、安全通信和现代数字安全框架不可或缺的组成部分。请始终为项目选择合适的 SHA 算法,以保障充分的安全防护。
什么是 SHA 加密?
安全哈希算法(SHA)是由美国国家标准与技术研究院(NIST)发布的一组密码哈希函数,属于美国联邦信息处理标准(FIPS)。SHA 加密可用于多种场景,包括数据哈希、证书文件处理,以及比特币等加密货币中的其他密码学用途。这些哈希算法为现代互联网基础设施的核心安全提供支撑。
你最常接触到的 SHA 函数族是 SHA-1 和 SHA-2:
SHA-1是一种 160 位哈希函数,由 MD5 算法的相关研究发展而来。SHA-1 哈希最初由美国国家安全局(NSA)设计,作为其数字签名算法的组成部分。但后续研究发现 SHA-1 存在密码学弱点,2010 年之后,该标准不再被批准用于绝大多数密码学场景。由于 SHA-1 已无法满足当前的网络安全标准,SHA-2 已成为应用最广泛的 SHA 函数。
SHA-2是在发现针对 SHA-1 的低成本暴力破解攻击后不久开发的。它是由两个结构相似、块大小不同的哈希函数组成的函数族,即 SHA-256 和 SHA-512。SHA-256 和 SHA-512 的核心区别在于字长:SHA-256 使用 32 字节字,而 SHA-512 使用 64 字节字。这两个标准还有各自的修改版本,包括 SHA-224、SHA-384、SHA-512/224 和 SHA-512/256。当前最常用的 SHA 函数是 SHA-256,在当前的计算机处理能力下,它可以提供充足的安全防护。SHA-2 采用 Merkle–Damgård 结构,搭配 Davies–Meyer 压缩函数。
除了这些较为知名的类型外,你可能还会接触到另外两个 SHA 变体族:SHA-0 和 SHA-3:
SHA-0是我们现在对 1993 年以 SHA 算法为名发布的 160 位(即 20 字节)哈希函数基础版本的称呼。该哈希函数发布后不久,就因发现重大缺陷而停止使用;在对底层理论进一步完善后,SHA-1 正式问世。
SHA-3是当前增长速度最快的 SHA 加密技术。它与其他 SHA 算法的区别在于采用了新开发的 Keccak 哈希函数。它支持的哈希长度与 SHA-2 相同,但二者存在显著结构差异。SHA-3 的独特之处在于其整体结构基于广泛的随机函数生成机制,通常支持所有随机排列,因此可以吸收(即输入)任意长度的数据,再挤出(即输出)处理后的数据。这种机制生成的输出具备有效的伪随机性,理论上安全性更高。
SHA-1 与 SHA-2 的区别是什么?
SHA-1 和 SHA-2 的区别在于,对于任意给定输入,其生成的消息摘要(哈希后的内容)的“长度”即“位数”不同。摘要的位数越多,通过暴力破解手段攻破的难度就越高——正是这类攻击推动了 SHA 算法从 SHA-1 迭代升级。对于相同输入,SHA-2 生成 256 位摘要,而 SHA-1 函数生成 160 位摘要。由于这一差异,SHA-1 的安全性更弱,有时会为两个不同的数据值生成相同的摘要;而 SHA-2 可为每个数据值生成唯一摘要,因为它的组合数量极大(256 位函数共有 2^256 种可能的组合)。
SHA 加密有哪些应用场景?
SHA 广泛应用于各类安全协议和应用中,包括传输层安全(TLS)、安全套接字层(SSL)、数字签名、S/MIME 邮件证书、PGP 和 IPsec。美国部分政府应用出于保护敏感数据的需求,会通过法律强制要求使用这类加密。此外,Google、Microsoft、Mozilla 等浏览器厂商已经开始推荐使用 SHA-3,停止使用 SHA-1 算法。
SHA 最重要的用途之一是在 SSL/TLS 协议中,作为数字签名的哈希算法使用。
SSL 和 TLS 是密码学协议,用于在互联网上为客户端和服务器建立安全通信通道。TLS/SSL 证书属于一类X.509 证书,用于向浏览器验证服务器的身份。
部署此类证书的目的不仅是提供身份认证,还要确认客户端浏览器所通信的远端服务器的真实身份。证书中包含Web服务器的相关信息,以及与之关联的密钥文件。证书若要被正常接受、在无任何安全错误的前提下建立SSL/TLS会话,必须包含对应的DNS信息且处于有效期内。
SHA加密是如何工作的?
顾名思义,SHA是一种哈希算法。任意数据经过该算法处理后,都会生成一个唯一的哈希值,无法被其他任何数据复现。生成的数字签名同样具备唯一性,因为它由数据本身计算出的哈希值生成。在实际通信场景中会使用对称加密技术,即用于哈希计算或加密数据的同一密钥也会被用于解密,这一机制使得公钥可以公开披露,同时不会危及私钥的安全。
大多数哈希算法都基于最初的MD4哈希算法开发,因此具备相似的运行逻辑。
任意类型哈希运算的基础流程为:先将输入内容(即原始消息)转换为二进制格式,再通过一系列基于标准晶体管与总线基础运算的简单函数处理,这类运算包括AND(与)、XOR(异或)、NOT(非)、Rotate(循环移位)、OR(或)。最终得到的哈希值是具备唯一性但无实际语义的十六进制值。哈希计算需要执行这些简单运算,这也是人们可以设计专用集成电路(ASIC)来优化哈希运算性能的原因之一。
针对SHA-256哈希运算,专门设计的新型芯片可以提升从输入内容生成哈希值的速度。在比特币挖矿场景中,这意味着每秒可完成更多哈希计算,从而提升获得挖矿奖励的概率。
SHA是安全的吗?
SHA-1(安全哈希算法1)诞生于1995年,自2005年起就已被证实存在漏洞存在理论攻击风险。美国国家标准与技术研究院自2010年起禁止美国联邦机构使用SHA-1,数字证书颁发机构(CA)则自2016年1月1日起不得签发采用SHA-1签名的证书,不过存在部分豁免情形。
尽管各方已采取措施在部分领域逐步淘汰SHA-1的使用,该算法仍在多个场景中被广泛使用,包括以下场景的校验:
- 信用卡交易
- 电子文档
- 电子邮件PGP/GPG签名
- 开源软件仓库
- 备份文件
- 软件更新
这些豁免场景带来了更高的暴露风险,因此业界施加了很大压力,推动相关场景最终迁移至安全性更高的标准。包括Google Chrome在内的多款浏览器已开始向访问者提示所有采用SHA-1签名的证书为不安全证书。
从定义层面来看,SHA系列算法是安全的,但随着新版本迭代推出,各版本对应的安全等级也在逐步提升。如前所述,SHA-0的已知漏洞多于SHA-1,而SHA-1的已知漏洞又多于SHA-2。随着敏感数据攻防双方的对抗持续升级,这一趋势未来仍将延续。
我应该使用哪种SHA算法?
为了保障用户的数据加密安全,您应始终选择最适配当前项目的SHA算法。目前最常用的是SHA-2系列算法,但其他SHA版本也有各自适用的场景。并非所有SHA证书都能兼容每一类服务器,因此除了解自身业务场景的需求,掌握所用设备的兼容情况,对搭建安全环境至关重要。
常见服务器兼容SHA-2数字证书所需的产品版本如下:
- Apache Server:2.0.63及以上版本
- IBM HTTP Server:8.5(随Domino 9捆绑提供)
- 基于Java的产品:Java 1.4.2及以上版本
- Mozilla:基于NSS的产品3.8及以上版本
- Oracle WebLogic:10.3.1+
如前所述,SHA-256 是目前应用最广泛的 SHA 算法。但随着计算机处理能力的提升,SHA-256 将愈发易受攻击,和它的前代算法情况类似。及时了解安全哈希算法(Secure Hash Algorithms)的最新动态,是妥善加密数据、避免风险暴露的最佳方式。
既然您已经对 SHA 加密有了更多了解,欢迎立即联系我们,进一步了解我们的产品如何为您的网站提供防护,使其免遭安全威胁。