公钥密码学、数字签名与数字证书

目录

公钥密码学(非对称密码学)

A 创建一对公钥/私钥对,私钥自己保存,公钥给其他人(例如 B, C, D)。公钥和私钥都能用于加密和解密。B 给 A 发送信息时用 A 的公钥加密,A 收到之后用私钥解密。反之,A 给 B 发送信息时,用私钥加密,B 收到之后用 A 的公钥解密。
在上述场景中,非对称**的作用是加密。

参考
公开**加密

数字签名(Digital Signature)

A 给 B 发送 MessageA 时,先 Hash 将 MessageA 生成一段摘要(Digest, Hash(MessageA) –> DigestA),然后将 DigestA 用私钥加密生成数字签名(Digital Signature, Encrypt(DigestA) –> SignatureA),将 SignatureA 附在 MessageA 之后(MessageA + SignatureA)发送给 B.
B 收到消息之后先用 A 的公钥解密数字签名(Decrypt(SignatureX) –> DigestX),如果能顺利解密,说明消息是由 A 发送的;B 再将 MessageX Hash 生成摘要(Hash(MessageX) –> DigestX2),如果 DigestX 和 DigestX2 相等,说明消息没有被修改过(MessageX == MessageA)。
在上述场景中,非对称**的作用有2个:
1. 签名
2. 判断消息是否完整

数字证书(Digital Certificate)

在上文中,如果 C 用自己的公钥替换了 B 拥有的 A 的公钥,那么 C 用自己的私钥给 B 发消息,B 就误以为是 A, 这样,C 就可以冒充 A 了。
现在的问题是“B 怎么证明拥有的公钥是 A 的而不是 B 的”。所以,这里引入了第三方机构来做认证,即认证机构(CA, Certificate Authority)。具体的工作原理是:
1. A 事先向 CA1 申请数字证书 CertificateA1, CertificateA1 包含了 A 的公钥及 CA1 用私钥加密一些列信息(包括 A 的公钥、颁发机构等一系列信息)之后生成的签名,即 CertificateA1 = 证书(明文,包含 A 的公钥等信息) + 签名(密文,通过 CA1 的私钥加密生成,只有 CA1 的公钥能解开)。由于每个人都可以拥有 CA1 的公钥(浏览器及一些库会内置一些 CA 根证书,根证书中包含了 CA 自身的公钥,见下文),用 CA1 的公钥解密 CertificateA1 中包含的签名,得到证书摘要的 Hash 值,再用证书中的信息算出一个新的 Hash 值,如果二者相同,则表示证书 CertificateA1 是属于 A 的。
2. A 给 B 发送消息时,会附加上 CA1 颁发的数字证书 CertificateA1,现在的消息是 “MessageA + SignatureA + CertificateA1“, B 收到消息之后,用 CA1 的公钥验证 CertificateA1 是否合法,如果合法,则取 CertificateA1 中包含的公钥验证 MessageA 和 SignatureA.

Q. CA 一定值得信任吗?

  • CA 可能出现私钥泄露的情况:

比较常见的还有国际权威的数字证书认证机构,比如 GlobalSign、VeriSign、GeoTrust、Comodo, 一般收取高额费用。也有免费的数字证书认证机构,比如 CAcert 和 StartSSL。在数据传输的安全性上,免费与收费的数字证书并没有区别。 主要区别在于,一旦 CA 用于签发数字证书的私钥泄露,或者数据传输使用的加密算法被**,收费的机构会根据你的付费额度提供巨额的赔偿。免费的数字证书认证机构则不会提供赔偿。数字证书也可以由用户自己制作生成(自签名),但是自签名证书不会被广泛信任,故通常仅用于小范围测试等目的。 [ 数字证书 ]

CA Hierarchy and Root CA

整个 CA 层次结构和 DNS 体系有点像,如图:

公钥密码学、数字签名与数字证书

每一级证书由上一级 CA 签发,即始终信任上一级(Chain of Trust), 如图:

公钥密码学、数字签名与数字证书

那 Root CA 的证书由谁签发呢?答案是:自己签发给自己(self-signed CA certificate),即使用自己的私钥生成签名。浏览器会自带一些受信任的 Root CA 证书,证书中包含了 Root CA 的公钥,以此来校验下一级的证书是否合法。

参考
What is a Digital Signature?
Public Key Infrastructure
X.509 Public Key Certificates
Certificate Authority (CA) Hierarchy, Root CA, Intermediate CA, Issuing CA
浅析数字证书
HTTPS