深入浅出https(tls/ssl设计理论)

导读:本篇文章讲解 深入浅出https(tls/ssl设计理论),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

深入浅出https(tls/sll设计思路)

TLS/SSL协议关键步骤

  1. 传输的数据必须具有机密性和完整性,一般采用对称加密算法和HMAC算法,这两个算法需要一系列的密钥块(key_block),比如对称加密算法的密钥、HMAC算法的密钥,如果是AES-128-CBC-PKCS#7加密标准,还需要初始化向量。
  2. 所有的加密块都由主密钥(Master Secret)生成,主密钥就是会话密钥,使用密码衍生算法将主密钥转换为多个密码快。
  3. 主密钥来自预备主密钥(Premaster Secret),预备主密钥采用同样的密码衍生算法转换为主密钥,预备主密钥采用RSA或者DH(ECDH)算法协商而来。不管采用哪种密钥协商算法,服务器必须有一对密钥(可以是RSA或者ECDSA密钥),公钥发给客户端,私钥自己保留。不同的密钥协商算法,服务器密钥对的作用也是不同的。

三大核心步骤

  • 认证
  • 密钥协商
  • 数据加密

MAC算法

MAC算法又称消息验证码(MessageAuthentication Code, MAC,Hash算法能够完成密码学目标之一的完整性校验,但却不能避免消息被篡改,为避免消息被篡改,需要用到消息验证码,一般结合加密算法一起使用。.
在这里插入图片描述
在这里插入图片描述
上面二张图可以看出Hash算法只要存在攻击者即可随意篡改发送方的消息,无法保障消息的安全性,这里就要用到MAC算法.

特点

  • 证明消息没有被篡改
  • 消息是正确的发送者发送的

基本模型

MAC值=mac(消息,密钥)
MAC值一般和原始消息一起传输,原始消息可以选择加密,也可以选择不加密,通信双方会以相同的方式生成MAC值,然后进行比较
在这里插入图片描述

二种常见MAC算法

CBC-MAC算法

CBC-MAC算法从块密码算法的CBC分组模式演变而来,简单地说就是最后一个密文分组的值就是MAC值

HMAC算法

HMAC(Hash-based Message Authentication Code)算法使用Hash算法作为加密基元,HMAC结合Hash算法有多种变种,比如HMAC-SHA-1、HMAC-SHA256、HMAC-SHA512。

会话密钥

会话密钥是加密信息的临时方法。当用户打开通信会话时,生成该特定会话的密钥。该密钥用于该期间的所有通信,然后在会话结束时丢弃。会话密钥通常是对称的,并且就密码学而言相对简单。这种简单性通常是使用密钥的主要缺点,但由于一次操作的钥匙太多,而且使用时间也不长,所以这并不是什么大问题密码学使用密钥进行操作。一个密钥用于对数据进行置乱或加密,而另一个密钥用于解密数据。当这些密钥相同或至少非常相似时,它们是对称的。当密钥非常不同时,这是一个非对称系统。在大多数情况下,对称密钥不如非对称密钥安全,因为破坏一个密钥会完全打开代码一个非常短的时间。与普通的密钥不同,它可以使用数年而不改变,会话密钥只能使用几秒钟到几小时。例如,当用户连接以检查其电子邮件时生成一个密钥,然后在他注销时被丢弃。这为这些密钥提供了一系列独特的优点和缺点它们的主要优点是体积大。因为每个通信会话都使用一个唯一的密钥,即使是一个一般规模的公司,每天也能产生数百个密钥。潜在攻击者仅仅为了访问重要信息而需要筛选的密钥数量是巨大的。虽然任何给定的会话密钥都可能相对容易被破坏,但该随机密钥具有重要信息的可能性非常低密钥破解的一个主要影响因素是可供参考的加密材料的数量。可用的材料越多,越容易被破解。由于会话密钥的参考材料非常少,尤其是在密钥生成过程中,攻击者很容易发现密钥的简单性,尤其是在密钥生成过程中,密钥的生成变得不那么重要或者对实际的算法进行反向工程,在这两种情况下,会话密钥系统完全开放,根本没有安全性

密码衍生算法

对生成的主密钥或者预备主密钥根据密码套件将其转换出任意数量、任意长度的密钥块

RSA或者DH(ECDH)算法

密钥协商算法主要用于对会话密钥的生成和管理

RSA密钥协商算法

工作流程

  1. 客户端初始化连接服务器端,服务器发送RSA密钥对的公钥给客户端。
  2. 客户端生成一个随机值,这个值必须是随机的,不能被攻击者猜出,这个值就是会话密钥。
  3. 客户端使用服务器RSA密钥对的公钥加密会话密钥,并发送给服务器端,由于攻击者没有服务器的私钥,所以无法解密会话密钥。◎服务器端用它的私钥解密出会话密钥。
  4. 至此双方完成连接,接下来服务器端和客户端可以使用对称加密算法和会话密钥加密解密数据。

优点

  • 客户端初始化连接服务器端,服务器发送RSA密钥对的公钥给客户端。
  • 客户端生成一个随机值,这个值必须是随机的,不能被攻击者猜出,这个值就是会话密钥。
  • 客户端使用服务器RSA密钥对的公钥加密会话密钥,并发送给服务器端,由于攻击者没有服务器的私钥,所以无法解密会话密钥。
  • 服务器端用它的私钥解密出会话密钥。
  • 至此双方完成连接,接下来服务器端和客户端可以使用对称加密算法和会话密钥加密解密数据。

缺点

  • 完全是由客户端决定的,只能称为密钥传输。如果客户端生成会话密钥没有使用标准的算法,可能会带来安全隐患。

DH(ECDH)算法

在这里插入图片描述

  • 通信双方的任何一方可以生成公共参数p和g,这两个数是公开的,被截获了也没有任何关系,一般情况下由通信双方的服务器端计算.
  • 客户端连接服务器端,服务器端将参数发送给客户端。
  • 客户端根据公开参数生成一个随机数a,这个随机数是私钥,只有客户端知道,且不会进行发送,然后计算Yc = (g ^ a) mod p, Yc就是公钥,需要发送给服务器端。
  • 服务器端根据公开参数生成一个随机数b,这个随机数是私钥,需要服务器端保密,然后计算Ys = (g ^ b) mod p, Ys是公钥,需要发送给客户端。
  • 客户端发送Yc数值给服务器端,服务器端计算Z = (Yc ^ b) mod p。
  • 服务器端发送Ys数值给发送方,客户端计算Z = (Ys ^ a) mod p。
  • 服务器端和客户端生成的Z就是会话密钥,协商完成。

静态DH算法(DH算法)

静态DH算法,p和g两个参数永远是固定的,而且服务器的公钥(Ys)也是固定的。和RSA密钥协商算法一样,一旦服务器对应的DH私钥泄露,就不能提供前向安全性。静态DH算法的好处就是避免在初始化连接时服务器频繁生成参数p和g,因为该过程是非常消耗CPU运算的。

临时DH算法(EDH算法)

在每次初始化连接的时候,服务器都会重新生成DH密钥对,DH密钥对仅仅保存在内存中,不像RSA那样私钥是保存在磁盘中的,攻击者即使从内存中破解了私钥,也仅仅影响本次通信,因为每次初始化的时候密钥对是动态变化的。更安全的是,协商出会话密钥后,a和b两个私钥可以丢弃,进一步提升了安全性,在有限的时间、有效的空间生成了密钥对。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/61518.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!