字节面试官:你觉得HTTPS能防止重放攻击吗?

正文

==

协议流程

====

我们先来回忆一下HTTPS的通信流程,HTTPS协议 = HTTP协议 + SSL/TLS协议,摘取一下网上一些八股文的回答(以RSA密钥交换的为例)!

  • (1)客户端生成一个随机数client_random,TLS版本号,发送到服务端

  • (2)服务端发送自己的随机数server_random,服务器使用的证书,发送到客户端

  • (3)客户端利用CA公钥对证书进行验证,取出服务器公钥

  • (4)客户端生成随机数pre_master_secret,利用服务器公钥进行加密,传送到服务端

  • (5)服务端利用服务器私钥进行解密取出pre_master_secret

  • (6)服务端和客户端此时利用随机数client_random,server_random,pre_master_secret算出对称密钥(master_secret),利用对称密钥进行对称加密通信

_画外音:_是不是贼熟悉,有背过网络八股文的,一看就懂!

关键问题就在步骤(6),怎么进行加密的?很多文章都没有说明,甚至有的人以为,拿client_random+server_random+pre_master_secret直接拼成一个字符串,然后就是对称加密密钥,客户端和服务端拿这个密钥对数据进行加密通信!!

对此,我只能说:“Too young too simple!离谱啊!!”

那正确的过程是怎么样的呢,我们继续往下看!

协议分析

====

我先给本文提到的英文单词,给上我的中文翻译,以防大家混淆:

  • client_random 客户端随机数

  • server_random 服务端随机数

  • pre_master_secret 预备主密钥

  • master_secret 主密钥

  • key_block 密钥块(有的文章把这个东西称为会话密钥)

先大致有个印象,继续往下阅读

现在我们已经有三个参数client_random,pre_master_secret,server_random,服务端和客户端分别会根据这三个参数,推导出master_secret,一旦master_secret被推导出来,会立刻删除pre_master_secret。(摘自rfc2246,section8.1

当master_secret计算出以后,立刻计算key_block(摘自rfc2246,section6.3),这个密钥块,有的文章里又说他是会话密钥!计算公式如下,

key_block = PRF(master_secret,

“key expansion”,

server_random +

client_random)

如公式所示,PRF是一个Hash算法,如SHA256这些,具体用哪一个取决于TLS协议的版本!我们得到key_block后,可以基于到key_block继续推导出6个密钥值,分别是

  • client_write_MAC_key 客户端消息认证码密钥

  • server_write_MAC_key 服务端消息认证码密钥

  • client_write_key 客户端对称加密密钥

  • server_write_key 服务端对称加密密钥

  • client_write_IV 客户端初始化向量

  • server_write_IV 服务端初始化向量

整个过程用一张图来说明,注意了这六把密钥是根据key_block推导而出,也就是意味着这六把密钥是服务端和客户端共同持有的!

面试官:你觉得HTTPS能防止重放攻击吗?

大家一定也发现了,你的密钥前都带有client或者server前缀,这代表密钥是服务端使用还是客户端使用!例如,客户端用client_write_key进行数据加密,发送数据,服务端收到消息后利用client_write_key进行解密。而后服务端使用server_write_key进行数据加密回复信息,客户端收到消息后用server_write_key解密服务端发来的信息!

OK,我们继续往下看!

现在我们已经有了6把密钥了,已经需要发送的消息data,那么加密流程具体怎么样的呢?

TLS一共有三种加密模式,流加密模式、分组模式、 AEAD 模式,我以流加密模式来进行说明,如下图所示

面试官:你觉得HTTPS能防止重放攻击吗?

最后

总而言之,面试官问来问去,问的那些Redis知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习

还有更多学习笔记面试资料也分享如下:

都是“Redis惹的祸”,害我差点挂在美团三面,真是“虚惊一场”

知识点也就这么多吧,复习的不够到位,知识点掌握不够熟练,所以面试才会卡壳。将这些Redis面试知识解析以及我整理的一些学习笔记分享出来给大家参考学习

还有更多学习笔记面试资料也分享如下:

[外链图片转存中…(img-1yCyn3Ft-1720101882343)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值