关于SSL,TLS,对称加密,非对称(公私钥)加密等的学习笔记。
常用场景
HTTPS
结合了非对称加密和对称加密,公钥私钥主要用于传输对称加密的秘钥,真正的双方大数据量通讯都是通过对称加密进行。
客户端 | 服务端 | 通讯内容 |
---|---|---|
Client Hello | TLS版本,候选加密套件,候选压缩算法,随机数用于之后协商对称密钥 | |
Server Hello | 选择使用的协议版本、加密套件、压缩算法,及随机数 | |
Server Hello Done | 发送服务端证书 | |
验证证书:用本地CA公钥验证 | ||
Client Key Exchange | 之后产生随机数Pre-master,发送Client Key Exchange,用证书公钥加密 | |
Pre-master | 通过三个随机数:自己的、对方的和Pre-master,在客户端和服务端产生相同的对称密钥 | |
Change Cipher Spec | ||
Encrypted Handshake Message | 发送协商好的参数并用协商密钥加密,用于数据和握手验证 | |
Change Cipher Spec + Encrypted Handshake Message | ||
避免重放和篡改: 引入timestamp和nonce随机数。
密钥交换算法
常用算法:
名称 | 安全性 | 备注 |
---|---|---|
RSA | 低,有RSA私钥就可以解密 | 已有公私钥,只执行一次模幂 |
DHE | 较高,RSA私钥泄露不影响 | 每次随机生成大素数,模幂两次 |
ECDHE | 很高 | 每次生成大数,计算椭圆方程的乘法两次,得到公钥 |
说明:
- 如果开启完全正向保密协议/perfect forward secrecy,客户端和服务端会使用Diffie-Hellman (DH)协商一个共享会话密钥; 服务端私钥只用来签名.
- 如果不支持完全正向保密协议(假定服务端使用RSA密钥), 客户端会使用服务端公钥加密共享会话密钥, 同理也就可以使用服务端私钥解密(被服务端或Wireshark).