Better

Ethan的博客,欢迎访问交流

网络通信的加解密

来源于公司的 Tecktalk,做点小笔记!

对称算法:算法公开,计算量小,加密速度快,比如 AES

非对称算法:比如 RSA

  • 通常加密解密的速度比较慢,适合偶尔发送数据的场合。优点是密钥传输方便
  • 私钥加密公钥解
  • 公钥加密私钥解

非对称算法应用场景

  • 使用秘钥加密,公钥解密,能确保明文的正确性。此时秘钥加密就相当于签名,公钥解密就相当有验签
  • 使用公钥加密,私钥解密,能确保明文的安全性

网络通信

  • 服务端与客户端之间的正常通信,如果想保密,那么加密是必不可少的。一般而言,普通的通信数据量不少,往往需要比较高效的加密方式。
  • 单纯使用对称加密,第三方没有秘钥 K,获得密文后无法解密得明文。加密速度也快,但问题就是怎么分配密钥呢。
  • 非对称加密解密的速度比较慢,所有信息都这样加密,十分不值得这么做。
  • 如果用非对称加密传输 “对称加密的秘钥信息”,然后再用对称加密来通信,这样既有加密速度快的优点,又实现了安全方便管理密钥的优点。

理想通信

  1. 客户端向服务端请求签名
  2. 服务端返回信息 + RSA 秘钥对信息 hash 值的加密(签名)
  3. 客户端验签后,创建对称加密需要的数据,通过公钥加密发给服务端,之后双方根据对称加密来通信

理想通信存在的问题

  • 客户端如何确定拿到的公钥,一定是服务端的公钥呢?
  • “伪装者”自己生成一对公钥和私钥,然后把公钥发送给“客户”,自己保留私钥,由于“客户”可以用伪装者的公钥解密黑客的私钥加密的内容,“客户”就会相信“伪装者”是“服务端” ,服务端怎么自证?

CA 认证:如果有一个权威机构证明这个服务端是真的服务端,那这个服务端大概率不是“伪装者”,这取决于这个权威机构的可信度。在互联网中,这种权威机构就是 CA(证书颁发机构)。

  • 获得证书
    1. 用户向 CA 申请
    2. CA 确认用户身份,确认用户的公钥,签字后形成证书
    3. 用户获得只属于自己的数字证书
  • 验证证书
    1. 查看 CA 是否可信
    2. 验证证书是否被修改
    3. 验证证书是否正确

数字证书的内容

  • 证书的发布机构
  • 证书的有效期
  • 公钥(服务端)
  • 主体(证书所有者)
  • 签名所使用的算法(数字证书加密算法)
  • 指纹以及指纹算法

指纹以及指纹算法:实际就是一个 hash 值和一个 hash 算法。这两个值都使用发布机构的秘钥加密了。

可以通过发布机构的数字证书,获得发布机构的公钥,然后解开获得 hash 值与 hash 算法。

HTTPS 的流程

  1. 客户端发起 HTTPS 请求,声明自己支持的内容
  2. 服务器响应,选定加密规则并把数字证书发给客户端
  3. 客户端验证证书.通过后,生成对称秘钥
  4. 使用服务端的公钥加密秘钥,结合“握手结束通知”一起发给服务端
  5. 服务端解密得秘钥,发送“服务器握手结束通知”发给客户端
  6. 后续服务器与客户端的交互以上面得到的秘钥进行加密,其他的与 HTTP 协议相同。


留言