什么是会话密钥?|会话密钥和TLS握手

SSL/TLS协议同时使用公钥和对称加密,并且必须为每个通信会话生成用于对称加密的新密钥。这样的密钥称为"会话密钥”。

Share facebook icon linkedin icon twitter icon email icon

会话密钥

学习目标

阅读本文后,您将能够:

  • 了解什么是会话,什么是密钥以及何时必须创建新的会话密钥
  • 了解非对称和对称加密之间的区别
  • 了解SSL/TLS加密协议如何同时使用两种加密方式
  • 了解SSL/TLS中用于对称加密的4种会话密钥类型

什么是会话密钥?

会话密钥的实质仍然是加密密钥,但它特指那些仅对单个通信会话进行对称加密的密钥。换句话说,它是一个临时密钥,仅在一个时间段内用于加密和解密数据;会话两方之间的未来对话将使用不同的会话密钥进行加密。会话密钥就像每次登录都会重置的密码一样

SSL/TLS中,两个通信方(客户端和服务器)在任何通信最开始的TLS握手期间生成4个会话密钥。尽管TLS的官方RFC 实际上并未将这些密钥称为"会话密钥" ,但是从功能上讲,这就是它们的本质。

什么是会话?

会话本质上是一个对话。会话通过网络进行,并且当两个设备相互确认并打开虚拟连接时开始,并随着两个设备在彼此获得了所需信息并发送"完成"消息时而结束,就像两个人正在互相发短信一样,他们会通过说"之后再聊”来结束对话。连接也可能由于不活动而超时结束,就像如果两个人正在发短信但停止了互相回复。

会话时间可以设定为固定的长短,也可以随两个通信方的持续对话而继续进行。如果是前者,则会话将在一定时间后到期;在TLS加密的情况下,这两个设备将必须交换信息并生成新的会话密钥以重新打开连接。

什么是加密密钥?

在加密中,密钥是一串数据,用于更改消息以使消息变得加密(换句话说,以便使数据显得随机或混乱)。密钥还用于解密数据,或将其从加扰的形式转换为原始形式。(请参阅什么是加密密钥? 了解更多。)

什么是对称加密?什么是非对称加密?

在对称加密中,对话的双方使用完全相同的密钥进行加密和解密。在使用对称加密的会话中,可以使用多个密钥,但是使用一个密钥加密的消息将使用同一密钥才能解密。

与对称加密中同一个密钥可进行加密和解密有所不同,非对称加密中有两个密钥,用其中一个密钥加密的数据只能用另一个密钥解密。这也称为公共密钥加密 ,因为其中一个密钥是公共共享的。

HTTPS使用对称还是非对称加密?

HTTPS是具有 TLS 加密协议的HTTP,同时使用这两种类型的加密。TLS 上的所有通信都从 TLS 握手开始。非对称加密对于 TLS 握手的正常运转至关重要。

在TLS握手过程中,两个通信设备将建立四个会话密钥,这些密钥将用于其余会话的对称加密。通常,这两个通信设备之一是客户端或者是诸如笔记本电脑或智能手机之类的用户设备,另一个是任何能托管网站的网页服务器。 (有关更多信息,请参阅什么是客户端–服务器模型?

TLS握手如何运作?

TLS握手 期间,客户端和服务器彼此发送随机数据,用于分别进行计算,然后得出相同的会话密钥。三种随机生成的数据会从一侧发送到另一侧:

  • "客户端随机数" :这是客户端发送到服务器的随机字符串。
  • "服务器随机数" :与客户端服务器随机数相似,不同之处在于它是由服务器将其发送给客户端。
  • " Premaster机密" :这是另一串数据。在某些版本的TLS握手中,客户端会生成此机密,使用公钥加密并将其发送到服务器;在其他版本中,客户端和服务器使用商定的算法参数自行生成Premaster机密,以达到相同的结果。

TLS握手使用非对称加密,以使服务器通过随机性向攻击者隐藏(通过使用私钥加密),或者允许服务器对其中一个消息进行数字"签名" ,以便客户端知道服务器的真实来源(就像签名有助于在现实生活中验证某人的身份一样)。服务器使用私钥对某些数据进行加密,而客户端使用公钥对其进行解密,从而证明服务器具有正确的密钥并且是合法的。

TLS握手中的“master机密”是什么?

Master机密是通过算法将客户端随机数、服务器随机数和Premaster密码组合在一起的最终结果。客户端和服务器分别有这三个信息,因此他们应该能够得出相同的Master机密结果。

客户端和服务器然后使用master机密计算得出仅在该会话中使用的几个会话密钥,确切地说是4个会话密钥。

在TLS握手中,从master机密生成哪4个会话密钥?

在每个TLS握手中创建的4个会话密钥是:

  • "客户端写入密钥(client write key)”
  • "服务器写入密钥(server write key)“
  • "客户端写入MAC密钥(client write MAC key)"
  • "服务器写入MAC密钥(client write MAC key)"

客户端写入密钥是客户端用来加密其消息的密钥。客户端写入密钥是对称密钥,客户端和服务器都有。这使服务器可以使用相同的密钥解密来自客户端的消息。

服务器写入密钥与客户端写入密钥相同,只是它处在服务器端。概括来讲:从客户端到服务器的消息使用客户端写入密钥加密,服务器使用客户端写入密钥解密它们。服务器到客户端的消息使用服务器写入密钥加密,客户端使用服务器写入密钥来解密它们。(整个过程由客户端设备或浏览器处理;用户本身不必执行任何加密或解密操作。)

MAC(消息身份验证代码)密钥用于对消息进行数字签名。服务器使用服务器写入MAC密钥对消息进行签名,并且当客户端收到消息时,它可以对照自己的服务器MAC密钥记录检查使用的MAC密钥,以确保其合法性。客户端则使用客户端写入MAC密钥签署消息。

每个新的通信会话和新的TLS握手都会创建一组4个全新的会话密钥。会有一个不同的客户端写入密钥、服务器写入密钥等等,但是每次都会创建这4种类型的密钥。