综合密码协议学习
最近准备学一下(初步了解)各种协议,因此写了这篇博客,如有出错的地方请轻点喷 XD
基础知识
密码协议,也称安全协议、加密协议
按安全协议定义:
密钥交换协议、认证协议、认证和密钥交换协议。
按安全协议实现的功能:
认证协议、最小泄密协议、不可否认协议、公平性协议、身份识别协议、密钥管理协议。
下面的知识是有关计算机网络的
OSI模型
OSI七层模型是最经典的模型,将通信系统中的数据流分为七层每一个中间层为其上一层提供功能,其自身功能则由其下一层提供
- 物理层
- 数据链路层:
Ethernet、MAC等 - 网络层:
IP(IPv4/IPv6)、ICMP等 - 传输层:
TCP、UDP等 - 会话层:
RPC、NetBIOS等 - 表示层:
SSL/TLS、JPEG、UTF-8等 - 应用层:
HTTP、HTTPS、FTP、DNS等
TCP/IP模型
TCP/IP四层模型是实际互联网中比较常用的模型
- 网络接口层:对应
OSI中的物理层+数据链路层 - 网络层:对应
OSI中的网络层 - 传输层:对应
OSI中的传输层 - 应用层:对应
OSI中的应用层+表示层+会话层
IPSec协议族
注:本文只是对IPSec协议族做初步的了解,更深入的部分请移步该部分的参考资料:D
注:工作在OSI模型的第三层(网络层)
IPSec协议不是具体的一个协议,它指的是一组基于网络层的安全通信协议族(应用密码学)
设计思想:将基于密码技术的安全机制引入IP协议(IPv4、IPv6),实现网络层的通信安全
IPSec协议主要分为
- 认证头(AH)协议,为IP数据报提供无连接数据完整性、消息认证以及防重放攻击保护
- 封装安全载荷(ESP)协议,提供机密性、数据源认证、无连接完整性、防重放和有限的传输流(traffic-flow)机密性;
- 因特网密钥交换(称IKE或IKEv2)协议,为AH、ESP操作所需的安全关联SA(Security Association,安全联盟,博客后面会说))提供算法、数据包和密钥参数
IPSec协议的俩个环节:
第一环节:使用IKE完成通信双方的身份鉴别,确定通信时使用的IPSec安全策略和密钥;
第二环节:使用上一环节中协商确定的安全策略和密钥,执行ESP协议,开始通信数据的安全传输。
借用一下大佬的图(来自https://zhuanlan.zhihu.com/p/488141423):


IPSec协议的俩种模式:
- 传输模式:用于端到端应用场景。不改动IP头,只保护IP载荷;
- 隧道模式:经常用于私网与私网之间通过公网进行通信,建立安全
VPN通道(Virtual Private Network,虚拟专用网)。对整个IP报文(包括原先的IP头、IP载荷)提供加密和认证,添加新的IP头。
1 | |
IPSec:AH 或 ESP 安全头Data:数据载荷
AH协议
知识点:
- AH协议提供数据源身份鉴别、完整性和抗重放攻击等安全功能;
- AH协议不提供保密性服务,即不执行加密操作;
- GM/T 0022-2014《IPSec VPN技术规范》中规定:AH应与ESP嵌套使用,不得单独使用;
- 作用:为整个IP数据报文(包括IP头和IP载荷)提供完整性校验,检测数据包是否被篡改;
- AH使用MAC(通常为HMAC)检测篡改,密钥来自IKE协定的用于完整性校验的会话密钥;
- AH分配到的协议号是51。即使用AH协议进行安全保护的IPv4数据报文的IP头部中协议字段将是51,表明IP头之后是一个AH头。
- AH 在传输模式和隧道模式下都提供完整性保护与数据源认证,但因封装位置不同,其具体保护范围并不完全相同,且均不包括 IP 头中的可变字段。
1 | |
ESP协议
- ESP提供对数据报文加密功能;
- GM/T 0022-2014《IPSec VPN技术规范》中规定:ESP 可以被单独使用,也可以与AH结合使用;
- 当ESP被单独使用时,GM/T 0022-2014 中规定必须同时提供保密性和数据源身份鉴别服务。单独使用 ESP 时可以支持 NAT(网络地址转换);
- 当 ESP 与 AH 结合使用时,GM/T 0022-2014中规定 ESP 不提供数据源身份鉴别服务,而由 AH 提供数据源身份鉴别;
- ESP在传输模式和隧道模式中有不同的放置位置,保护的范围不同。
- ESP之前的IP头中的协议字段将是50,以表明IP头之后是一个ESP头,ESP不仅具备ESP头,还有一个包含有用信息的ESP尾。
1 | |
传输模式:为ESP头后的载荷提供保密性,为原IP头后的内容提供认证保护。
隧道模式:为整个原IP报文提供保密性,为新建IP头后的内容提供认证保护。
AH + ESP模式图
1 | |
SA(Security Association,安全联盟)
SA 是通信双方经协商建立的一种约定,规定了双方如何使用
IPsec保护数据,内容包括:数据封装格式、IPsec工作模式(传输模式 / 隧道模式)、加密与认证算法、密钥、SA 生存周期等单向性:AH 和 ESP 都使用 SA,且 SA 是单向的——一个 SA 只能为单一方向上传输的数据提供安全服务。因此:
- 若双向通信只使用一种协议(如只用 ESP),至少需要建立 2 个 SA(入站 1 个 + 出站 1 个)
- 若同时使用 AH 和 ESP 两种协议,则需要 4 个 SA(AH 入/出各 1 个,ESP 入/出各 1 个)
单一服务:每个 SA 只对应 一种 安全协议(AH 或 ESP,二者是相互独立的服务)。如果既要加密又要认证,就必须分别为 AH 和 ESP 各建一个 SA,不能用一个 SA 同时承载两种协议。
通过不同的 SA,
IPsec可以为不同的数据流提供不同的安全策略(比如不同流量使用不同的算法或密钥)一个 SA 由三元组唯一确定:
| 要素 | 说明 |
|---|---|
| SPI(Security Parameter Index,安全参数索引) | 32 比特数值,用于在同一目的地址和协议下唯一区分不同的 SA,会随 IPsec 报文一起传输 |
| 目的 IP 地址 | 标识 SA 所属的通信目的端 |
| 安全协议号(AH 或 ESP) | 标识该 SA 使用的安全协议 |
ISAKMP协议
在学习IKE协议前,我们要先了解一下ISAKMP协议(安全连接和密钥管理协议)。
ISAKMP协议是一种用于安全密钥协商和管理的协议。它是IPSec协议套件中的一部分,用于确保网络通信的机密性、完整性和可用性。- 虽然
ISAKMP从名字的定义上看是协议,但从功能上看它更像一个框架。RFC 2408 中定义,它提供了一个架构来进行授权与密钥交换(如下个点要讲的IKE协议),主要被设计来作为密钥交换之用。 - 从宏观上来看,ISAKMP主要做了三件事情:
- SA协商:为了在通信双方间协商出一组双方都认可的安全参数。比如两端采用相同的加密算法和完整性算法。
- 密钥交换:为已经协商好的算法生成必要的密钥信息。
- 身份认证:鉴别对方的身份,保证自己不是在跟一个伪造的对象通信。
- 一旦安全关联建立,ISAKMP协议还负责维护和管理已建立的安全关联。它确保关联的有效性和更新,以适应网络环境的变化。
IKE协议
参考资料
[1] 知乎. IPSec协议详解[EB/OL].
https://zhuanlan.zhihu.com/p/488141423.
[2] NEUChords. IPSec协议原理与分析[EB/OL].
https://blog.csdn.net/NEUChords/article/details/92968314.
[3] CSDN. IPSec与IKE协议相关介绍[EB/OL].
https://blog.csdn.net/qq_32044265/article/details/128106213.
[4] 聚合数据. 什么是ISAKMP协议 ISAKMP协议的作用 ISAKMP协商过程[EB/OL].
https://www.juhe.cn/news/index/id/8198.
[5] Wikipedia. IPsec[EB/OL].
https://zh.wikipedia.org/wiki/IPsec.
[6] Wikipedia. 互联网密钥交换(Internet Key Exchange, IKE)[EB/OL].
https://zh.wikipedia.org/wiki/%E7%B6%B2%E9%9A%9B%E7%B6%B2%E8%B7%AF%E9%87%91%E9%91%B0%E4%BA%A4%E6%8F%9B.
[7] Wikipedia. 网络安全关联与密钥管理协议(Security Association and Key Management Protocol)[EB/OL].
https://zh.wikipedia.org/wiki/%E7%B6%B2%E8%B7%AF%E5%AE%89%E5%85%A8%E9%97%9C%E8%81%AF%E8%88%87%E9%87%91%E9%91%B0%E7%AE%A1%E7%90%86%E5%8D%94%E5%AE%9A.
TLS
注:TLS 工作在传输层之上(OSI模型的表示层),为上层应用提供机密性、完整性与身份鉴别,是 HTTPS 的安全底座。本部分持续更新中,先从流量分析里最常用的 keylog 文件说起,握手与密钥调度以后慢慢补 XD
NSS Key Log Format
解密 TLS 流量的那把”钥匙”
NSS Key Log Format 最早由 Mozilla 的密码库 NSS 定义,如今是解密 TLS 流量的事实标准(de facto standard)——它并非任何 RFC 规定的官方协议,却几乎被整个生态采用。
格式本身非常简单:纯文本,每行三个空格分隔的字段 <标签> <ClientRandom> <密钥>。
- 标签表明这是 TLS 密钥调度中派生出的哪一把 secret,如解密握手消息的
CLIENT/SERVER_HANDSHAKE_TRAFFIC_SECRET、解密应用数据的CLIENT/SERVER_TRAFFIC_SECRET_0; ClientRandom是该会话ClientHello里的 32 字节随机数,相当于”会话身份证”,分析工具靠它把密钥匹配到 pcap 里的具体连接;- 最后一个字段才是真正的密钥材料(hex 编码的 HKDF 输出,TLS 1.3 下为 48 字节,对应 SHA-384)。
- 一个文件里可以同时存在多场会话的密钥,全靠 ClientRandom 区分。
这个文件的珍贵之处在于:TLS 1.3 强制 (EC)DHE 前向保密,即使拿到服务器 RSA 私钥也推不出会话密钥,keylog 是解密流量的唯一入口。
示例:
1 | |
参考资料
[1] IETF. RFC 8446: The Transport Layer Security (TLS) Protocol Version 1.3[EB/OL].
https://datatracker.ietf.org/doc/html/rfc8446.
[2] Mozilla. NSS Key Log Format[EB/OL].
https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/Key_Log_Format.
[3] Wireshark Wiki. TLS[EB/OL].
https://wiki.wireshark.org/TLS.