加密算法保证了数据的机密性,但是无法保证数据的完整性和身份认证。数字签名技术可以解决这个问题。
实现完整性的手段主要是摘要算法(Digest Algorithm),也就是常说的散列函数、哈希函数(Hash Function)。
摘要算法:能够把任意长度的数据,压缩成固定长度、独一无二的字符串。摘要算法只有算法,没有密钥,加密后的数据无法推断出原文。
常用摘要算法:
- MD5 不够安全
- SHA-1 不够安全
- SHA-2 推荐使用
- SHA224
- SHA256
双方将对称加密中的公钥互换,然后使用私钥对信息的摘要加密,发送给对方,对方使用发送方的公钥即可对该加密信息验证,这种方式成为签名和验签。
数字签名 = 私钥加密 + 公钥解密
然而,数字签名需要发布公钥,任何人都可以发布公钥,此时存在公钥信任问题。需要通过一定机制证明,公钥是某个人的公钥,而不是伪造的公钥。这个机制就是证书。
CA Certificate Authority 证书认证机构就像网络世界的公安局,由它的信誉来给公钥签名,证明公钥不是伪造的。它除了将公钥绑定在持有者身上外,还包含序列号、用途、颁发者、有效时间等信息。将这些内容打包签名,形成数字证书。
知名的 CA 全世界就那么几家,比如 DigiCert、VeriSign、Entrust、Let’s Encrypt 等,它们签发的证书分 DV、OV、EV 三种,可信程度由低到高。