被广泛认可的非对称密钥算法已取代其前身,在响应需求的同时提供了更好的安全性与性能。多年来计算机科学领域开发了许多算法,但获得最广泛支持的当属 RSA、DSA,以及如今的 ECC——后者还可与 RSA 结合,提供更强的安全保护。

要使公钥密码系统运作,需要一组易于单向处理、却难以逆向运算的算法。这套标准自 20 世纪 70 年代起便被使用,其基础是两个大素数的相乘。

Diffie-Hellman、RSA、DSA、ECC 与 ECDSA 的区别

下面我们来看看用于通过加密技术为敏感信息进行数字签名的主要非对称加密算法。

Diffie-Hellman(迪菲-赫尔曼)

首个基于素数、以安全密钥为核心的算法名为 Diffie-Hellman 算法,于 1977 年申请专利。Diffie-Hellman 算法是一种未经认证的协议,但确实要求通信双方共享一个"秘密"密钥。双方先约定一个共享的任意起始数字,然后各自选择一个保密的数字。在密钥交换的关键环节,每一方将自己的秘密数字与公开数字相乘,然后交换结果;当各方再将交换所得的数字与其私有数字相乘时,结果应当一致,从而证明双方的来源可信。从计算角度看,第三方窃听者很难推导出这些私有数字。然而,由于缺乏认证,Diffie-Hellman 容易受到中间人(Man-in-the-middle)攻击——第三方可以拦截通信,伪装成合法的通信参与者,同时篡改或窃取信息。

RSA(Rivest Shamir Adleman)

RSA 于 1983 年申请专利,至今仍是应用最广泛的数字安全系统,与 Diffie-Hellman 同一年发布,以其发明者 Ron Rivest、Adi Shamir 与 Leonard Adleman 的姓氏命名。RSA 通过组合两种算法获得了额外的安全性:一种应用于非对称密码学(即 PKI,公钥基础设施),另一种提供安全的数字签名。尽管两个组件的基础数学原理相似,且输出的密钥格式相同。

RSA 算法包含三个主要过程:密钥对生成、加密与解密。密钥对包括公钥与私钥的生成。正因这一环节,RSA 常被称为首个公钥数字安全系统。公钥一旦生成,便通过不安全通道传输,而私钥则始终保密、不与任何人共享。数据用公钥加密,却只能用私钥解密。密钥通过大素数相乘生成。如前所述,即便更大的数字相乘也快速简便,素数码加密因此在数十年间成为标准。为增加一层安全,获取数字签名的方法成为 RSA 的又一改进:为简化流程,发送方生成消息的哈希值,该哈希值使用与加密数字相同的指数运算;接收方在接收端进行同样的哈希运算,得到相同的数字,从而确认签名的安全性。

其他协议依赖 RSA 数字签名,因此随着其他认证与安全方案寄生于其上,RSA 在安全领域具有极强的生命力。然而,RSA 数字签名存在一个漏洞,可能导致暴力破解攻击解码私钥,并暴露于旁路分析(side-channel analysis)、时序攻击(timing attacks)等特定攻击类型之下。此外,RSA 存在计算开销,尤其在移动与平板环境中,性能问题较为突出。密钥长度也是一大考量:由于密码学与计算资源的进步,1024 位密钥已不足以抵御多种攻击,RSA 密钥如今必须达到 2048 位;政府及许多机构现在都要求最低 2048 位的密钥长度。

DSA(数字签名算法)

1991 年,美国国家安全局(NSA)开发了数字签名算法(DSA),作为 RSA 算法的替代方案。美国国家标准与技术研究院(NIST)将其确立为美国政府批准并认证的加密方案,提供与 RSA 同等的安全级别,但采用不同的数学算法进行签名与加密。与 RSA 一样,DSA 也是一种非对称加密方案(PKI),生成一对密钥——一个公钥、一个私钥。签名在私密环境下创建,却可在公开环境下识别;其好处在于只有单一授权方能创建签名,而任何其他方都能用公钥验证签名。因此,DSA 在签名时更快、验证时更慢,若客户端存在更多性能问题,DSA 是明智之选。在某些服务器系统(如 Apache)下,DSA 与 RSA 可协同运行,提供额外保护。然而,由于二者如此相似,DSA 与 RSA 易遭受同类攻击,而 RSA 已转向更长的密钥,DSA 尚未如此。尽管在理论上可创建更长的 DSA 密钥,但目前仍未实现,因此尽管在其他方面与 RSA 相当,RSA 仍是首选的加密方案。

ECC 与 ECDSA

椭圆曲线密码学(ECC,Elliptic Curve Cryptography)或椭圆曲线数字签名算法(ECDSA)在被应用于密码学之前,已在数学界被认识与研究达 150 年之久;Neal Koblitz 与 Victor S. Miller 于 1985 年首次提出。然而在 2005 年,NSA 发布了一套新的美国政府认可的安全算法,其中也包含 ECC,该发布名为"Suite B"。

椭圆曲线密码学是一种为提升安全性与更稳健的网络性能而开发的新兴密码算法。一些研究者声称,ECC 用 164 位密钥即可提供与其他系统用 1024 位密钥相当的强大安全性。随着移动设备被用于高度私密的交易,更安全、低开销的加密方案变得极受青睐。ECC 密码学有助于建立与 RSA 或 DSA(两种应用最广的加密方法)相当甚至更高的安全级别——而且它以更少的计算开销达成这一目标,所需处理能力更低,并早已超越移动领域的应用范围。ECDSA(椭圆曲线数字签名算法)基于 DSA,但采用另一种数学方法进行密钥生成。ECC 本身是一个独立的数学方程,而 ECDSA 是应用于 ECC、使其适用于安全加密的算法。与 RSA 和 DSA 一样,它是另一种非对称密码方案,但在 ECC 中,方程通过在椭圆曲线上的点进行运算来定义公钥/私钥对,而非将其描述为极大素数的乘积。