视频地址: https://www.bilibili.com/video/BV1w4411m7GL
对称加密
加密 f 1 ( key , data ) = X f_1(\text{key},\text{data})=X f1(key,data)=X
解密 f 2 ( key , X ) = d a t a f_2(\text{key},\text{X})=data f2(key,X)=data
多个客户端一般会共享一个key
黑客作为客户端也能得到key
非对称加密
使用公钥加密 f 1 ( public key , data ) = Y f_1(\text{public key}, \text{data})=Y f1(public key,data)=Y
使用私钥解密 f 2 ( secret key , Y ) = data f_2(\text{secret key}, Y)=\text{data} f2(secret key,Y)=data
或者
使用私钥加密 f 3 ( secret key , data ) = Y f_3(\text{secret key}, \text{data})=Y f3(secret key,data)=Y
使用公钥解密 f 4 ( public key , Y ) = data f_4(\text{public key}, Y)=\text{data} f4(public key,Y)=data
黑客能拿到公钥, 所以能对返回的数据解密, 但是没有私钥不能对发送的数据解密.
两者结合: HTTPS通信
客户端和服务器先使用非对称加密协商一个key, 然后再用对称加密传输数据
中间人攻击
CA(证书认证)
CA也有一对公钥和私钥. 服务器的公钥需要先用CA的私钥签名得到license
CA的公钥和私钥分别命名为cpk和csk
CA大部分是收费的
协商过程
上面协商key的过程其实很复杂
- Client → \to →Server 发送支持的SSL版本, 使用的非对称算法, 随机数①
- Server → \to →Client 确定使用的SSL版本, 使用的对称算法, 随机数②, 证书
- Client 进行证书认证
- Client 哈希(①,②)赋值给XX, Client → \to →Server 发送随机数③和XX
- Server验证 XX == 哈希(①,②), 然后使用任意函数(①, ②, ③)得到key
- Server → \to →Client hash(①,②,随机数④)赋值给zz
- Client 验证hash(①,②,④)==zz, 然后hash(①,②,③)得到key