桂电准大二 | 从密码学入手重温https协议
桂电准大二 | 从密码学入手重温https协议
大家好,我是一名桂电准大二学生,前段时间去补了一些密码学原理相关概念,最近想到自己对于经典的https协议还未完全掌握,又回去重温了一下,在此分享自己的见解。
首先还是简单介绍一下https协议(Hypertext Transfer Protocol Secure),全称超文本传输安全协议,在传统HTTP基础上通过SSL/TLS协议实现安全通信,这个算是绝大部分人接触的比较多的,也是最常用的,而像其他一些,比如smb文件共享,P2P点对点连接等用的相对来说比较少,我目前也没有去深究相应原理。
好的有点扯远了,回归正题,咱们先设想一个简单场景,我们作为客户端平时在网上进行搜索的时候,与浏览器,也就是服务器端,到底发生了什么?如何进行连接的?又是如何确认身份并且安全传输数据的?
咱们一步一步来,首先我们思考一下,我们作为客户端要如何与网站建立初步联系?对于一个特定的网站,是有对应ip地址与其绑定的,相当于就是自己的一个独立身份证,但是实际情况下我们不可能记住那么大一串的ip的,怎么办嘞?那就需要通过URL了(Uniform Resource Locator)通过URL咱们就可以定位到服务器的ip地址,从而通过TCP三次握手建立基本连接。
那好,确认连接过后,如何确认对方身份呢?比如在生活中,A要去找B,知道了B所在的位置后如何确认对方是B本人呢?哎这个时候就需要进行身份认证了,生活中一般是对方容貌特征或者身份证进行确认,但是网上服务器不可能有特征呀,怎么办嘞?这个时候就需要第三方机构进行担保了(事实上,需要第三方机构也是为了防止后续的中间人攻击),正常来说,服务器端会先用哈希函数压缩信息,然后进行签名,把自己的数字签名发送给我们,我们用内置CA机构的公钥进行签名验证后,就可以看到CA证书详细的信息了,包含服务器域名,签发日期之类的。
(补充一下,上述这里跳的有点快,关于数字签名,是用私钥来签名,公钥验证的,而CA证书相当于是第三方CA机构给服务器做的担保,起到身份认证的作用,在建立连接之前,客户端是保存有CA机构的公钥的,这个也是公钥基础设施的一部分,通常被硬写入物理机中,服务器端则持有CA证书和自己的私钥,CA机构私钥则是CA机构自己保管的,目的是为了签名,来进行身份认证)
接下来,在确认身份后,就是准备给对方传输数据了,但是此时新的问题又出现了,对称加密需要双方享有共同密钥进行数据传输,不过正常情况下此时并没有这个东西,那怎么办嘞?协议的做法是引入非对称加密,什么意思呢?也就是借助椭圆曲线离散对数问题,双方在本地各自生成临时公私钥,然后将公钥发给对方,然后双方凭借自己的私钥和对方公钥就可以得到共享密钥了(为什么共享,这个原因有严谨的数学层面的推导),当然这一步也有个名字叫做ECDHE密钥交换。
这里值得讨论的点在于,公钥发给对方本身合理,但是如何确保发送过程中不被篡改?此时服务器依旧需要用到CA证书和数字签名,用私钥对公钥进行签名后,把公钥,签名,证书一起发送出去,如果被篡改是肯定会被发现的。但是CA证书只存在于服务器啊,客户端要怎么办呢?设想一下,假如公钥直接发送出去被篡改,后续会发生什么?那就是两者后续根本没有办法得到共享密钥!事实上在得到密钥之后,会用派生密钥生成finished消息的MAC,互相进行校验,如果这一步出现问题,密钥被篡改的现象就会被立刻发现。
最后一步,在交换完密钥后,双方此时就拥有了共享密钥,此时借助抗碰撞哈希函数可以衍生出其他的密钥,也就是HKDF,基于哈希的密钥派生函数,用于后续对称加密,然后就利用常见的加密算法进行数据传输了。
但是大家有没有想过一个问题,都有共享密钥了为什么要衍生密钥?按理来说直接把这个用于对称加密不是就可以了吗?哎其实这么想本身没有问题,问题在于,我们实际加密过程中,不光想要数据安全传输,更想要数据不被篡改。换句话说,咱们不妨设想一个场景,A在很久前欠了B一万块钱,写了借条,抛开中间人攻击这种不谈,B如何才可以证明这个借条里面的内容一定是A写给她的?如果单纯只有对称加密,显然不行,因此这里还需要用MAC,整体数学结构类似哈希函数,不同在于需要密钥才能进行计算,因此可以保证内容安全。
不过其实,对于对称加密来说,正因为两者持有相同的密钥,所以同一条消息正常来说是无法确认到底来自哪一方的,除非是引入数字签名来担保。问题在于https协议中,传输数据阶段其实只有对称加密+MAC,因此这一步理论上无法做到抗抵赖,只能做到防御双方通信外的攻击,至于抗抵赖性则是应用层其他步骤去保证了,和https没什么关系。
当然以上就是https协议在密码学层面的一个大致框架,但是呢,其实协议本身很多细节我没有讲到,比如TLS主要有三个高层协议,握手协议,修改密码规范协议,警报协议。单单握手协议就非常复杂,最基本的握手模式就有:完整握手模式,0RTT握手,会话重启模式,会话重启与DH结合模式。在协议的设计中,每个消息就比如一个HMAC里面放了哪些消息的连接,只变更其中的一小部分,或者去除一小部分,就会造成整个协议安全性的崩塌。但由于本篇文章只是结合密码学一部分核心概念去梳理整个大框架,细节部分暂时没有去深究,还望各位读者和老师海涵。
总之以上就是我自己关于https的一些复习性质的思考,如果有关键细节没有写出来的还望各位老师及时指出!本人感激不尽!
原文发布于知乎(2026-08-20),收录于《桂电密码学本科生的密码学学习笔记》系列,作者:亦梦。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!


