来源于公司的 Tecktalk,做点小笔记!
对称算法:算法公开,计算量小,加密速度快,比如 AES
非对称算法:比如 RSA
- 通常加密解密的速度比较慢,适合偶尔发送数据的场合。优点是密钥传输方便
- 私钥加密公钥解
- 公钥加密私钥解
非对称算法应用场景
- 使用秘钥加密,公钥解密,能确保明文的正确性。此时秘钥加密就相当于签名,公钥解密就相当有验签
- 使用公钥加密,私钥解密,能确保明文的安全性
网络通信
- 服务端与客户端之间的正常通信,如果想保密,那么加密是必不可少的。一般而言,普通的通信数据量不少,往往需要比较高效的加密方式。
- 单纯使用对称加密,第三方没有秘钥 K,获得密文后无法解密得明文。加密速度也快,但问题就是怎么分配密钥呢。
- 非对称加密解密的速度比较慢,所有信息都这样加密,十分不值得这么做。
- 如果用非对称加密传输 “对称加密的秘钥信息”,然后再用对称加密来通信,这样既有加密速度快的优点,又实现了安全方便管理密钥的优点。
理想通信
- 客户端向服务端请求签名
- 服务端返回信息 + RSA 秘钥对信息 hash 值的加密(签名)
- 客户端验签后,创建对称加密需要的数据,通过公钥加密发给服务端,之后双方根据对称加密来通信
理想通信存在的问题
- 客户端如何确定拿到的公钥,一定是服务端的公钥呢?
- “伪装者”自己生成一对公钥和私钥,然后把公钥发送给“客户”,自己保留私钥,由于“客户”可以用伪装者的公钥解密黑客的私钥加密的内容,“客户”就会相信“伪装者”是“服务端”,服务端怎么自证?
CA 认证:如果有一个权威机构证明这个服务端是真的服务端,那这个服务端大概率不是“伪装者”,这取决于这个权威机构的可信度。在互联网中,这种权威机构就是 CA(证书颁发机构)。
- 获得证书
- 用户向 CA 申请
- CA 确认用户身份,确认用户的公钥,签字后形成证书
- 用户获得只属于自己的数字证书
- 验证证书
- 查看 CA 是否可信
- 验证证书是否被修改
- 验证证书是否正确
数字证书的内容
- 证书的发布机构
- 证书的有效期
- 公钥(服务端)
- 主体(证书所有者)
- 签名所使用的算法(数字证书加密算法)
- 指纹以及指纹算法
指纹以及指纹算法:实际就是一个 hash 值和一个 hash 算法。这两个值都使用发布机构的秘钥加密了。
可以通过发布机构的数字证书,获得发布机构的公钥,然后解开获得 hash 值与 hash 算法。
HTTPS 的流程
- 客户端发起 HTTPS 请求,声明自己支持的内容
- 服务器响应,选定加密规则并把数字证书发给客户端
- 客户端验证证书.通过后,生成对称秘钥
- 使用服务端的公钥加密秘钥,结合“握手结束通知”一起发给服务端
- 服务端解密得秘钥,发送“服务器握手结束通知”发给客户端
- 后续服务器与客户端的交互以上面得到的秘钥进行加密,其他的与 HTTP 协议相同。