安全协议设计与分析(1)

安全协议设计与分析 ------ 课程笔记

课程:安全协议设计与分析

学院:广州大学 网络空间安全学院

授课教师:王宁 副教授

教材参考:《安全协议分析与设计》(卫剑钒、陈钟)、《安全协议设计与分析》(张文政)


目录

  1. 课程概述与背景
  2. 安全协议基本概念
  3. 安全协议的安全性质与机制
  4. 安全协议的形式化描述与基础示例
  5. 对安全协议的攻击
  6. 安全协议设计目标
  7. 安全协议设计原则
  8. 安全协议设计方法
  9. [DoS 攻击与防御策略](#DoS 攻击与防御策略)

1. 课程概述与背景

1.1 课程目标

  • 掌握常见的安全协议类别、威胁模型、形式化分析方法;
  • 熟悉经典安全协议的安全问题以及攻击方法;
  • 掌握安全协议的设计原则,理解安全协议理论与实践中存在的鸿沟;
  • 认识 TCP/IP 协议的原理、面临的安全问题,以及与安全协议的关系;
  • 掌握安全认证、密钥建立类安全协议的基本原理、设计思想、安全威胁,复现典型攻击方法;
  • 掌握当前流行的安全协议基本原理和安全性分析方法。

1.2 授课计划概览

章节 内容 学时
第一章 安全协议概论(问题背景、基本概念、设计目标与原则) 6
第二章 安全协议基础(密码算法基础、安全多方计算、零知识证明) 8
第三章 安全协议及其典型攻击(密钥交换、安全认证协议分析) 4
第四章 实用安全协议(IPsec、TLS/SSL、匿名通信协议) 8
第五章 安全协议分析方法 2
第六章 安全协议研讨和综合实训 4

1.3 计算机网络面临的安全威胁

计算机网络通信面临的四种基本威胁(按攻击方式分为被动攻击与主动攻击):

复制代码
                         计算机网络威胁
                              │
              ┌───────────────┴───────────────┐
         被动攻击                           主动攻击
     (难以检测,可防范)                 (可检测,难防范)
              │                               │
    ┌─────────┼─────────┐         ┌───────────┼───────────┐
  截获     流量分析             中断/阻断    篡改    伪造    重放
(窃听)  (通信模式分析)         (DoS)    (修改数据) (假数据) (重发数据)
被动攻击
  • 窃听/截获:从网络上窃听他人的通信内容;包括搭线窃听、电磁泄露捕获、信息流分析等。
  • 流量分析:即使内容加密,攻击者仍可通过分析通信模式(谁和谁通信、通信频率、数据量)获取情报。
  • 特点:非常难以检测,但可以通过加密等手段防范。
主动攻击
  • 阻断攻击:在不破坏物理线路的前提下,通过干扰、连接配置等方式阻止通信各方之间的数据交换。
  • 篡改攻击:非法读取数据后进行篡改,使通信用户无法获得真实信息。
  • 伪造攻击:攻击者伪造数据包发给通信各方,导致信息系统无法正常工作或数据错误。
  • 重放攻击:攻击者将窃听到的数据包再度发送给接收方,导致接收方信息系统异常。
  • 拒绝服务攻击 (DoS):利用协议或系统缺陷,耗尽服务方资源使其无法向授权用户提供服务。

1.4 互联网安全与隐私问题

一个经典论断:"On the Internet, nobody knows you're a dog."(1993 年《纽约客》漫画)------但 20 多年后,元数据分析已经能够精确推断用户身份和行为(甚至能判断出是"褐色的拉布拉多犬")。

  • 网络通信可能泄露:通信关系、通信内容、位置信息;
  • HTTPS 仅能保护传输的内容信息,无法隐藏通信关系;
  • 匿名网络(如 Tor)试图解决这一问题,但自身也存在安全漏洞(如链路重构、Cookie 窃取、流量整形等攻击手段)。

2. 安全协议基本概念

2.1 计算机安全通信的层次结构

安全通信建立在分层体系之上,从上到下依次为:

复制代码
┌─────────────────────────────────────┐
│  建筑设施  →  实现层 (Implementation) │  HTTPS, PGP, Tor...
├─────────────────────────────────────┤
│  设计图纸  →  协议与策略层            │  SSL/TLS, IPsec, 访问控制...
│              (Protocols & Policies)  │
├─────────────────────────────────────┤
│  建筑材料  →  密码原语层              │  RSA, DSS, SHA-1...
│              (Cryptographic Primitives)│
├─────────────────────────────────────┤
│  地基     →  理论基础层              │  算法数论、计算复杂性
└─────────────────────────────────────┘

这与 TCP/IP 协议栈的对应关系:

TCP/IP 层 安全方案 典型协议
应用层 应用层安全 HTTPS, DNSSEC, PGP, Tor/I2P
传输层 传输层安全 SSL/TLS(嵌入 TCP 之上)
网络层 网络层安全 IPsec(嵌入 IP 层)
网络接口层 --- ARP/RARP(无内置安全)

关键理解:安全协议可在不同层次实现,各有侧重:

  • 网络层安全 (IPsec):对所有上层应用透明,保护主机到主机的通信;
  • 传输层安全 (SSL/TLS):保护应用到应用的通信,对应用开发者友好;
  • 应用层安全 (HTTPS/PGP/Tor):最灵活,可按需提供细粒度保护,但需要每个应用单独实现。

2.2 安全协议的定义

安全协议(密码协议):以密码学为基础的消息交换协议,目的是在网络环境中提供各种安全服务。

三个核心要素:

  1. 两个或多个通信主体
  2. 通信信道位于非受控的网络环境(不安全)
  3. 基于密码学算法实现安全通信

协议 vs 安全协议:协议是两个或以上参与者为完成特定任务的一系列步骤;安全协议是在此基础上引入密码学机制来保障安全。

2.3 协议运行环境中的角色

角色 说明
参与者 (Participant) 可能是完全信任的人,也可能是攻击者或完全不信任的人
攻击者/敌手 (Attacker/Adversary) 企图破坏协议安全性和正确性的人;可能是合法参与者、外部实体或两者结合;可能是单个实体或合谋的多个实体
可信第三方 (Trusted Third Party, TTP) 被通信双方共同信任的实体,如 CA(证书权威机构)

2.4 安全协议的常见类型

  1. 密钥交换协议:完成会话密钥的建立,基于对称密码体制或非对称密码体制。
  2. 认证协议
    • 数据来源认证:保证数据完整性(非授权改变数据 = 改变数据来源);
    • 实体认证:证实用户身份,防止假冒攻击。
  3. 电子商务协议:保证交易公平性,双方都不能通过损害对方利益来获利。
  4. 安全多方计算协议:分布式环境中各参与方共同安全执行计算任务,保证正确性和各参与方私有输入的秘密性。

3. 安全协议的安全性质与机制

3.1 四大安全性质

性质 含义
机密性 (Confidentiality) 保护机密信息不被未授权个人/实体读取和使用
完整性 (Integrity) 保护信息不被未授权者非法纂改(修改、复制、插入、删除)
认证性 (Authentication) 对等实体鉴别------证实对方身份的真实性;数据源鉴别------对数据单元的来源提供确认
不可否认性 (Non-repudiation) 防止通信实体事后否认曾参与通信(包括发送方否认发送和接收方否认接收)

3.2 五大安全机制

安全性质依赖以下机制来实现:

复制代码
       安全机制
          │
  ┌───┬───┼───┬───┐
  ▼   ▼   ▼   ▼   ▼
 加密 数字 数据 鉴别 公证
      签名 完整性 交换 机制
(1) 加密机制
  • 可逆加密:对称加密(如 AES)、非对称加密(如 RSA);
  • 不可逆加密:散列函数(如 SHA-256),可使用或不使用密钥。
(2) 数字签名机制
  • 采用非对称密钥体制:私钥签名,公钥验证
  • 具备可证实性、不可否认性、不可伪造性、不可重用性
  • 是解决通信双方可能发生争议(否认、冒充、伪造、篡改)的有效方法。
(3) 数据完整性机制
  • 数据单元完整性:判断单个数据单元是否被篡改;
  • 数据单元序列完整性:要求数据编号连续性和时间标记正确性,防止假冒、丢失、重发、插入或修改。
(4) 鉴别交换机制
  • 以交换信息的方式确认实体身份,实现同级之间的身份认证;
  • 如果鉴别结果为否定,会导致连接拒绝/终止,或在安全审计跟踪中增加记录。
(5) 公证机制
  • 第三方公证人(如 CA)参与数字签名、加密和完整性机制;
  • 基于通信双方对第三方的绝对信任,为通信数据的完整性、原发、时间和目的地等性质提供保证。

4. 安全协议的形式化描述与基础示例

4.1 形式化描述约定

符号 含义
M s g n Msg_n Msgn 协议的第 n n n 条消息
A → B A \rightarrow B A→B 消息从 A 发往 B
P K a , P K b PK_a, PK_b PKa,PKb 或 K a , K b K_a, K_b Ka,Kb 相应主体的公钥
S K a , S K b SK_a, SK_b SKa,SKb 或 K a − 1 , K b − 1 K_a^{-1}, K_b^{-1} Ka−1,Kb−1 相应主体的私钥
K a b K_{ab} Kab A 和 B 之间的共享密钥
{ x } K \{x\}_K {x}K 用密钥 K K K 对 x x x 加密(私钥加密 = 签名)
T T T 时间戳 (Timestamp)
N N N Nonce(随机数/"现时",用于检测新鲜性)

4.2 从简单协议到安全协议的演进

第一步:明文通信(不安全)
复制代码
A → B : M
  • 消息 M M M 可能被攻击者窃听或拦截。
第二步:引入加密
复制代码
A → B : {M}K_ab
  • 消息内容被保护,但协议仍然不安全(无法防御重放攻击)。
第三步:引入 Nonce 防御重放攻击
复制代码
1. A → B : A
2. B → A : {Na}K_ab
3. A → B : {Na + 1}K_ab, {Pay Elvis €5}K_ab
  • N a Na Na 是 B 生成的随机数(Nonce),A 必须返回 N a + 1 Na+1 Na+1 证明自己收到了 N a Na Na;
  • 即使在 Nonce 方案下,仍存在复杂重放攻击------攻击者可以多轮运行协议并组合不同轮次的消息。

Nonce 的本质:一个新鲜的、不可预测的随机值,每次协议运行都不同,从而防止攻击者直接重放旧消息。

4.3 攻击者能力模型

攻击者可以:

  • 窃听网络上的消息;
  • 破解已知密钥加密的消息;
  • 构造新的值(Nonce、密钥等);
  • 拦截、篡改、重放消息;
  • 联合以上多种方法构造新消息。

5. 对安全协议的攻击

5.1 攻击类型总览

复制代码
              协议攻击类型
                   │
   ┌───┬───┬───┬───┼───┬───┬───┬───┐
   ▼   ▼   ▼   ▼   ▼   ▼   ▼   ▼   ▼
 窃听 篡改 重放 反射 DoS 类型 密码 证书 协议
                       攻击 分析 操作 交互

5.2 重放攻击 (Replay Attack)

攻击者将之前协议运行中的消息(或部分消息)插入到当前运行的协议中。

示例

复制代码
1. A → B : { Pay Eve €5 }K_ab       // A 发送合法转账
2. E → B : { Pay Eve €5 }K_ab       // 攻击者 E 重放,B 再次转账

防御:使用 Nonce 或时间戳保证消息的新鲜性。

5.3 反射攻击 (Reflection Attack)

消息被重放送回给消息的发送方

示例------存在缺陷的相互认证协议

复制代码
1. A → B : {Na}K
2. B → A : Na, {Nb}K
3. A → B : Nb

攻击过程 (攻击者 E ( B ) E(B) E(B) 冒充 B):

连接 1 (A ↔ E(B)) 连接 2 (E(B) ↔ A)
1. A → E(B) : {Na1}K
1'. E(B) → A : {Na1}K
2'. A → E(B) : Na1, {Na2}K
2. E(B) → A : Na1, {Na2}K
3. A → E(B) : Na2
3'. E(B) → A : Na2

攻击者利用 A 作为"预言机",让 A 自己解密自己的 Nonce,从而成功认证。根本原因:消息 2 没有标识发送者身份。

5.4 类型攻击 (Type Flaw/Confusion Attack)

  • 用户接收到的信息都是二进制串,无法从格式上判断消息的类型;
  • 攻击者用一条消息替换另一条消息,接收者按错误的方式解释接收到的位序列,但仍认为消息有效;
  • 常发生在协议消息的字段结构相似或具有反对称性时。

根源:缺乏明确的类型标签和消息格式区分。

5.5 拒绝服务攻击 (DoS/DDoS)

通过耗尽诚实主体资源使之无法有效运行协议。分为:

  • 带宽消耗型:大量消息占用网络带宽;
  • 资源消耗型:大量请求占用计算/内存资源。
SYN-Flooding 攻击

攻击者伪造源 IP 地址发送大量 SYN 请求,服务器回复 SYN-ACK 后等待 ACK,但永远等不到------大量半开连接耗尽服务器资源。

复制代码
正常三次握手:                   SYN-Flooding:
A → S: SYN                      E → S: SYN (伪造源地址)
S → A: SYN+ACK                  S → ???: SYN+ACK (无人回应)
A → S: ACK                      S: 等待... 资源耗尽

5.6 中间人攻击 (Man-in-the-Middle Attack)

攻击者与通信两端分别建立独立联系,交换所收到的数据。通信双方均认为在直接对话,但整个会话完全被攻击者控制。

5.7 协议交互攻击

同一个密钥被多个协议使用时,攻击者可能利用一个协议中获取的信息攻击另一个协议。

防御

  • 不同协议使用不同密钥;
  • 在消息中添加协议标识(协议名称及版本号)并对其认证。

5.8 安全缺陷的根本原因

  • 对协议目的、需求和概念没有明确认识和准确描述;
  • 运行环境复杂,攻击者无处不在,攻击能力强、手段多;
  • 协议设计者误解或采用了不恰当的技术;
  • 基本协议缺陷:设计中没有或很少防范攻击者(如公钥加密交换消息不能预防中间人攻击);
  • 口令/密钥猜测缺陷:用户选择弱口令,或采用了不安全的伪随机数生成算法。

6. 安全协议设计目标

复制代码
           安全协议设计目标
                │
  ┌─────────────┼─────────────┐
  ▼             ▼             ▼
认证目标     密钥建立目标    其他目标

6.1 认证目标

由弱到强三个层次:

层次 定义
弱身份认证 A 能确信 B 的身份,且 B 确实参与了协议运行(在证据获得时是活动的)。但 B 可能认为自己是在和 C 通信。
强身份认证 A 能建立新鲜的确认:B 知道 A 是 B 的协议对端。
双向认证 双方都能认证对方。若只有一方认证则称为单向认证。

SVO 逻辑的观点 :身份认证 = 确认对方响应了一个挑战(时间戳或 Nonce)------这本质上是一个弱身份认证的定义。

Gollman 的观点:A 收到了一个消息,该消息是 A 发出挑战的响应,且该消息中使用了与 B 相关联的密钥。

6.2 密钥建立目标

良好密钥 (Good Key)

A 确认某会话密钥满足:

  • 新鲜性:密钥是新生成的;
  • 排他性:密钥仅为 A、B(和可信第三方,若存在)所知。
密钥确认 (Key Confirmation)

B 能够确认 A 确实拥有该密钥。

前向安全 (Forward Secrecy)

长期主密钥泄露不会导致过去的会话密钥泄露

实现原理(以密钥传送协议为例):

  • K a − 1 K_a^{-1} Ka−1 和 K b − 1 K_b^{-1} Kb−1 是长期密钥,仅用于签名
  • K T K_T KT 是临时公钥,用于加密会话密钥 K a b K_{ab} Kab;
  • K T K_T KT 及对应私钥在 K a b K_{ab} Kab 建立后即销毁;
  • 即使长期密钥泄露, K a b K_{ab} Kab 仍然安全。

6.3 其他目标

目标 说明
计算效率 减少密码运算量(公钥算法 >> 对称算法)
通信效率 减少消息数量和长度,减少交互轮数
无时间戳 避免时钟同步问题(时钟同步本身也易受攻击),优先使用 Nonce
通用性 协议可用于不同网络层次、不同计算能力设备、不同密码算法

7. 安全协议设计原则

Abadi 和 Needham 提出了设计认证协议的若干原则 AN96。这些原则是非形式化的设计指导,既不是安全的充分条件也不是必要条件,但能有效防止常见攻击。

总览

原则 核心要点
Principle 0 效率------不加密不需要加密的内容
Principle 1 含义明确------消息含义完全由内容决定
Principle 2 声明条件------说清协议适用的前提条件
Principle 3 命名------关键消息中必须明确标识主体身份
Principle 4 加密目的------知道为什么要加密
Principle 5 先签名后加密
Principle 6 时间性------有办法判断消息是否重放
Principle 7 识别------能区分消息属于哪个协议/哪次运行/第几条
Principle 8 信任关系------明确建立协议的信任基础

Principle 0:效率原则

协议必须高效。不要做没有必要的加密,不要包含不需要的信息。

  • 加密不仅保证机密性,还可验证对方是否拥有密钥、绑定数据等;
  • 滥用加密导致运算成本高和协议冗余,且不恰当的加密可能导致错误。

实例------Kerberos 旧版改进

旧版消息 2 使用了双重加密

复制代码
S → A : {KAB, B, L, NA, {KAB, A, L}K_BS}K_AS

新版去除双重加密(昂贵且不必要):

复制代码
S → A : {KAB, B, L, NA}K_AS, {KAB, A, L}K_BS

Principle 1:含义明确原则

每条消息都能清楚地表达其含义,对消息的解析必须完全依赖于消息的内容。

反例------Needham-Schroeder 协议(有缺陷版)

复制代码
1. A → B : E_B(Na, A)
2. B → A : E_A(Na, Nb)
3. A → B : E_B(Nb)

消息 2 E_A(Na, Nb) 的问题:不包含 B 的身份标识,无法证明是 B 发出的。攻击者 C 可以将其转发给 A,让 A 误以为 C 在发起通信。

修正(在消息 2 中添加 B 的身份):

复制代码
2. B → A : E_A(Na, Nb, B)

现在 E_X(Y, Z, W) 的含义明确为:"W 想与 X 通信,通过发送 Y 和 Z"。

Principle 3:命名原则

如果主体身份是关键信息,消息中必须明确包含该主体的名字。

反例------证书传递协议:

复制代码
3. A → B : CA, CB, { {Kab, Ta}K_a^{-1} }K_b

消息 3 中没有包含 A、B 的身份。B 可以冒充 A 欺骗另一个用户 C

复制代码
3'. B(A) → C : CA, CC, { {Kab, Ta}K_a^{-1} }K_c

C 收到后用 A 的公钥验证签名通过,认为 Kab 是 A 发来的。

修正(在签名中包含双方身份):

复制代码
3. A → B : CA, CB, { {A, B, Kab, Ta}K_a^{-1} }K_b

Principle 5:先签名后加密

主体对已加密的消息签名是不可靠的(签名者可能不知道明文内容);先签名后加密既表明主体认可该消息,又保证了机密性。

反例------CCITT X.509 单消息协议

复制代码
A → B : A, {Ta, Na, B, Xa, {Ya}K_b }K_a^{-1}
  • 协议目的:保证 Xa、Ya 的完整性,让 B 得知 A 是产生者,并保证 Ya 的机密性。
  • 问题:B 无法保证 A 知道 Ya 的内容------攻击者 C 可以将 A 的签名去掉,换成自己的签名发给 B,B 会认为 C 认可了 Ya,但实际上 C 根本不知道 Ya。

Principle 6:时间性原则

接收者必须有办法判断消息是否被重放。

时间性保证手段有三种:Nonce、计数器、时间戳,各有注意事项:

手段 注意事项
Nonce 设计者应清楚知道 Nonce 要保证的性质;Nonce 除了新鲜性还常用于绑定主体名(如 Otway-Rees 协议中 N a N_a Na 和 N b N_b Nb)
计数器 如果是可预测的计数器,需进行秘密性保护(否则攻击者可预测并提前获取下一个计数值的合法响应)
时间戳 系统时间差异应远小于消息有效生存时间;时间同步机制应是系统可信计算基 (TCB) 的一部分

计数器漏洞示例------时间同步协议

复制代码
A → S : A, Na
S → A : {Ts, Na}K_as

如果 N a N_a Na 是计数器(可预测),则攻击者 C 可:

  1. 产生 N a + 1 N_a+1 Na+1,发给 S,获得系统时钟消息并保存;
  2. 当 A 下次使用 N a + 1 N_a+1 Na+1 获取时间时,C 将保存的消息传给 A------A 的系统时间被篡改。

修正 :对 N a N_a Na 加密保护,使其不可预测。

Kerberos 中的时钟问题 :时钟过慢的主体会把过期证书当有效证书使用;时钟过快的主体发出的时间戳 T > T 0 T > T_0 T>T0(实际时间为 T 0 T_0 T0),攻击者可在 T T T 附近重放该消息而不被察觉。

Principle 7:识别原则

主体应能从消息格式中判断该消息属于哪个协议、哪次运行、第几条消息。

反例------NSSK 协议 消息 4 和消息 5:

复制代码
Msg4: B → A : {Nb}Kab
Msg5: A → B : {Nb + 1}Kab

这两条消息内容不同但格式相同,如果攻击者重放 Msg4,A 可能将其误解为新的 Msg4。修正(添加明确的协议标识和消息编号):

复制代码
Msg4: B → A : {NSSK, "Message 4", Nb}Kab
Msg5: A → B : {NSSK, "Message 5", Nb}Kab

Principle 8:信任原则

协议设计者应明确:基于怎样的信任关系?为什么基于这种信任?有没有把握保证这种信任?

  • Kerberos:信任服务器及其时间源------若服务器发出错误时间戳,整个系统安全性无法保证。
  • 大嘴青蛙协议 :由 A 产生会话密钥 K a b K_{ab} Kab------这种信任是否被接受?A 能否保证密钥的保密性、不可重复性和不可预测性?

8. 安全协议设计方法

8.1 fail-stop 协议

fail-stop 协议 (Gong & Syverson 提出):当遭遇任何干扰协议正常执行的主动攻击时,协议将立即停止

核心断言:主动攻击不会导致 fail-stop 协议在运行时秘密泄露------因为主动攻击者能做的只是让协议停止,并不能获得比被动攻击者更多的信息。

fail-stop 的定义:如果攻击者对协议中某条消息的发送进行了干扰(伪造、篡改、重放、插入、截断等),则协议后继的消息不再发送。

分析三阶段法
  1. 阶段 1:验证协议的 fail-stop 性质;
  2. 阶段 2:验证秘密假设------分析被动攻击者是否能得到协议中的秘密;
  3. 阶段 3:应用 BAN 类逻辑分析协议。
案例分析:Nessett 协议

原始协议不是 fail-stop 的------攻击者窃听到 Msg1 后可转发给诚实主体 C,C 无法判断是转发的还是 A 直接发来的。

修正 :在 Msg1 中添加 B 的身份: { B , N a , K a b } K a − 1 \{B, N_a, K_{ab}\}K_a^{-1} {B,Na,Kab}Ka−1,这样协议变为 fail-stop。

案例分析:大嘴青蛙协议

原始协议存在重放攻击------S 不能分辨重放的消息。攻击者在收到 Msg2 后可再次发给 S,S 会误以为是 B 发起了新协议运行。

修正:只要第 2 条消息和第 1 条消息在格式上有 1 比特差异,协议就是 fail-stop 的。


9. DoS 攻击与防御策略

9.1 DoS 攻击在安全协议中的表现

ISO/IEC 11770-3 密钥交换协议 为例:

复制代码
1. A → B : {Na, A}K_b    // 攻击者可冒充 A 大量发送 Msg1
2. B → A : {Na, Nb, B, Kab}K_a, SIG_b   // B 进行昂贵的公钥加密和签名运算

攻击者冒充发起方 A 发送大量虚假 Msg1,导致响应方 B:

  • 计算耗尽:每次都要进行公钥加密和签名运算(计算昂贵);
  • 内存耗尽 :每次都要保存 A、 N a N_a Na、 N b N_b Nb、 K a b K_{ab} Kab 等会话状态。

9.2 防御策略总览

复制代码
           DoS 防御策略
                │
  ┌──────┬──────┼──────┬──────┐
  ▼      ▼      ▼      ▼      ▼
无状态   Cookie  弱认证  Client  Failing-
连接                     Puzzle  together

9.3 无状态连接方法

核心思路 :响应方在处理请求时不保存会话状态,将状态信息作为响应消息的一部分发给发起方,发起方在下一条消息中再将其返回。

复制代码
1. I → R : Request
2. R → I : Response, {State_r,i}K_re, HMAC(K_rm, State_r,i)
3. I → R : {State_r,i}K_re, HMAC(K_rm, State_r,i), ...
  • K r e K_{re} Kre 和 K r m K_{rm} Krm 仅为响应方知道的密钥,分别用于机密性保护完整性保护
  • 在确认对方不是 DoS 攻击者之前,响应方保持无状态;
  • 代价:解决了内存耗尽,但计算资源消耗甚至更大(增加了加解密和 HMAC 计算)。

核心思路:协议运行起始,响应方收到请求后发送一小块数据(Cookie),发起方必须在后续消息中包含它。目的是防止攻击者使用假冒网络地址进行 DoS。

原则 要求 实现方式
原则 1 Cookie 必须与特定发起方绑定 在生成时绑定对方的 IP 地址和端口
原则 2 仅响应方可生成被接受的 Cookie 使用本地秘密信息生成和验证
原则 3 Cookie 的生成和检验必须足够快 使用 HMAC 等快速运算
原则 4 只有 Cookie 验证通过后才分配内存资源 Cookie 验证是轻量级的

典型实现

复制代码
Cookie = HMAC(secret, IP-I, IP-R, Port-I, Port-R, context)
  • 每个会话成功后,一定时间内不允许相同的 Cookie 再次出现;
  • 对每个发起方进行资源限制(超过限制的会话数则拒绝);
  • 限制 Cookie 的有效时间(定期改变本地 secret)。
  1. 攻击者使用真实 IP 获取 Cookie 并攻击(DDoS 中常见);
  2. 攻击者使用虚假 IP 发请求,通过路径上窃听/源路由获取 Cookie;
  3. 攻击者窃听发给某 IP 的 Cookie,伪造该 IP 进行攻击。

9.5 Failing-together 方法

核心思路:使发起方计算量 ≥ 响应方计算量,攻击者在试图耗尽响应方资源前先耗尽自己的资源。

实现:基于特殊签名算法(如 SDSS),其特性为:

  • 签名中昂贵部分可预先计算 (包含现时材料 R F R_F RF);
  • 签名验证时需以较昂贵的代价从签名中重构 R F R_F RF。

流程改造(以 ISO/IEC 11770-3 为例):

复制代码
Msg2: B → A : {Na, Nb, B, {Rb, Kba}K_be, SIG_b}
Msg3: A → B : {Na, Nb, B, {A, Kab}K_b}K_a^{-1}, Hash(...Rb...)
  • B 使用 SDSS 签名 SIG b \text{SIG}_b SIGb,其中 R b R_b Rb 是 R F R_F RF;
  • K b a K_{ba} Kba 仅为 B 所知, { R b , K b a } K b e \{R_b, K_{ba}\}K_{be} {Rb,Kba}Kbe 用于无状态
  • A 必须从签名中解出 R b R_b Rb (计算昂贵);
  • B 收到 Msg3 后先解密获得 R b R_b Rb 验证签名的轻量级步骤,再验证 Hash。

局限:对单个攻击者有效,对分布式 DDoS 无能为力。

9.6 Client Puzzle 方法

核心思路:响应方不保存状态,而是发给发起方一个密码学问题(Puzzle),发起方解决后才继续协议。

Puzzle 特性

  • 解答耗费资源,验证十分容易;
  • 难度可灵活调整。
PHC Puzzle(部分散列碰撞问题)

要求对方求解 x x x,使得 x x x 的 Hash 值左边 b b b 比特全为零:

Hash ( x ) = ( left b )    0 ... 0 \text{Hash}(x) = (\text{left } b) \; 0\ldots0 Hash(x)=(left b)0...0

对于理想单向散列函数,只能通过暴力测试 求解,平均需要 2 b 2^b 2b 次尝试。

具体协议

复制代码
1. R 选择 64 位随机数 Ns,发送 Ns 和难度 b
2. I 求解 64 位 Nc 和 64 位 solution,满足:
   Hash(Ns | Nc | solution) = (left b) 0...0
3. I 返回 Nc 和 solution
4. R 验证 Hash 通过后才开始协议运行
Client Puzzle 效果
  • b = 18 b=18 b=18 时,发起方平均需 2 18 ≈ 26 2^{18} \approx 26 218≈26 万次测试;
  • 对于每秒发 10 万消息的攻击者,攻击强度下降约 6 万倍
  • 对于 DDoS,需征集的主机数为原来的上万倍

注意事项

  • N s N_s Ns、 N c N_c Nc 和 Solution 长度不能太小,否则攻击者可预先计算查找表;
  • N s N_s Ns 应定期更新,防止重放攻击。

附录:关键概念速查表

概念 简要解释
Nonce 一次性随机数,保证消息新鲜性,防御重放攻击
前向安全 长期密钥泄露不影响过去会话密钥的安全性
fail-stop 协议 遇主动攻击即停止,防止秘密泄露
Cookie 响应方生成的小块数据,绑定发起方,防御地址伪造 DoS
Client Puzzle 密码学难题,增加发起方计算代价以防御 DoS
PHC Puzzle 部分散列碰撞难题,需暴力求解
SDSS 签名 签名可预计算,验证需重构 R F R_F RF,用于 failing-together 方法
反射攻击 将消息重放回发送方,利用发送方自身解密
类型攻击 利用消息格式不明确,使接收者错误解释消息

参考教材:《安全协议分析与设计》(卫剑钒、陈钟,2010)、《安全协议设计与分析》(张文政,2015)