<!-- title: 5G SUCI隐私保护ECIES加密全链拆解 -->
<!-- domain: security -->

# 5G SUCI 隐私保护与 ECIES 公钥加密机制全链拆解

> 聚焦 TS 33.501 V18.x Section 6.2 / Annex C — 从 SUPI 明文到 SUCI 密文的每一步加密运算、密钥推演与解密还原

---

## 一、为什么需要 SUCI：4G IMSI 的致命缺陷

在 LTE/4G 系统中，UE 在初始附着（Attach）或被 MME 通过 Identity Request 要求上报身份时，**IMSI 以明文形式在空口传输**。这一设计缺陷被 "IMSI Catcher"（又称 Stingray）类伪基站广泛利用：攻击者只需伪装成合法基站广播 PLMN，即可诱导附近终端发送明文 IMSI，进而实现用户身份追踪与位置监控。

5G 系统从根本上解决了这个问题。TS 33.501 Section 6.2 引入了 **SUCI（Subscription Concealed Identifier，订阅隐藏标识符）** 机制：UE 在空口永远不发送明文 SUPI，而是用**归属网络公钥**通过 **ECIES（Elliptic Curve Integrated Encryption Scheme，椭圆曲线集成加密方案）** 对 SUPI 进行加密，生成 SUCI 后传输。只有归属网络中持有对应私钥的 **SIDF（SUPI Identifier De-concealing Function，标识去隐藏功能）** 才能解密还原。

**核心安全目标**：
- **Subscriber Identity Confidentiality（用户身份机密性）**：被动窃听者无法从空口报文中获取 SUPI
- **Unlinkability（不可关联性）**：每次注册使用不同的临时公钥，即使同一用户多次注册，攻击者也无法将多次 SUCI 关联到同一用户
- **Replay Resistance（抗重放）**：由于临时密钥对的随机性，重放旧 SUCI 无法通过验证

---

## 二、SUPI 与 SUCI 的结构对比

### 2.1 SUPI 结构（TS 23.003）

SUPI 是 5G 系统中用户的全局唯一永久标识，分为两种类型：

| SUPI 类型 | 格式 | 说明 |
|-----------|------|------|
| **IMSI-based** | `MCC(3) + MNC(2~3) + MSIN(最大10位)` | 最常见，与 4G IMSI 格式兼容 |
| **NAI-based** | `username@realm` | 用于非 3GPP 接入（如 Wi-Fi） |

IMSI 类型 SUPI 的结构：`SUPI = MCC | MNC | MSIN`，其中：
- **MCC + MNC**：归属网络标识（Home Network ID），即 PLMN ID
- **MSIN**：移动用户识别号（Mobile Subscription Identification Number），**这是需要被加密保护的部分**

### 2.2 SUCI 结构（TS 23.003 Section 28B / TS 33.501 Section 6.2）

```
SUCI = SUPI Type | Home Network ID(MCC+MNC) | Routing Indicator | Protection Scheme ID |
        Home Network Public Key ID | Scheme Output
```

各字段详细说明：

| 字段 | 长度 | 是否加密 | 说明 |
|------|------|----------|------|
| SUPI Type | 4 bits | ❌ 明文 | 0=IMSI, 1=NAI 等 |
| Home Network ID (MCC+MNC) | ~5字节 | ❌ 明文 | 用于路由到归属网络 |
| Routing Indicator | 1~4字节 | ❌ 明文 | USIM 中配置，用于路由到正确 AUSF/UDM |
| Protection Scheme ID | 4 bits | ❌ 明文 | 0=Null, 1=Profile A, 2=Profile B |
| Home Network Public Key ID | 4 bits | ❌ 明文 | 标识使用哪一组公私钥对 |
| **Scheme Output** | 变长 | ✅ **加密** | 包含临时公钥+加密的MSIN+MAC标签 |

**关键设计洞察**：SUCI 的头部字段（SUPI Type、MCC/MNC、Routing Indicator、Scheme ID、Key ID）全部保持**明文传输**。这不是安全漏洞，而是**刻意设计**——服务网络需要这些明文字段将 SUCI 路由到正确的归属网络 SIDF 进行解密，而真正的用户身份信息（MSIN）才被加密保护。

```mermaid
graph TD
    subgraph "SUPI (永久标识)"
        A[MCC] --> B[MNC] --> C[MSIN]
    end
    subgraph "SUCI (隐藏标识)"
        D["SUPI Type<br/>(明文)"] --> E["MCC+MNC<br/>(明文)"] --> F["Routing Ind<br/>(明文)"]
        F --> G["Scheme ID<br/>(明文)"]
        G --> H["Key ID<br/>(明文)"]
        H --> I["Scheme Output<br/>(加密)"]
    end
    C -->|"ECIES加密"| I
    style C fill:#ff6b6b,color:#fff
    style I fill:#51cf66,color:#fff
```

---

## 三、ECIES 加密方案核心机制

### 3.1 ECIES 概述

ECIES（椭圆曲线集成加密方案）是一种基于椭圆曲线密码学的混合加密方案，结合了：
- **ECDH 密钥协商**：推导共享密钥
- **KDF 密钥派生**：从共享密钥推导加密密钥和 MAC 密钥
- **对称加密**：加密明文（MSIN）
- **MAC 消息认证**：保证密文完整性

TS 33.501 Annex C 定义了两个 ECIES Profile：

| 参数 | **Profile A** | **Profile B** |
|------|--------------|--------------|
| 椭圆曲线 | **Curve25519**（Montgomery 曲线） | **secp256r1**（NIST P-256，Weierstrass 曲线） |
| 临时密钥对 | X25519 密钥交换 | ECDSA 密钥对 |
| 共享密钥计算 | X25519(eph_priv, HN_pub) | ECDH(eph_priv, HN_pub) |
| KDF | KDF in TS 33.501 Annex C.3.4.1 | KDF in TS 33.501 Annex C.3.4.2 |
| 加密算法 | AES-128 in GCM mode | AES-128 in GCM mode |
| MAC | AES-GCM Tag（16字节） | AES-GCM Tag（16字节） |
| 临时公钥编码 | **压缩格式**（32字节原始值） | **压缩格式**（33字节，0x02/0x03前缀+x坐标） |

### 3.2 完整 ECIES 加密流程（UE 侧）

以下是 UE 在注册时生成 SUCI 的完整计算过程：

```mermaid
sequenceDiagram
    participant UE as UE/USIM
    participant HN_Pub as Home Network<br/>Public Key
    participant KDF as KDF Function
    participant AES as AES-128-GCM
    participant NET as Network (SIDF)

    Note over UE: 1. 读取USIM中的<br/>HN Public Key + Key ID
    UE->>UE: 2. 生成临时密钥对<br/>(eph_priv, eph_pub)
    UE->>HN_Pub: 3. ECDH密钥协商<br/>shared_secret = eph_priv × HN_pub
    HN_Pub-->>UE: shared_secret
    UE->>KDF: 4. KDF推演<br/>输入: shared_secret + eph_pub
    KDF-->>UE: enc_key(16B) + mac_key(16B) + icb(16B)
    UE->>AES: 5. AES-128-GCM加密<br/>明文=MSIN, Key=enc_key, IV=icb
    AES-->>UE: encrypted_MSIN + MAC_Tag
    UE->>UE: 6. 组装SUCI<br/>Scheme Output = eph_pub + enc_MSIN + MAC_Tag
    UE->>NET: 7. Registration Request<br/>携带 SUCI

    Note over NET: 8. SIDF使用HN Private Key<br/>执行逆向解密流程
```

**逐步详解**：

#### 步骤 1：读取 USIM 参数

USIM 中预置了以下关键参数（定义在 TS 31.102 Section 4.4.5）：

| USIM 文件/字段 | EF 路径 | 说明 |
|----------------|---------|------|
| `EF_USIM_SUPPORT_INFO` | — | 指示 USIM 支持的 Protection Scheme |
| Home Network Public Key | — | 归属网络公钥（32/33字节） |
| Protection Scheme Identifier | — | 1=Profile A, 2=Profile B |
| Home Network Public Key Identifier | — | 公钥标识（0~15） |
| Routing Indicator | — | 路由指示符 |

#### 步骤 2：生成临时密钥对

UE 每次注册时**随机生成**一对新的临时密钥 `(eph_priv, eph_pub)`：
- **Profile A**：使用 Curve25519，eph_priv 为 32 字节随机标量，eph_pub = X25519(eph_priv, G)，其中 G 为基点
- **Profile B**：使用 secp256r1，eph_priv 为 [1, n-1] 范围内的随机整数，eph_pub = eph_priv × G

**安全意义**：临时密钥对保证了**前向安全性**——即使归属网络私钥未来被泄露，攻击者也无法解密此前截获的 SUCI（因为无法恢复已删除的临时私钥），除非攻击者同时记录了完整的空口数据并预先计算了所有可能的共享密钥彩虹表（这在计算上不可行）。

#### 步骤 3：ECDH 密钥协商

计算共享密钥：
```
shared_secret = DH(eph_priv, HN_pub)
```

- **Profile A**：`shared_secret = X25519(eph_priv, HN_pub_x)`，结果为 32 字节
- **Profile B**：`shared_secret = ECDH(eph_priv, HN_pub)`，结果为 32 字节（x 坐标）

#### 步骤 4：KDF 密钥派生（TS 33.501 Annex C.3.4）

KDF 输入参数：

```
KDF Input = FC || P0 || L0 || P1 || L1 || P2 || L2
```

| 参数 | 值 | 说明 |
|------|----|------|
| FC | `0x6B`（Profile A）/ `0x6C`（Profile B） | KDF 算法区分符 |
| P0 | `shared_secret` | ECDH 共享密钥 |
| L0 | `0x00 0x20`（32字节长度） | P0 长度 |
| P1 | `eph_pub`（压缩格式） | 临时公钥 |
| L1 | eph_pub 长度 | P1 长度 |
| P2 | `SUPI Type` | SUPI 类型标识 |
| L2 | `0x00 0x01` | P2 长度 |

**KDF 输出** = SHA-256(KDF Input)，截取前 48 字节，拆分为：
- **enc_key**（字节 0~15）：AES-128 加密密钥
- **mac_key**（字节 16~31）：AES-GCM MAC 密钥（在 GCM 模式下实际上 enc_key 兼任认证密钥）
- **icb**（字节 32~47）：AES-GCM 初始计数器块（Initial Counter Block，IV）

#### 步骤 5：AES-128-GCM 加密

```
输入：
  - Key = enc_key (16字节)
  - IV/ICB = icb (16字节)
  - Plaintext = MSIN（BCD编码的 MSIN 字节序列）
  - Additional Data = eph_pub（临时公钥，用于AEAD关联数据）

输出：
  - Ciphertext = encrypted_MSIN
  - Authentication Tag = MAC_Tag (16字节)
```

AES-GCM 同时提供**加密和完整性保护**：任何对密文或临时公钥的篡改都会导致 MAC_Tag 验证失败。

#### 步骤 6：组装 Scheme Output

```
Scheme Output = eph_pub || encrypted_MSIN || MAC_Tag
```

| 组件 | Profile A 长度 | Profile B 长度 |
|------|---------------|---------------|
| eph_pub | 32 字节 | 33 字节（压缩格式） |
| encrypted_MSIN | = MSIN 长度 | = MSIN 长度 |
| MAC_Tag | 16 字节 | 16 字节 |

#### 步骤 7：完整 SUCI 编码

最终的 SUCI 按 TS 23.003 Section 28B 编码：

```
SUCI = SUPI Type(4bit) | MCC(3digit BCD) | MNC(2~3digit BCD) |
       Routing Indicator(1~4字节) |
       Protection Scheme ID(4bit) |
       Home Network Public Key ID(4bit) |
       Scheme Output(eph_pub || enc_MSIN || MAC_Tag)
```

---

## 四、SIDF 解密流程（网络侧）

SIDF（SUPI Identifier De-concealing Function）部署在归属网络中，通常作为 UDM/ARPF 的一部分。它持有归属网络的**私钥**，负责从 SUCI 中还原 SUPI。

```mermaid
sequenceDiagram
    participant AMF as AMF/SEAF
    participant SIDF as SIDF (UDM)
    participant AUSF as AUSF

    AMF->>SIDF: Nudm_SDM_Get(SUCI)
    Note over SIDF: 1. 解析SUCI头部<br/>提取 Scheme ID, Key ID
    Note over SIDF: 2. 根据 Key ID 选择<br/>对应的HN Private Key
    Note over SIDF: 3. 从 Scheme Output 中<br/>提取 eph_pub
    Note over SIDF: 4. ECDH密钥协商<br/>shared = eph_priv × eph_pub
    Note over SIDF: 5. 执行相同的 KDF<br/>推导 enc_key + icb
    Note over SIDF: 6. AES-128-GCM 解密<br/>验证 MAC_Tag
    alt MAC验证成功
        Note over SIDF: 7. 解密得到 MSIN
        Note over SIDF: 8. 重组 SUPI = MCC+MNC+MSIN
        SIDF->>AMF: 返回 SUPI
        SIDF->>AUSF: 触发5G-AKA认证流程
    else MAC验证失败
        SIDF->>AMF: 返回错误<br/>(SUCI无效/被篡改)
    end
```

**关键步骤说明**：

1. **密钥选择**：SIDF 根据 SUCI 中的 `Home Network Public Key ID` 字段，从密钥库中选择对应的私钥。这支持**多密钥轮换**场景——归属网络可以同时维护多组公私钥对，逐步更新 USIM 中的公钥。

2. **ECDH 逆向计算**：
   ```
   shared_secret = DH(HN_priv, eph_pub)
   ```
   由于 ECDH 的交换律：`DH(eph_priv, HN_pub) = DH(HN_priv, eph_pub)`，SIDF 可以得到与 UE 完全相同的共享密钥。

3. **MAC 验证优先**：AES-GCM 解密时首先验证 Authentication Tag。如果 MAC 不匹配（说明 SUCI 被篡改或是伪造的），直接返回错误，**不会返回任何明文信息**。

---

## 五、Null-Scheme 与降级保护

### 5.1 Null-Scheme（Profile 0）

当 USIM 中**没有预置归属网络公钥**时（如旧卡迁移、紧急呼叫场景），UE 使用 Null-Scheme：

```
SUCI = SUPI Type | MCC | MNC | Routing Indicator | 
       Protection Scheme ID(=0) | 
       Home Network Public Key ID(=0) |
       Scheme Output(=明文MSIN)
```

Null-Scheme 下，MSIN 以**明文形式**直接放入 Scheme Output，**不提供任何隐私保护**。

### 5.2 降级攻击防护

为防止攻击者强制 UE 降级到 Null-Scheme，TS 33.501 规定了以下保护措施：

| 防护措施 | 说明 |
|----------|------|
| USIM 强制优先 ECIES | 如果 USIM 配置了公钥，ME **必须**使用 ECIES 方案 |
| 紧急呼叫例外 | 仅紧急呼叫场景允许使用 Null-Scheme |
| 网络拒绝机制 | 归属网络可以检测并拒绝 Null-Scheme 注册请求 |
| 公钥更新机制 | 通过 USIM OTA 更新推送新的公钥 |

### 5.3 方案选择状态机

```mermaid
stateDiagram-v2
    [*] --> 读取USIM: UE发起注册
    读取USIM --> ECIES加密: USIM中存在<br/>HN Public Key
    读取USIM --> Null_Scheme: USIM中无公钥<br/>或紧急呼叫
    ECIES加密 --> 生成SUCI_ProfileA: Scheme ID=1<br/>(Curve25519)
    ECIES加密 --> 生成SUCI_ProfileB: Scheme ID=2<br/>(secp256r1)
    生成SUCI_ProfileA --> 发送Registration: 携带SUCI
    生成SUCI_ProfileB --> 发送Registration: 携带SUCI
    Null_Scheme --> 发送Registration: 携带明文MSIN的SUCI
    发送Registration --> 等待认证: 等待5G_AKA/EAP_AKA'
    等待认证 --> [*]: 认证成功
```

---

## 六、Profile A vs Profile B 深度对比

| 维度 | **Profile A (Curve25519)** | **Profile B (secp256r1)** |
|------|---------------------------|--------------------------|
| 曲线类型 | Montgomery 曲线 | Weierstrass 曲线（NIST标准） |
| 密钥长度 | 256 bit | 256 bit |
| 公钥编码 | 32 字节原始值 | 33 字节压缩格式（0x02/0x03 前缀） |
| 密钥交换 | X25519（专用标量乘法） | 通用 ECDH |
| 性能 | **约 2x 更快**（X25519 优化） | 标准速度 |
| 安全性 | 128 bit 安全级别 | 128 bit 安全级别 |
| 侧信道抗性 | **天然抗侧信道**（固定时间运算） | 需额外实现常量时间运算 |
| 标准化 | RFC 7748 / RFC 8032 | NIST FIPS 186-4 / ANSI X9.62 |
| KDF FC 值 | `0x6B` | `0x6C` |
| 厂商支持 | 高通、联发科等主流支持 | 爱立信、诺基亚传统支持 |
| 合规性 | 部分政府客户偏好 NIST 曲线 | **政府/军方可接受**（FIPS认证） |

**选择建议**：
- **新部署**：推荐 Profile A（Curve25519），性能更优、实现更简洁、天然抗侧信道攻击
- **受合规约束**：如果目标市场要求 FIPS 140-2/3 认证，选择 Profile B（secp256r1）

---

## 七、KDF 密钥派生函数详解（Annex C.3）

### 7.1 KDF 核心算法

TS 33.501 Annex C.3 定义的 KDF 基于 SHA-256：

```
KEY = KDF(Key, S) = SHA-256(Key || S)

其中 S = FC || P0 || L0 || P1 || L1 || ... || Pn || Ln
```

对于 SUCI ECIES 的具体应用：

```mermaid
graph TD
    A["shared_secret<br/>(32B)"] --> C["SHA-256"]
    B["eph_pub<br/>(32/33B)"] --> C
    C --> D["KDF Output<br/>(48B)"]
    D --> E["enc_key<br/>[0:16]<br/>AES-128密钥"]
    D --> F["mac_key_material<br/>[16:32]<br/>AES-GCM使用"]
    D --> G["icb<br/>[32:48]<br/>初始计数器块"]

    style A fill:#ff922b,color:#fff
    style D fill:#51cf66,color:#fff
    style E fill:#339af0,color:#fff
    style G fill:#845ef7,color:#fff
```

### 7.2 Profile A 的 KDF 特殊处理

Profile A 使用 Curve25519，其临时公钥为 32 字节的原始编码。根据 Thales HSM 文档的说明，**压缩格式的临时公钥必须作为 KDF 的输入**，而不是未压缩格式。这是 TS 33.501 Annex C.3.4.1 的强制要求。

### 7.3 KDF 参数编码示例

假设：
- shared_secret = `0x3939...`（32字节）
- eph_pub = `0xDEAD...`（32字节，Profile A）
- SUPI Type = `0x01`（IMSI-based）

```
KDF Input (Profile A) = 
  0x6B                    // FC
  || shared_secret        // P0 = 32字节
  || 0x00 0x20            // L0 = 32
  || eph_pub              // P1 = 32字节
  || 0x00 0x20            // L1 = 32
  || 0x01                 // P2 = SUPI Type
  || 0x00 0x01            // L2 = 1

SHA-256(KDF Input) → 48字节 → [enc_key | mac_material | icb]
```

---

## 八、SUCI 在 NAS 信令中的位置

### 8.1 Registration Request 中的 SUCI

UE 在 5G NAS Registration Request（TS 24.501 Section 8.2.6）消息中通过 **5GS Mobile Identity IE** 携带 SUCI：

```
5GS Mobile Identity IE:
  ┌──────────────────────────────────────┐
  │ Type of Identity (4bit) = 0 (SUCI)   │
  │ SUPI Format (4bit)                   │
  │ MCC (3 digits, BCD)                  │
  │ MNC (2~3 digits, BCD)               │
  │ Routing Indicator (1~4 bytes)        │
  │ Protection Scheme ID (4bit)          │
  │ Home Network PK ID (4bit)            │
  │ Scheme Output:                       │
  │   ├─ Ephemeral Public Key            │
  │   ├─ Encrypted MSIN                  │
  │   └─ MAC Tag                         │
  └──────────────────────────────────────┘
```

### 8.2 抓包识别要点

使用 Wireshark 抓包时，SUCI 出现在以下位置：

| 协议层 | 消息 | 过滤条件 |
|--------|------|----------|
| 5G NAS | Registration Request | `nas-5gs.reg.msg_type == 0x41` |
| 5G NAS | Identity Response | `nas-5gs.reg.msg_type == 0x5D` |
| NGAP | Initial UE Message | `ngap.procedureCode == 15` |

**Wireshark 显示示例**：
```
5GS Mobile Identity - SUCI
    Type of identity: SUCI (0)
    SUPI Format: IMSI (0)
    MCC: 460
    MNC: 00
    Routing Indicator: 0x0001
    Protection Scheme ID: 1 (ECIES Profile A)
    Home Network PK ID: 1
    Scheme Output: de0a3f... (80 bytes)
        Ephemeral Public Key: de0a3f... (32 bytes)
        Encrypted MSIN: 7b2c4e... (32 bytes)
        MAC Tag: a1f8d0... (16 bytes)
```

---

## 九、完整信令流：从 SUCI 生成到认证完成

```mermaid
sequenceDiagram
    participant UE as UE/USIM
    participant RAN as gNB
    participant AMF as AMF/SEAF
    participant SIDF as SIDF(UDM)
    participant AUSF as AUSF

    Note over UE: USIM读取HN PubKey
    UE->>UE: 生成eph密钥对
    UE->>UE: ECDH→KDF→AES-GCM<br/>加密MSIN生成SUCI
    UE->>RAN: RRC Setup Complete<br/>(携带 NAS Reg Request + SUCI)
    RAN->>AMF: NGAP Initial UE Message<br/>(NAS: Registration Request)
    
    Note over AMF: 解析SUCI头部<br/>获取MCC/MNC/Routing Ind
    AMF->>SIDF: Nudm_SDM_Get(SUCI)
    Note over SIDF: 1.选择HN Private Key<br/>2.ECDH逆向计算<br/>3.KDF推演密钥<br/>4.AES-GCM解密→MSIN<br/>5.重组SUPI
    
    alt 解密成功
        SIDF-->>AMF: SUPI
        SIDF->>AUSF: Nudm_UEAU_Get(SUPI)
        AUSF->>AMF: 5G-AKA认证向量<br/>(AUTN, RAND, HXRES*)
        AMF->>UE: Authentication Request<br/>(RAND, AUTN)
        Note over UE: USIM计算RES*
        UE->>AMF: Authentication Response<br/>(RES*)
        AMF->>AUSF: 验证RES*
        AUSF-->>AMF: 认证成功
        AMF->>UE: Security Mode Command<br/>(启动空口加密)
        AMF->>UE: Registration Accept<br/>(分配5G-GUTI)
    else 解密失败(MAC不匹配)
        SIDF-->>AMF: 错误响应
        AMF->>UE: Registration Reject
    end
```

---

## 十、公钥生命周期管理

### 10.1 公钥预置（TS 31.102 Section 4.4.5）

归属网络公钥在 **USIM 制造阶段**写入，或通过 **OTA（Over-The-Air）更新**推送。USIM 中存储以下关键元素：

| USIM 字段 | 说明 | 必选/可选 |
|-----------|------|-----------|
| Home Network Public Key | ECIES 公钥（32/33字节） | 必选（启用SUCI时） |
| Protection Scheme Identifier | 方案标识（1或2） | 必选 |
| Home Network Public Key Identifier | 公钥 ID（0~15） | 必选 |
| Routing Indicator | 路由指示符 | 必选 |

### 10.2 密钥轮换流程

```mermaid
graph TD
    A["生成新公私钥对<br/>Key_ID = N+1"] --> B["USIM OTA推送<br/>新公钥到终端"]
    B --> C["SIDF加载新私钥<br/>保留旧私钥"]
    C --> D["过渡期：新旧密钥共存<br/>SIDF按Key_ID选择"]
    D --> E["所有USIM更新完成后<br/>SIDF废弃旧私钥"]
    E --> F["密钥轮换完成"]

    style A fill:#339af0,color:#fff
    style F fill:#51cf66,color:#fff
```

**轮换注意事项**：
- 过渡期内 SIDF **必须同时支持多个私钥**（通过 Key ID 区分）
- 旧私钥的废弃时间应晚于全网 USIM 更新完成时间 + 合理缓冲期
- 建议轮换周期 **6~12个月**，具体取决于安全策略

---

## 十一、实战排错指南

### 11.1 常见故障场景

| 故障现象 | 可能原因 | 排查方法 |
|----------|----------|----------|
| Registration Reject（Cause #10）| SIDF 无法解密 SUCI（MAC 验证失败） | 检查 USIM 公钥与 SIDF 私钥是否匹配 |
| Registration Reject（Cause #22）| SUCI 中的 Routing Indicator 路由错误 | 检查 USIM 中 Routing Indicator 配置 |
| Registration Reject（Cause #3）| AMF 无法识别 Home Network ID | 检查 MCC/MNC 配置是否正确 |
| Registration 持续失败 | USIM 公钥损坏或未预置 | 检查 USIM EF 文件完整性 |
| SIDF 解密超时 | Profile 不匹配（UE 用 A，网络期望 B） | 检查 USIM Scheme ID 与网络配置 |

### 11.2 抓包分析 Checklist

1. **确认 SUCI 格式**：检查 `Type of Identity` 是否为 0（SUCI）
2. **检查 Protection Scheme ID**：应为 1 或 2（不应为 0，除非紧急呼叫）
3. **验证 Key ID 一致性**：SUCI 中的 Key ID 必须与 SIDF 密钥库中的条目对应
4. **检查 Scheme Output 长度**：
   - Profile A：≥ 48 字节（32 eph_pub + MSIN + 16 MAC）
   - Profile B：≥ 49 字节（33 eph_pub + MSIN + 16 MAC）
5. **对比前后 SUCI**：同一 UE 多次注册的 eph_pub 应不同（验证临时密钥随机性）
## 十二、与 4G IMSI 保护机制的对比

| 维度 | **4G LTE** | **5G NR** |
|------|-----------|-----------|
| 永久标识 | IMSI（明文传输） | SUPI（**永不**明文传输） |
| 临时标识 | GUTI（网络分配） | 5G-GUTI（网络分配） |
| 初始标识保护 | **无**（IMSI 可能被 Identity Request 触发明文发送） | **ECIES 公钥加密**（SUCI） |
| 加密算法 | 不适用 | ECIES（Curve25519 / secp256r1） |
| IMSI Catcher 防护 | 无（固有漏洞） | **完全防护**（SUPI 永不明文） |
| 前向安全性 | 不适用 | 有（临时密钥对） |
| 标准引用 | TS 33.401 | TS 33.501 Section 6.2 |
| 兼容性 | 5G UE 在 EPS 中仍可能暴露 IMSI | 需要 NITZ/SIB 指示网络支持 SUCI |

---

## 十三、安全增强与 R19 演进方向

### 13.1 已知安全改进

- **R18**：TS 33.501 V18.x 增加了对多公钥标识的支持扩展，允许每个 PLMN 配置多组密钥对
- **R19 讨论方向**：引入**后量子密码学（PQC）** 保护 SUCI 的可能性研究，以应对量子计算对椭圆曲线密码的威胁（Shor 算法）
- **SUCI 重发保护**：某些厂商实现了基于时间戳或序列号的 SUCI 重发检测机制（超出标准范围）

### 13.2 研究论文关注点

IEEE 论文 *"Security Enhancements to Subscriber Privacy Protection Scheme in 5G Systems"*（DOI: 10.1109/ICC42927.2021.9500931）指出：
- SUCI 方案在**主动攻击者**模型下仍存在**linkability** 风险（通过 SUCI 头部的明文字段）
- 建议增加 Routing Indicator 的加密保护或引入可更新凭证

---

## 常见问题

**Q1: SUCI 和 5G-GUTI 的区别是什么？何时使用哪个？**

A: SUCI 用于**初始注册**（UE 没有有效的 5G-GUTI 时），是 SUPI 的加密形态。5G-GUTI 由 AMF 在**注册成功后分配**，用于后续所有信令交互中的临时标识。5G-GUTI 由 AMF 分配和更新（通过 Configuration Update Command），不需要加密，因为它本身就是随机生成的临时标识。

**Q2: Profile A（Curve25519）和 Profile B（secp256r1）能否在同一网络中共存？**

A: 可以。归属网络可以同时支持两个 Profile，通过 USIM 中配置的 Protection Scheme ID 决定 UE 使用哪一个。SIDF 根据 SUCI 中的 Scheme ID 字段选择对应的解密路径。实际部署中，**建议全网统一使用一个 Profile** 以简化运维。

**Q3: 如果归属网络私钥泄露了怎么办？**

A: 需要立即执行密钥轮换：（1）生成新的公私钥对，Key ID 递增；（2）通过 USIM OTA 推送新公钥到所有终端；（3）SIDF 加载新私钥并保留旧私钥用于过渡期。注意：私钥泄露意味着攻击者可以解密**此前截获的**所有 SUCI（如果保存了空口数据），但无法影响未来使用新密钥的通信。这正是**前向安全性**的重要性所在。

**Q4: 紧急呼叫时为什么允许 Null-Scheme？**

A: 紧急呼叫场景下，UE 可能使用没有预置归属网络公钥的 USIM（甚至无 USIM），此时隐私保护让位于生命安全。TS 33.501 规定 Null-Scheme 仅在**没有可用公钥**或**紧急呼叫**时使用，正常商业注册**不应**使用 Null-Scheme。

**Q5: SUCI 的 Scheme Output 中的 eph_pub 每次都不同，网络如何知道这是哪个用户？**

A: SIDF 不需要预先知道"这是谁"。它的职责是**尝试解密**——使用对应 Key ID 的私钥与 eph_pub 做 ECDH，推导出共享密钥后解密 MSIN，重组出完整的 SUPI。解密成功（MAC 验证通过）即可确定用户身份。这就是**非对称加密**的核心优势：UE 不需要与网络预先协商会话密钥。

---

## 参考来源

1. [3GPP TS 33.501 V18.10.0 — Security architecture and procedures for 5G System](https://www.etsi.org/deliver/etsi_ts/133500_133599/133501/18.10.00_60/ts_133501v181000p.pdf) — Section 6.2 (Subscriber privacy), Annex C.3.4 (KDF for ECIES Profile A/B)
2. [NIST CSWP 36A — Protecting Subscriber Identifiers with Subscription Concealed Identifier](https://nvlpubs.nist.gov/nistpubs/CSWP/NIST.CSWP.36A.ipd.pdf) — SUCI 计算流程的完整技术白皮书
3. [5G6G Academy — SUPI vs SUCI: How 5G Protects Subscriber Privacy with ECIES](https://www.5g6gacademy.com/learn/supi-vs-suci) — ECIES Profile A/B 实战解读
4. [Thales HSM — ECIES for 5G](https://thalesdocs.com/gphsm/luna/7/docs/network/Content/sdk/using/ecies_for_5G.htm) — HSM 中 SUCI 解密的实现细节（ICB 推导）
5. [GitHub: s5uishida/note_5g_suci_profile_ab](https://github.com/s5uishida/note_5g_suci_profile_ab) — Profile A/B 的测试数据与计算示例
6. [IEEE — Security Enhancements to Subscriber Privacy Protection Scheme in 5G Systems](https://ieeexplore.ieee.org/document/9498591) — SUCI 安全增强的学术论文分析

---

> 本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵**爱卫生**（微信ID: gprshome201101）维护，聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。
> 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。

> [!tip] 51学通信知识星球
> **星主：爱卫生**（微信：gprshome201101）——公众号「51学通信」创办者，19 年通信行业运维与讲师经验，著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书（各大电商平台有售）。
> **星球定位**：深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域，主打运维岗位与信令分析。
> **当前规模**：5200 篇主题 / 990 个回答，198 元/年。
> **加入福利**：加入星球后请加爱卫生微信，拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题，另有群内分享。
> **AI 加持**：51学通信知识星球已作为 skill 接入 WorkBuddy，使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例，做总结、找文档和 PPT 等场景全覆盖。

![51学通信知识星球海报-扫码加入](https://wiki.500nian.com/images/zhixingqiu_qrcode.png)
