## 3GPP MILENAGE 算法集笔记
### 1. 概述
**MILENAGE** 是 3GPP 为 UMTS 和 LTE 系统设计的认证和密钥生成算法集示例。
- 包含七个安全函数:f1, f1*, f2, f3, f4, f5, f5*
- f1: 网络认证码 MAC-A
- f1*: 重新同步认证码 MAC-S
- f2: 响应 RES
- f3: 机密性密钥 CK
- f4: 完整性密钥 IK
- f5: 匿名密钥 AK
- f5*: 重新同步匿名密钥 AK
- 算法由运营商指定,而非完全标准化。
### 2. 算法框架
MILENAGE 算法集基于以下组件:
- **分组密码加密函数 E[]**:
- 输入:128 位输入 x 和 128 位密钥 k
- 输出:128 位输出 y = E[x]k
- 示例中采用 Rijndael 算法(128 位密钥和块大小)
- **128 位操作符变量 OP**:
- 用于区分不同运营商的算法功能
- 运营商可选择 OP 的值,算法安全性不依赖于 OP 是否公开
### 3. 算法流程
1. **计算 OPc**:
- OPC = OP ⊕ E[OP]K
2. **计算 TEMP**:
- TEMP = E[RAND ⊕ OPC]K
3. **构建 IN1**:
- IN1[0-47] = SQN[0-47]
- IN1[48-63] = AMF[0-15]
- IN1[64-111] = SQN[0-47]
- IN1[112-127] = AMF[0-15]
4. **定义常数 c1-c5 和旋转量 r1-r5**:
- c1: 全零
- c2: 除最后一位外全零
- c3: 除倒数第二位外全零
- c4: 除倒数第三位外全零
- c5: 除倒数第四位外全零
- r1 = 64, r2 = 0, r3 = 32, r4 = 64, r5 = 96
5. **计算输出块 OUT1-OUT5**:
- OUT1 = E[TEMP ⊕ rot(IN1 ⊕ OPC, r1) ⊕ c1]K ⊕ OPC
- OUT2 = E[rot(TEMP ⊕ OPC, r2) ⊕ c2]K ⊕ OPC
- OUT3 = E[rot(TEMP ⊕ OPC, r3) ⊕ c3]K ⊕ OPC
- OUT4 = E[rot(TEMP ⊕ OPC, r4) ⊕ c4]K ⊕ OPC
- OUT5 = E[rot(TEMP ⊕ OPC, r5) ⊕ c5]K ⊕ OPC
6. **生成函数输出**:
- f1: MAC-A = OUT1[0-63]
- f1*: MAC-S = OUT1[64-127]
- f2: RES = OUT2[64-127]
- f3: CK = OUT3[0-127]
- f4: IK = OUT4[0-127]
- f5: AK = OUT2[0-47]
- f5*: AK = OUT5[0-47]
### 4. 实现注意事项
- **OPc 计算位置**:
- 建议在 USIM 外部计算 OPc 并存储,以降低 USIM 复杂度并提高 OP 安全性。
- **自定义分组密码**:
- 可选择其他分组密码,但需确保其安全性。
- 密钥函数需满足特定密码学要求。
- **进一步自定义**:
- 可选择不同的常数 c1-c5 和旋转量 r1-r5,但需保证 (ci, ri) 唯一。
- 建议 c1 为偶数,c2-c5 为奇数。
- **侧信道攻击防护**:
- 需考虑防护差分功耗分析等侧信道攻击。