高效且相互认证的密钥交换技术解析
立即解锁
发布时间: 2025-08-15 02:14:32 阅读量: 17 订阅数: 45 AIGC 

# 高效且相互认证的密钥交换技术解析
## 1. 劫持攻击:挑战 - 响应式密钥交换协议的隐患
在基于挑战 - 响应的相互认证密钥交换协议(MAKEP)中,通常有两个关键要素。其一,是两对挑战 - 响应,用于参与双方的相互认证;其二,是将每一方加密的会话密钥贡献与对方发送的相应挑战数进行“绑定”,这种绑定需足够严格,以确保会话密钥的新鲜性并抵御各类攻击。
以 Jakobsson - Pointcheval MAKEP 协议为例,这是一个用于低功耗客户端(A)与强大服务器(B)之间进行相互认证和密钥交换的协议。在该协议中,A 和 B 各自拥有公钥对,A 的私钥为 a,公钥为 ga,且假设 A 知晓 B 的真实公钥,反之亦然。
### 1.1 Jakobsson - Pointcheval MAKEP 协议流程
1. **预计算阶段**:A 预先计算会话密钥 σ,这是通过 Diffie - Hellman 密钥交换技术与 B 共享的秘密 K 得出的。同时,A 还预计算 B 的预期响应 R 和用于客户端认证的值 r。
2. **协议运行阶段**
- **服务器认证**:A 向 B 发送消息(包含 X 和 r),之后通过检查 B 的响应消息中 R′是否等于 R 来认证 B。
- **客户端认证**:B 选择一个独立随机数 e 发送给 A,A 计算值 d 并返回给 B,B 计算 H1(gd(ga)e) 并与从 A 收到的 r 进行比较。
然而,该协议存在漏洞。B 的挑战数 e 未与任何秘密值或当前会话的先前消息绑定,这使得协议易受劫持攻击。
### 1.2 劫持攻击过程
假设存在一个活跃的攻击者 E,位于 A 和 B 之间,能够拦截和注入消息,且 B 可同时接受来自同一方不同实例的多个会话连接。攻击过程如下:
1. **会话启动**:A 发起会话 S1,发送消息 <X, r>,此消息被 E 窃听。
2. **伪造消息**:E 创建一个包含整数 X′和 r 的新消息,并发送给 B,使 B 认为 A 要同时建立两个会话(S1 和 S2)。
3. **消息篡改与转发**:B 分别为 S1 和 S2 发送响应消息,E 构造一个包含 S1 的正确响应 R′和 S2 的挑战数 e′的消息,并发送给 A,A 误以为这是 S1 的响应,验证后计算并发送 d′,但该消息被 E 转发给 B 作为 S2 的响应。
4. **会话结果**:S1 未完成,最终超时终止;A 认为与 B 建立了安全会话 S1 并共享密钥 K = Xy,而 B 认为与 A 建立了会话 S2 并共享密钥 K′ = X′y,E 可随机选择 x′计算 (X′, K′),从而解密 B 发送给 A 的所有加密消息。
### 1.3 修复方案
为修复认证漏洞,可采用以下两种方案:
1. 修改 d 的计算和验证过程:
```plaintext
d = t − h(e, K)a mod q
r?= H1(gd(ga)h(e,K))
```
其中 h 是一个密码哈希函数。
2. 改变 R 和 R′的计算方式为 H2(gy, X, K, e),但此方法会使 A 无法预计算 R,可能影响协议性能。
## 2. 客户端 - 服务器 MAKEP 协议:新的解决方案
为解决上述协议的安全问题,提出了客户端 - 服务器 MAKEP 协议,用于低功耗客户端与强大服务器之间的相互认证密钥交换。
### 2.1 协议准备
- **服务器**:拥有长期公钥对,私钥为 SKB,公钥为 PKB,公钥公开。
- **客户端**:私钥为 a,公钥为 ga,还从可信权威机构(TA)获得证书 CertA:
```plaintext
CertA = <IDA, g, p, q, ga, SigTA(IDA, g, p, q, ga)>
```
若域参数 (g, p, q) 公开,可从证书中移除。
### 2.2 协议流程
```mermaid
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px;
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px;
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px;
A([客户端 A]):::startend -->|1. 选择 rA, b; 计算 x, β| B([服务器 B]):::startend
B -->|2. 检查证书, 验证 β; 解密 x| A
B -->|3. 选择 rB; 计算 ErA(rB, IDB)| A
A -->|4. 解密消息, 检查 IDB; 计算 σ, y| B
B -->|5. 验证 gy; 计算 K| A
```
1. **客户端操作**
- 选择 rA ← {0, 1}k,b ∈R Zq\{0},计算 x = EPKB(rA) 和 β = gb。
- 发送 CertA、β 和 x 给 B。
2. **服务器操作**
- 检查 CertA,验证 1 < β < p 且 βq ≡ 1 (mod p),若失败则终止协议。
- 解密 x 获得 rA。
- 选择 rB ← {0, 1}k,计算 ErA(rB, IDB) 并发送给 A,同时计算 σ = rA ⊕ rB 并销毁 rA、rB。
3. **客户端后续操作**
- 用 rA 解密消息,检查是否包含正确编码的 IDB,若失败则终止协议。
- 计算 σ = rA ⊕ rB 和 y ≡ ah(σ) + b (mod q),发送 y 给 B,计算会话密钥 K = H(σ) 并接受
0
0
复制全文
相关推荐









