9.7 小结

数字签名算法是公钥基础设施(Public Key Infrastructure, PKI)以及许多网络安全机制(SSL/TLS、VPN等)的基础。数字签名算法包含签名和验证两项操作,遵循“私钥签名,公钥验证”的签名/验证方式,签名时需要使用私钥和待签名数据,其核心算法主要是消息摘要算法。因此,我们可以把数字签名算法近似看成是一种附加了公钥和私钥的消息摘要算法。

数字签名算法主要包括RSA、DSA和ECDSA共3种算法。其中,RSA算法源于整数因子分解问题,DSA和ECDSA算法源于离散对数问题。

RSA算法是数字签名算法中的经典,主要可以分为MD系列和SHA系列两大类。

RSA算法是目前应用最为广泛的非对称加密算法和数字签名算法,在电子商务和产品验证方面均有使用。

DSA算法是继RSA算法后出现的基于DSS的数字签名算法,旨在形成数字签名标准。并且,DSA算法本身不包含任何消息摘要算法。DSA算法主要为后续数字签名算法的形成奠定基础。

Java 6提供了DSA算法实现,在实现层面,我们可以认为DSA算法实现就是RSA数字签名算法实现的简装版。

ECDSA算法相对传统签名算法具有速度快、强度高、签名短等优点,其用途也越来越广泛。微软操作系统的25位的产品密钥中就使用了椭圆曲线签名算法,产品密钥就是签名的十六进制串表示形式。