数字签名
是什么
用私钥加密散列值生成数字签名
特点
1. 完整性校验
2. 源认证
3. 不可否认性

公钥交换
密钥管理面临的挑战
在任何基于RSA服务之前,一个实体需要真实可靠的获取其他实体的公钥。
1. 通过非信任的通道,公钥交换必须是安全的。
2. 在密钥交换的过程中,公钥必须不能够被截获和更改。
3. 交换呈现Full Mesh的复杂度。
4. 由最终用户来确认密钥有效性,非常不靠谱。
证书系统解决的问题
证书系统只解决一个问题,就是安全的公钥交换
受信任介绍
1. A 和 B 是互信的,B 和 C 是互信的
2. B 向 C 介绍 A
2.1 B 将 A 的公钥PubA, hash出散列值HashA
2.2 用 B 的私钥对散列值HashA做数字签名得到 SignA
2.3 将 PubA + SignA 发送给 C
3. C 验证 B 发来的信息
3.1 C 使用 B 的公钥,解密数字签名 SignA, 得到 HashA
3.2 C 计算 PubA 的散列值 HashA1
3.3 验证 HashA 是否和 HashA1 相等,相等则 C 就信任了 A 的公钥,PubA


证书授权颁发机构(CA)
| 概念 | 对照 |
|---|---|
| 证书 | 身份证 |
| CA | 颁发身份证的单位:公安局 |
| PKI | 和颁发证书有关的所有配套的软件、硬件、政策等,统一叫PKI |

数字证书
申请证书
1. 需要个人信息
2. 需要个人公钥
1. CA 将 个人信息 + 个人公钥,hash 获取 散列值 HashStr
2. 使用 CA 私钥加密 HashStr,生成签名 SignStr
3. 将 个人信息 + 个人公钥 + 签名,放在一起,生成 证书


交换证书
证书只做一件事,安全的公钥交换
1. A 拿到 C 的证书(C个人信息+C公钥+CA签名)
2. 使用 CA 的公钥解密 CA签名,生成 C个人信息+C公钥 的散列值 HashC
3. 使用明文 C个人信息+C公钥,计算出散列值 HashC1
4. 对比 HashC 和 HashC1 如果相等,就信任 C 的公钥

举例 IKE 数字签名认证
1. 发起方A
1.1 将关键信息hash得到散列值HashInfoA
1.2 使用A私钥给HashInfoA做数字签名
1.3 数字签名 + 发起方证书(发起方信息+发起方公钥+CA签名) 打包发给 接收方B
2. 接收方B
2.1 证书校验:使用CA公钥解密 发起方证书里面的CA签名,得到 发起方信息+发起方公钥 的散列值 HashA
2.2 证书校验:将明文 发起方信息+发起方公钥 hash 获取散列值 HashA1
2.3 证书校验:比较 HashA 和 HashA1,相等说明证书校验通过
2.4 证书校验通过后,接收方B 就信任了 发送方A的公钥
2.5 使用A的公钥,解密A发送过来的数字签名,得到 HashInfoA
2.6 自己本地将关键信息做hash得到散列值 HashInfoA1
2.7 比较 HashInfoA 和 HashInfoA1 ,相等则说明重要信息匹配成功
