http学习 对称加密和非对称加密

SSL/TLS

HTTPS 的安全性是由 TLS 来保证的。

HTTPS 名字里的“S”,它把 HTTP 下层的传输协议由 TCP/IP 换成了 SSL/TLS,由“HTTP over TCP/IP”变成了“HTTP over SSL/TLS”,让 HTTP 运行在了安全的 SSL/TLS 协议上,收发报文不再使用 Socket API,而是调用专门的安全接口。

SSL 即安全套接层(Secure Sockets Layer),在 OSI 模型中处于第 5 层(会话层)。

实现机密性最常用的手段是“加密”(encrypt)。

按照密钥的使用方式,加密可以分为两大类:对称加密和非对称加密。

 

对称加密

“对称加密”很好理解,就是指加密和解密时使用的密钥都是同一个,是“对称”的。

对称加密只使用一个密钥,运算速度快,密钥必须保密,无法做到安全的密钥交换,常用的有 AES 和 ChaCha20;

 

非对称加密

为了解决传输“加密密钥的密钥”的问题,出现了非对称加密(也叫公钥加密算法)。

它有两个密钥,一个叫“公钥”(public key),一个叫“私钥”(private key)。两个密钥是不同的,“不对称”,公钥可以公开给任何人使用,而私钥必须严格保密。

公钥和私钥有个特别的“单向”性,虽然都可以用来加密解密,但公钥加密后只能用私钥解密,反过来,私钥加密后也只能用公钥解密。

公钥可以任意分发而私钥保密,解决了密钥交换问题但速度慢,常用的有 RSA 和 ECC;

 

混合加密

虽然非对称加密没有“密钥交换”的问题,但因为它们都是基于复杂的数学难题,运算速度很慢,即使是 ECC 也要比 AES 差上好几个数量级。如果仅用非对称加密,虽然保证了安全,但通信速度有如乌龟、蜗牛,实用性就变成了零。

把对称加密和非对称加密结合起来就得到了“又好又快”的混合加密,也就是 TLS 里使用的加密方式。

这就是现在 TLS 里使用的混合加密方式,其实说穿了也很简单:

  • 在通信刚开始的时候使用非对称算法,比如 RSA、ECDHE,首先解决密钥交换的问题。
  • 然后用随机数产生对称算法使用的“会话密钥”(session key),再用公钥加密。因为会话密钥很短,通常只有 16 字节或 32 字节,所以慢一点也无所谓。
  • 对方拿到密文后用私钥解密,取出会话密钥。

这样,双方就实现了对称密钥的安全交换,后续就不再使用非对称加密,全都使用对称加密。

 

 

小结

  • SSL 就是通信双方通过非对称加密协商出一个用于对称加密的密钥

  • 混合加密:用非对称加密,加密对称加密的私钥。对称加密的私钥又是会话级的随机数=一次会话一个私钥。就算别人baoli破解也只是破解了一个会话。

 

 

 

问答

1、非对称加密为什么慢,非对称加密除了慢外还有什么缺点

答:非对称加密基于大数运算,比如大素数或者椭圆曲线,是复杂的数学难题,所以消耗计算量,运算速度慢。

除了慢,可能还有一个缺点就是需要更多的位数,相同强度的对称密钥要比非对称密钥短。

对称密钥一般都128位、256位,而rsa一般要2048位,不过椭圆曲线的会短一点。

 

2、在混合加密中用到了公钥加密,因为只能由私钥解密。那么反过来,私钥加密后任何人都可以用公钥解密,这有什么用呢?

答:私钥加密用公钥解是为了做身份认证,不可抵赖,因为默认私钥只有持有人知道

 

3、对称加密为啥会有密钥交换的过程,对称加密就一个密钥,客户端服务端各保存一份就可以了,为啥要传输交换呢?

答:关键是“如何各保存一份”,两边加密通信必须要使用相同的密钥才行,不交换如何才能保持一致呢?


而且简单的一对一还好说,现实情况是网站要面对成千上万的用户,如何与这么多的客户端保持一致?

还有,如果总使用一个密钥,就很容易被破解,风险高,需要定期更换,最好是一次一密。

所以,为了安全起见,每次通信前双方都要交换密钥,这样就实现了“各保存一份”,用完就扔掉,下次重新交换。

每次会话是指的TCP 长连接期间。

 

4、在实际传输过程中,大家(包括其他人)怎么知道双方通信用的哪个公钥,是传输过程公开的,大家都可以获取看到的吗?如果大家都知道了,用私钥加密的内容都能被别人用公钥解密,这部分内容是不是不安全?

答:公钥的传输必须使用证书,把公钥和持有者身份绑在一起,否则就会有信任问题,容易被别人冒充。

私钥加密的作用是签名,实现身份认证而不是数据保密,签名是公开的,所以不存在安全问题。

 

posted @ 2022-02-10 19:03  r1-12king  阅读(737)  评论(0编辑  收藏  举报