HTTPS 加密的细节

HTTPS安全连接的建立过程中,首先是客户端生成Random_C后在Client_hello中明文传送到服务器,服务器也生成一个随机数Random_SSever_hello中明文传送到客户端, 之后是协商秘钥的生成,本文主要是讲述HTTPS通信安全中加密的细节!

一、协商秘钥生成的细节

协商秘钥的生成过程是:
协商秘钥的生成
  • 客户端将之前确定好的TLS协议版本号放在前2个字节后面拼接一个46个字节的随机数,得到48个字节的 Pre-master, 使用RSA或者DH算法使用服务器公钥加密Pre-master传送给服务器.
    --> 使用Pre-master结合随机数Random_C、随机数Random_S通过 PseudoRandomFunction (PRF) 伪随机函数混合三个随机数得到 Master secret.
    --> Master secret结合 Random_CRandom_S两个随机数继续使用PRF 函数混合得到 key material
  • 服务器拿到Pre-master, 跟客户端使用一样的方式计算得到key material.
1.如何防止客户端、服务器生成的随机数不完全随机的?

首先Pre-master就是一个随机数,加上Random_CRandom_S就是3个随机数,将这3个随机数使用PRF函数混合后生成Master secret,随机性得到加强,再次使用PRF函数混合Master secretRandom_CRandom_S,这样计算得到的协商秘钥key material随机性就已经非常高了。

2.Pre-master是怎么生成的?

在网上找的一个回答How is the Premaster secret used in TLS generated?
为什么Pre-master前两个字节要是协议版本号?
在发送client_hello和sever_hello报文时,其实是明文的,这个时候如果是有中间人攻击,把客户端支持的协议版本号降低为安全性更低的版本的协议比如:TLS1.1 -> SSL 1.0,那么后续的通信使用了更低安全性的加密算法,也存在安全隐患,所以这个Pre-master前两个字节包含协议版本号然后再用公钥加密传给服务器是为了保证安全性的。


一、非对称加密算法对比

非对称加密的特点:有唯一的一对私钥和公钥,公钥加密内容只有私钥能解密,私钥加密内容只有公钥能解密。非对称加密算法消耗时间多于对称加密算法。
常见的非对称加密算法有:RSA、ECC、DH算法等,我们的CA证书上可以看到证书本身使用的加密算法如下:目前大多数还是RSA算法的证书,下面是一个ECC的证书例子。


HTTPS 加密的细节_第1张图片
ECC加密算法.png
  • RSA:
    将两个大素数相乘十分容易,但想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥,特点:

随着分解大整数方法的进步及完善、计算机速度的提高以及计算机网络的发展,为了保障数据的安全,RSA 的密钥需要不断增加,但是,密钥长度的增加导致了其加解密的速度大为降低,硬件实现也变得越来越难以忍受,这对使用 RSA 的应用带来了很重的负担,因此需要一种新的算法来代替 RSA。

  • ECC
    根据有限域上的椭圆曲线上的点群中的离散对数问题 ECDLP,ECDLP 是比因子分解问题更难的问题,它是指数级的难度。相比RSA有优势:
    抗攻击性强
    CPU 占用少
    内容使用少
    网络消耗低
    加密速度快

随着安全等级的增加,当前加密法的密钥长度也会成指数增加,而 ECC 密钥长度 却只是成线性增加。例如,128 位安全加密需要 3,072 位 RSA 密钥,却只需要一 个 256 位 ECC 密钥。增加到 256 位安全加密需要一个 15,360 位 RSA 密钥,却只需要一个 512 位 ECC 密钥。ECC 具有如此卓越的按位比率加密的性能,其特点或将成为安全系统关注的重点。
非对称加密算法RSA与ECC对比
非对称密码之DH密钥交换算法

二、对称加密算法对比

对称加密的特点:加解密使用同一个秘钥,速度相比非对称加密要快。
常见的对称加密算法:DES、3DES、AES

  • DES
    已破解,不再安全,基本没有企业在用了
    是对称加密算法的基石,具有学习价值
  • DESede(三重DES)
    替代DES出现的,计算密钥时间太长、加密效率不高,所以也基本上不用
  • AES
    最常用的对称加密算法
    密钥建立时间短、灵敏性好、内存需求低(不管怎样,反正就是好)
三、散列加密算法对比

哈希算法的特点:

  1. f(data)=key,输入任意长度的data数据,经过哈希算法处理后输出一个定长的数据key。
  2. 过程是不可逆的,无法由key逆推出data。
  3. 输入数据不同生成的哈希值也不同,但由于散列算法后输出的是定长的,所以存在哈希冲突的情况。
    常见的哈希算法:MD5、SHA1、SHA256。
  • MD5
    加密后生成一个128位的散列值,相比SHA系列算法速度更快,无法抵御碰撞攻击,因此不适用与安全性认证。
  • SHA1
    安全散列算法(Secure Hash Algorithm,缩写为SHA)是一个密码散列函数家族。SHA-1是1995年发布的,在许多安全协议中广为使用,包括TLS、GnuPG、SSH、S/MIME和IPsec,是MD5的后继者。但SHA-1的安全性在2010年以后已经不被大多数的加密场景所接受。2017年荷兰密码学研究小组CWI和Google正式宣布攻破了SHA-1
  • SHA256
    生成的是256位的哈希值,碰撞的概率更小,安全性相比SHA1更高,但是计算消耗的时间要更多。至今尚未出现对SHA-2有效的攻击。

HTTPS安全性的几个具体问题

你可能感兴趣的:(HTTPS 加密的细节)