网络安全协议总复习 Part1
网络安全综述#
典中典之保密性完整性可用性
可认证性, 不可否认性 (可审计性), 可控性 (对网络信息的传播及内容具有控制能力), 可靠性

OSI 和 TCP/IP 模型:
- 都是基于独立的协议栈
- 两者都有功能相似的应用层, 传输层, 网络层
不同点:
- OSI 严格定义了服务, 接口, 协议, TCP/IP 中没有严格区分
- OSI 模型支持非连接和面向连接的网络层通信, 但在传输层只支持面向连接的通信; TCP/IP 模型只支持非连接的网络层通信, 但在传输层有支持非连接和面向连接的两种协议可供用户选择
- TCP/IP 模型中不区分, 甚至不提起物理层和数据链路层
安全攻击, 安全服务, 安全机制
用一种或多种安全机制来实现安全服务, 安全服务致力于抵御安全攻击
安全攻击包括:
- 主动攻击: 更改数据流, 或伪造假的数据流
- 被动攻击: 对传输进行偷听与监视, 获得传输信息, 但不对通信和数据做任何修改
安全服务:
- 认证: 对等实体认证验证正在通信的实体的身份, 数据源认证验证收到的数据的来源
- 访问控制
- 数据机密性
- 数据完整性
- 不可否认性
安全服务和安全攻击的关系
| 服务\攻击 | 报文分析 | 流量分析 | 伪装 | 重放 | 篡改 | 拒绝服务 |
|---|---|---|---|---|---|---|
| 对等实体认证 | Y | |||||
| 数据源认证 | Y | |||||
| 访问控制 | Y | |||||
| 机密性 | Y | |||||
| 流量机密性 | Y | |||||
| 数据完整性 | Y | Y | ||||
| 非否认服务 | ||||||
| 可用性 | Y |
安全服务和安全机制的关系
| 安全服务\安全机制 | 加密 | 数字签名 | 访问控制 | 完整性 | 认证 | 流量填充 | 路由控制 | 公证 |
|---|---|---|---|---|---|---|---|---|
| 对等实体认证 | Y | Y | Y | |||||
| 数据源认证 | Y | Y | ||||||
| 访问控制 | Y | |||||||
| 机密性 | Y | Y | ||||||
| 流量机密性 | Y | Y | Y | |||||
| 数据完整性 | Y | Y | Y | |||||
| 非否认服务 | Y | Y | Y | |||||
| 可用性 | Y | Y |
密码学基础知识#
按体制分: 古典密码, 对称密钥, 非对称密钥
按加密模式分: 序列密码 (按位或字节加密, 流密码, 手工和机械密码时代的主流), 分组密码
对称密码算法:
- DES, 数据分组长度为 64 位, 密文分组长度也是 64 位, 使用的密钥为 64 位, 有效密钥长度为 56 位, 有 8 位用于奇偶校验
- 三重 DES, 使用三个密钥对数据块进行三次 DES 操作.
DES-EDE3 使用三个不同密钥依次进行加密-解密-加密变换 (3DES 标准, 兼容性考虑) - AES, 块长度为 128 位, 密钥长度可以是 128, 192, 256 位
- IDEA, 密钥长度为 128 位, 被推荐使用在 PGP (Pretty Good Privacy 这什么逆天全称) 软件中
- Blowfish
- RC5, RC4 是流密码算法
- CAST-128
对加密系统的攻击:
- 已知明文攻击 Known Plaintext Attack
- 选择明文攻击 Chosen Plaintext Attack: 有选择地使用任意明文和与之对应的密文信息, 根据算法寻找密钥
- 选择密文攻击 Chosen Ciphertext Attack: 具有 CPA 的能力之外, 还可以有选择地使用密文和与之对应的明文信息, 根据算法寻找密钥
分组密码的工作模式#
ECB (Electronic Codebook) 电子密码本模式#
各个数据块独立进行加解密. 相同的明文块总是生成相同的密文块, 无法隐藏数据模式, 容易受到统计分析攻击.
CBC (Cipher-Block Chaining) 密码分组链接模式#
引入了初始化向量 (IV), 前一个密文块与当前明文块异或运算后加密. 加密过程串行, 无法并行计算, 存在错误传播现象.
一个块错误会影响自身和下一个块的对应共 2 个 bit.
CFB (Cipher Feedback) 密码反馈模式#
将块密码转化为流密码. 前一个密文块作为输入加密, 生成一个密钥流, 与当前明文块进行异或, 得到密文块. 可变长度, 实时, 可以部分解密, 解密支持并行, 但加密依然串行, 存在错误传播.
错误块在移位寄存器中会停留 ⌈b/s⌉ 次加密, 导致后续多个块全部损坏, 直到错误被完全移出寄存器.
OFB (Output Feedback) 输出反馈模式#
将块密码转化为流密码. 前一个加密算法的输出作为输入, 生成一个密钥流, 和明文异或得到密文串. 密码机的输出 (独立密钥流) 反馈到其自身的输入, 再与明文异或. 明文或密文的错误不会在后续块中传播 (无错误传播). ,

CTR (Counter) 计数器模式#
将块密码转化为流密码. 计数器加密后与明文异或. 支持完全并行计算, 无错误传播, 非常适合高速网络环境.
公开密钥算法#
对称密码算法存在问题:
- 密钥管理量问题: 潜在通信的两两分别用一对密钥, 当用户量增大时, 密钥空间急剧增大.
- 对称算法无法实现抗否认需求
非对称密码体制的基本原则:
- 加密能力与解密能力是分开的
- 密钥分发简单
- 需要保存的密钥量大大减少, N 个用户只需要 N 个, 除了个人私钥之外, 公钥均可以公开保存
- 可满足不相识的人之间保密通信
- 可以实现数字签名
RSA, ELGamal 密码, 椭圆曲线密码 (ECC), Diffie-Hellman 密钥交换
数字签名与消息认证#
消息伪造, 内容篡改, 延迟或重播, 否认
数字签名: 不可否认性, 消息认证: 完整性
消息认证码 MAC (Message Authentication Code), 散列函数 (Hash Function)+签名
注意 MAC 用的是对称密钥!
散列函数: 弱碰撞抵抗, 强碰撞抵抗
标准: MD5 (128 比特), SHA-1 (160 比特), SHA-2 (包括 6 种)
公钥基础设施 PKI#
PKI 是一个用非对称密码算法原理和技术来实现并提供安全服务的具有通用性的安全基础设施. 是一种遵循标准的利用公钥加密技术为电子商务的开展提供安全基础平台的技术和规范. 能够为所有网络应用提供采用加密和数字签名等密码服务所需要的密钥和证书管理.
理想状态下包括证书, 一个可以获取证书的开放库, 一种撤销证书的方法以及一种能够根据已知的可信公钥验证证书链的方法.
证书的基本结构 (最简构成): (主体身份信息+主体公钥值+认证机构名) 生成数字签名
- 认证中心 CA(Certificate Authority) 证书的签发机构, 它是 PKI 的核心构件, 是 PKI 应用中权威的, 可信任的, 公正的第三方机构.
- 注册机构 RA(Registration Authority) 注册功能也可以由 CA 直接实现, 但随着用户的增加, 多个 RA 可以分担 CA 的功能, 作为 CA 的延展, 可以增强可扩展性. 按照特定的政策和管理规范对用户的资格进行审查, 并执行是否同意给该申请人发放证书. 撤销证书等操作, 应注意的是 RA 不容许直接颁发证书或 CRL.
- 证书库 CL(Certification Library) CA 颁发证书和证书撤销列表 CRL 的集中存放地, 提供公众查询, 常用目录服务器提供服务, 采用 LDAP (Lightweight Directory Access Protocol) 目录访问协议.
- 得到与之通信的实体的公钥, 在证书中
- 验证通信实体的证书是否在 CRL 中, 也基于签名
- 密钥备份及恢复系统
- 签名密钥对: 签名私钥相当于日常生活中的印章效力, 为保证其唯一性, 抗否认性, 签名私钥不作备份. 签名密钥的生命期较长.
- 加密密钥对: 加密密钥通常用于分发会话密钥, 为防止密钥丢失时无法解密数据, 解密密钥应进行备份. 这种密钥应频繁更换.
- 证书作废处理系统 证书由于某种原因需要作废, 终止使用, 这将通过证书作废列表 (CRL, Certificate Revocation List) 来完成, 证书撤销列表作为文件结构, 也需要由 CA 进行签发.
- 自动密钥更新 无需用户干预, 当证书失效日期到来时, 启动更新过程, 生成新的证书
- 密钥历史档案 由于密钥更新, 每个用户都会拥有多个旧证书和至少一个当前证书, 这一系列证书及相应私钥 (除签名私钥) 组成密钥历史档案.
- PKI 应用接口系统 是为各种各样的应用提供安全, 一致, 可信任的方式与 PKI 交互, 确保所建立起来的网络环境安全可信,并降低管理成本.
- 交叉认证 多个 PKI 独立地运行, 相互之间应建立信任关系
PKI 的基本服务:
- 认证: 实体鉴别, 数据来源鉴别
- 完整性: 哈希+数字签名计数, 消息认证码 (数字信封传输对称密钥)
- 保密性: 采用数字信封, 传输会话密钥
- 不可否认性服务: 收据的电子签名, 安全时间戳
- 公证服务: 由 CA 充当第三方进行数据验证
数字信封: 用非对称加密来保护一个一次性对称密钥, 再用这个对称密钥去加密真正的数据


PKI 的运行操作#
- 端实体向证书机构 (CA) 提出数字证书申请;
- CA 验明端实体身份, 并签发数字证书;
- CA 将证书公布到证书库中;
- 假设为电子邮件应用, 端实体对电子邮件数字签名作为发送认证, 确保邮件完整性, 不可否认性, 并发送给接收方.
- 接收方接收邮件, 用端实体的公钥验证数字签名 (离线), 并到证书库查明端实体证书的状态和有效性 (在线);
- 证书库返回证书检查结果 (CRL 检查等).
PKI 体系的互通性与标准化#
信任关系:
- 建立全球统一的根 CA (显然不现实)
- 交叉认证方式: 对等关系的 CA 互相签发 (双向)
- 建立基于层次化结构信任路径 (单向)
- 分布式 CA (单向双向混合)
X.509 标准
认证机构 CA#
PKI 核心实体是认证机构 CA, 为各个实体颁发电子证书, 对实体身份信息和相应公钥数据进行数字签名, 用以绑定该实体的公钥和身份, 以证明各实体在网上身份的真实性; 并负责在交易中检验和管理证书. 同时也是 CRL 的签发者.
IPSec: AH 和 ESP#
IPv4 和 IPv6 协议, Internet 的网络层协议
IPv6:
- 扩展地址空间, 128 位地址长度
- 简化了头标
- 改善了选项功能, 提供了安全功能
- 修订了参数, 增加了流标记域
认证头标, 封装化安全静荷
IP + TCP + 载荷
IP + IPSec + TCP + 加密载荷
IP + AH + ESP + TCP + 加密载荷
IPSec 中的安全关联 (SA)#
为使通信双方的认证/加密算法及其参数, 密钥的一致, 相互间建立的联系 (协商一致的信息) 被称为安全组合或安全关联(Security Association). 数据传输是双向的, 但不同方向可能存在不同的策略, 即使同一方向, 针对不同功能也可能存在不同策略, 因此 SA 是单向 (由目的端确定) 的, 在双向通信时至少要建立两个 SA. 对于某一主机来说, 某个会话的输出数据和输入数据流处理需要两个独立的 SA.
IPSec 中默认采用密钥管理协议在通信双方之间进行协商得到 SA, 协商完毕后, 双方都在它们的安全关联数据库 (SAD) 中存储该 SA 参数.
SA 由一个三元组唯一地标识, 该三元组为安全参数索引 SPI, 一个用于输出处理的目的 IP 地址和协议(如 AH 或 ESP).
安全参数索引 SPI: SPI 是为了唯一标识 SA 而生成的一个 32 位整数, 由目的端确定. 包含在 AH 头标和 ESP 头标中, 其值 1~255 被 IANA 留作将来使用, 0 被保留, 目前有效的值为 256~.
IPSec 安全策略本质上由两个交互的数据库决定:
- 安全策略数据库 (Security Policy Database, SPD)
- 安全关联数据库 (Security Association Database, SAD)
SPD 中包含一个策略条目的有序表 (自上而下), 类似于防火墙的规则表, 通过使用一个或多个选择符来确定每一个条目.
其中包含处理策略, 即是否需要 IPSec 处理
对外出处理, 应在 SPD 中查找指向 SAD 中 SA 的指针.
SAD 包含现行的一系列 SA 条目, 每个 SA 由三元组进行索引, 包含序列号计数器, 序列号溢出, 抗重放窗口 (使用一个 32 位计数器和位图确定一个输入的 AH 或 ESP 数据包是否是重放包), AH 和 ESP 的认证算法和所需密钥, …
认证头标 AH (Authentication Head)#
AH 协议提供无连接的数据完整性, 数据源认证和抗重放保护服务.
不提供保密性服务, 使用消息认证码 (MAC) 提供源认证.

安全参数索引 SPI: 此 32 比特和目的 IP 地址, IPSec 协议 (AH 或 ESP) 组合为三元组, 即可确定 SA, 以确定采用的 IPSec 协议, 操作模式, 密码算法, 密钥等. 当建立新 SA 时, SPI 的产生由目的系统进行选择, 另一端可采用目的地址+SPI 值标识该 SA.
序列号: 单调增加的 32 位无符号整数, 利用该域抵抗重放攻击. 每个 IPSec 分组依次将序列号加 1, 但不用来对数据包进行排序.
抗重放:
- 接收到包含在窗口中的新包, 且验证通过, 则直接进行标记;
- 接收包超过了窗口右边界, 且验证通过, 则窗口右移, 使得新包成为右边界;
- 接收包超过了左边界或者没有通过验证, 丢弃该包.
认证数据: 是一个长度可变的域, 长度为 32 比特的整数倍. 具体长度因采用的不同认证算法而异. 该认证数据也被称为 IP 数据包的完整性校验值.
AH 的处理#
源端处理:
- 使用相应的选择符 (目的 IP 地址, 端口号和传输协议等) 查找安全策略数据库 SPD 获取策略. 如需要对分组进行 IPSec 处理, 且到目的主机的 SA 已经建立, 那么符合分组选择符的 SPD 将指向外出 SA 数据库 (SAD) 的一个或者多个 SA. 如果 SA 还未建立, IPSec 将调用 IKE 协商一个 SA, 并将其连接到 SPD 条目上.
- 产生或增加序列号, 当一个新的 SA 建立时, 序列号计数器初始化为 0, 以后每发一个分组, 序列号加 1.
- 计算 ICV (完整性校验值).
- 转发分组到目的节点.
目的端进入处理:
- 如 IP 分组中无 IPSec 选项, 则分组中的选择符进入 SPD 查找一条与选择符匹配的策略, 检查策略是否相符. 如果无需进行 IPSec 处理则放行, 否则丢弃.
- 使用 IP 分组头中的 SPI 值, 目的 IP 地址以及 IPSec 协议在进入的 SA 数据库中查找 SA, 如果查找失败, 则抛弃该分组, 并记录事件.
- 使用已查到的 SA 进行 IPSec 处理.
- 检查序列号, 确定是否为重放分组.
- 使用 SA 指定的 MAC 算法计算 ICV, 并与认证数据域中的 ICV 比较, 如果两值不同, 则抛弃分组.
MAC 的计算包括 IP 头标, 计算前先将可变不可预测域置为 0, 将可变但可预测域设定为到达接收端的预期值, 并保持不变域的值. 但在隧道模式下, 内部 IP 头标的可变域不用设为 0.
封装安全载荷头标 ESP#
ESP 提供加密 (基于填充能提供抗流量分析), 抗重放, 完整性校验 (可选, 不覆盖 IP 头标), 认证功能.
采用对称密码体制加密数据, 使用消息认证码 (MAC) 提供认证和完整性保护服务.

填充的目的: 32 位对齐, 加密算法要求, 分组特定域数值的固定单位要求, 隐藏实际载荷长度.
ESP 的处理#
源端处理:
- 使用分组的相应选择符(目的 IP 地址, 端口, 传输协议等) 查找安全策略数据库(SPD) 获取策略, 如分组需要 IPSec 处理, 且其 SA 已建立, 则与选择符相匹配的 SPD 项将指向安全关联数据库(SAD) 中的相应 SA, 否则则使用 IKE 建立 SA.
- 生成或增加序列号
- 加密分组, SA 指明加密算法, 一般采用对称密码算法
- 计算完整性校验值 (可选)
目的端处理:
- 使用目的 IP 地址, IPSec 协议, SPI 进入 SAD 检索特定 SA, 如果查找失败, 则丢弃分组
- 策略验证: 使用分组的选择符进入 SPD 中查找与之匹配的策略, 根据策略检查该分组是否满足 IPSec 处理要求
- 检查抗重放功能
- 如 SA 指定需要认证, 则检查数据完整性
- 解密

IPSec 的传输模式与隧道模式#
在传输模式中, AH 和 ESP 头标插在 IP 头标及其他选项 (或扩展头标) 之后, 但在传输层协议之前. 为 IP 载荷提供认证, 完整性和机密性.
IP head + AH head + ESP head + payload
在隧道模式下, AH 或 ESP 头标插在 IP 头标之前, 另外生成一个新的 IP 头放在前面, 隧道的起点和终点的网关地址就是新 IP 头的源/目的 IP 地址, 保护整个 IP 分组, 提供认证, 完整性和机密性.
IP head + AH head + ESP head + IP head + payload



单个的 SA 不能够同时支持 AH 和 ESP. 为了满足复杂的安全策略, 调用多个 SA 来为同一个流提供服务. 符合某个特定策略的多个 SA 的组合, 被称为安全关联组合.
组合模式: 传输邻接, 隧道迭代
具有 AH 头标或 ESP 头标的的 IP 分组不能穿越 NAT 和 NATPT.
地址的修改使得接收端的 AH 认证失败.
上层端口号信息的 ESP 加密, 使得端口无法被得知, 无法进行 NAT-PT.
上层 TCP/UDP 中校验和计算涉及伪头标, 包括 IP 地址和端口, 通过 ESP 认证, 校验和字段不能被修改, 上层会校验验证失败.
针对 ESP 问题, IETF 的可行解决方案 (建议): 在 ESP 头标前插入一个 UDP 头标
IPSec 隧道模式的应用: VPN