从https来简单了解加密算法

853 阅读3分钟

先简单的说下https的加密过程

  1. 客户端发出请求 (带有支持的协议,随机数,支持的加密方法)
  2. 服务端响应 (服务器数字证书(公钥,hash算法,加密算法,过期时间...), 随机数,确认加密方法,确定通信协议)
  3. 客户端获取到数字证书,客户端验证是否合法. 然后生成对称密钥,通过服务器公钥进行加密然后发送给服务端
  4. 服务端通过私钥解密获得对称密钥

https的握手本质上可以说交换对称密钥的过程. 其中用到数字签名(数字证书要进行数字签名),非对称加密(服务器公钥加密解密)和对称加密(握手完成之后的通过对称密钥对数据的加密解密)

为什么Charles抓取https包手机一定要安装信任Charles根证书? 因为通过Charles抓包,客户端获取到的数字证书是Charles伪造的. 它也不可能合法.举个例子,你向https://baidu.com发送一个请求. Charles返回给你的数字证书(即使是合法)的域名就对不上了.

数字摘要

CA证书的私钥对数字证书进行加密之前,首写要对其进行数字摘要,就是通过hash函数将明文生成固定长度的密文. 数字摘要算法在验证数据的完整性非常有用. 如果有发送方发送了100W个字符. 要判断这个100w个字符是否完整,只需要判断对应100多位的数字摘要是否相同就行了. (常见的数字摘要算法有md5,sha1,hmac

对称加密

发送 和 接收 双方都使用相同的密钥对数据进行 加密 和 解密。常见的对称加密算法有AES,DES加密. https的对称加密使用的是AES

非对称加密

非对称加密算法,又称为 公开密钥加密算法。它需要两个密钥,一个称为 公开密钥 (public key),即 公钥,另一个称为 私有密钥 (private key),即 私钥。最经典的就是RSA算法,它是地球上最重要的算法!!!

数字签名

数字签名,就是验证自身身份的一种方式。数字签名由签名验证组成. 发送者持有签名(私钥),接收者持有(公钥)来验证其身份。数字签名是由数字摘要算法和非对称加密算法组成.例如https的数字签名,就是先对服务器数字证书进行数字摘要(hash-1),然后通过私钥对生成的数字摘要(hash-1)进行加密发送给客户端。客户端通过公钥解密得到hash-1然后通过hash算法对获取到的数字证书进行数字摘要得到(hash-2).判断hash-1hash-2是否相同就可以知道数字证书是否被劫持和篡改了