Profile互操作规范入门学习笔记

记忆像一张泛黄的照片,时光荏苒却依然清晰

Posted by yishuifengxiao on 2026-08-27
PEHeader ::= SEQUENCE {
mandated NULL OPTIONAL, -- if set, indicate that the support of this PE is mandatory 如果已设置,则表示此PE的支持是强制性的
identification UInt15 -- Identification number of this PE
}

ProfileElement ::= CHOICE {
header ProfileHeader, -- TAG 'A0'
/* PEs */
genericFileManagement PE-GenericFileManagement, -- TAG 'A1'
pinCodes PE-PINCodes, -- TAG 'A2'
pukCodes PE-PUKCodes, -- TAG 'A3'
akaParameter PE-AKAParameter, -- TAG 'A4'
cdmaParameter PE-CDMAParameter, -- TAG 'A5'
securityDomain PE-SecurityDomain, -- TAG 'A6'
rfm PE-RFM, -- TAG 'A7'
application PE-Application, -- TAG 'A8'
nonStandard PE-NonStandard, -- TAG 'A9'
end PE-End, -- TAG 'AA'
rfu1 PE-Dummy, -- this avoids renumbering of tag values TAG 'AB'
rfu2 PE-Dummy, -- in case other non-file-system PEs are TAG 'AC'
rfu3 PE-Dummy, -- added here in future versions TAG 'AD'
rfu4 PE-Dummy, -- TAG 'AE'
rfu5 PE-Dummy, -- TAG 'AF'

/* PEs related to file system creation using templates defined in this specification */
mf PE-MF, -- TAG 'B0'
cd PE-CD, -- TAG 'B1'
telecom PE-TELECOM, -- TAG 'B2'
usim PE-USIM, -- TAG 'B3'
opt-usim PE-OPT-USIM, -- TAG 'B4'
isim PE-ISIM, -- TAG 'B5'
opt-isim PE-OPT-ISIM, -- TAG 'B6'
phonebook PE-PHONEBOOK, -- TAG 'B7'
gsm-access PE-GSM-ACCESS, -- TAG 'B8'
csim PE-CSIM, -- TAG 'B9'
opt-csim PE-OPT-CSIM, -- TAG 'BA'
eap PE-EAP, -- TAG 'BB'
df-5gs PE-DF-5GS, -- TAG 'BC'
df-saip PE-DF-SAIP, -- TAG 'BD'
df-snpn PE-DF-SNPN, -- TAG 'BE'
df-5gprose PE-DF-5GPROSE, -- TAG 'BF'
iot PE-IoT, -- TAG 'BF01'
opt-iot PE-OPT-IoT, -- TAG 'BF02'
...
}

PE-Dummy ::= SEQUENCE {
}

ProfileHeader ::= SEQUENCE {
major-version UInt8, -- set to 3 for this version of the specification
minor-version UInt8, -- set to 3 for this version of the specification
profileType UTF8String (SIZE (1..100)) OPTIONAL, -- Profile type
iccid OCTET STRING (SIZE (10)), -- ICCID of the Profile
pol OCTET STRING OPTIONAL,
eUICC-Mandatory-services ServicesList,
eUICC-Mandatory-GFSTEList SEQUENCE OF OBJECT IDENTIFIER,
connectivityParameters OCTET STRING OPTIONAL,
eUICC-Mandatory-AIDs SEQUENCE OF SEQUENCE {
aid ApplicationIdentifier,
version OCTET STRING (SIZE(2))
} OPTIONAL,
iotOptions IotOptions OPTIONAL -- details for IoT Minimal Profile, mandatory for IoT Minimal Profiles
}

ProfileElement 中顶层元素含义与作用

根据您提供的 ProfileElement 中的 CHOICE 定义,将这 33 种(含 5 个保留占位符)顶层元素按功能分类,逐一详细说明它们的含义和在 eUICC Profile 安装中的作用。

元数据与控制类(核心入口与终止)

PE 类型 标签 含义与作用
header A0 Profile 头部。必须是第一个元素,包含 Profile 的元数据:版本号(V2/V3)、ICCID、Profile 类型名称、eUICC 必须支持的服务列表(如 USIM、Milenage、Java Card)以及必须支持的模板 ID 列表。eUICC 首先解析它来校验兼容性和初始化安装环境。
end AA 结束标记。必须是最后一个元素,无有效载荷。eUICC 遇到此 PE 后停止解析 Profile 数据,标志着安装包的终结。

安全凭证类(PIN / PUK / ADM)

PE 类型 标签 含义与作用
pinCodes A2 PIN 码配置。定义全局或本地的 PIN(个人识别码)和 ADM(管理员密钥)。每个配置包含密钥引用(如 pinAppl1)、PIN 值(ASCII 码,8 字节)、关联的 PUK 引用、启用状态和重试次数。用于保护文件访问、更新和删除等操作。
pukCodes A3 PUK 解锁码配置。定义与 PIN 对应的 PUK(PIN 解锁码)。当 PIN 连续输错被锁定时,使用 PUK 解锁。每个配置包含 PUK 引用(如 pukAppl1)和 8 字节 ASCII 值。

网络认证算法参数类

PE 类型 标签 含义与作用
akaParameter A4 AKA 认证参数(3GPP 网络)。配置 USIM/ISIM 的鉴权算法(Milenage、TUAK 或测试算法),包含:密钥(Key)、OPc(运营商常数)、SQN 序列号管理参数(增量、老化限制、初始化向量)以及认证计数器最大值。用于 3G/4G/5G 网络接入时的双向鉴权。
cdmaParameter A5 CDMA 认证参数(3GPP2 网络)。配置 CSIM 的 CAVE 算法参数,包含:A-Key(8 字节)、SSD(共享秘密数据 A/B)、HRPD 接入认证数据、简单 IP CHAP 参数和移动 IP 认证参数。用于 CDMA 网络接入。

安全域与远程管理类(GP 核心)

PE 类型 标签 含义与作用
securityDomain A6 安全域(Security Domain)。用于创建 ISD-P(Profile 专属安全域)或 SSD(补充安全域)。包含:应用实例信息(AID)、密钥列表(ENC/MAC/DEK 等多组密钥,支持 DES/AES)、个人化数据(sdPersoData)和开放参数。它是 Profile 安全通信(SCP80/SCP03)和密钥管理的核心。
rfm A7 远程文件管理(Remote File Management)。定义 RFM 实例,允许通过 CAT_TP 或 OTA 远程管理(创建、更新、删除)Profile 内的文件。包含:实例 AID、安全域 AID、TAR 列表、最低安全级别、访问域以及可选的默认 ADF 选择。

应用与扩展类

PE 类型 标签 含义与作用
application A8 应用/小程序安装。用于加载 Java Card 小程序(Applet)。包含:加载包信息(CAP 文件二进制数据、AID、内存限制)、实例列表(类 AID、实例 AID、特权、生命周期状态、应用参数)。可在 Profile 中嵌入增值服务(如支付、身份认证)。
nonStandard A9 非标准专有扩展。承载厂商或特定组织(如 GSMA)的专有数据。包含:颁发者 ID(OID)和任意内容的八位字节串,用于实现规范未覆盖的特殊功能。
genericFileManagement A1 通用文件管理(替代模板方式)。允许通过显式的文件管理命令(创建 FCP、填充偏移、填充内容)来构建文件系统,而不是依赖预定义模板。用于精细控制文件创建,通常与模板方式二选一。

文件系统模板类(NFCC / 基础目录)

PE 类型 标签 含义与作用
mf B0 主文件(MF)。创建 UICC 根目录,包含:EF_PL(优先 PLMN)、EF_ICCIDEF_DIR(应用注册目录)、EF_ARR(访问规则参考)和 EF_UMPC。是所有文件系统的根基,EF_DIR 向终端注册可用的 NAA(如 USIM)。
cd B1 无接触域(Contactless Domain)。创建 DF_CD,包含 EF_LAUNCHPADEF_ICON,用于支持非接触式应用(如 NFC 支付、交通卡)。
telecom B2 电信专用文件(TELECOM DF)。存放与电信业务相关的文件,如:短消息(SMS)、拨号号码(ADN/BDN)、功能设置(RMA/SUME)、图形文件、多媒体消息服务(MMS)等。

网络接入应用类(NAA,重点核心)

PE 类型 标签 含义与作用
usim B3 USIM 应用(3G/4G/5G 核心网络)。创建 ADF_USIM,包含:EF_IMSI(用户标识)、EF_ARR(访问规则)、EF_KEYS(CK/IK 密钥存储)、EF_UST(服务表)、EF_SPN(运营商名称)、EF_ACC(接入控制)、EF_ECC(紧急号码)、EF_LOCI/EF_EPSLOCI(位置信息)等。是所有移动网络接入的基础。
opt-usim B4 可选 USIM 文件。包含 USIM 中非必须但常用的文件,如:EF_MSISDN(电话号码)、EF_GID1/GID2(组标识)、EF_PNN(PLMN 网络名称)、EF_OPL(运营商 PLMN 列表)、EF_EHPLMN(等效 HPLMN)等,用于增强网络选择和用户功能。
isim B5 ISIM 应用(IMS/VoLTE)。创建 ADF_ISIM,包含:EF_IMPI(私有用户标识)、EF_IMPU(公共用户标识)、EF_DOMAIN(归属域名)、EF_IST(ISIM 服务表),用于 IP 多媒体子系统的鉴权和注册。
opt-isim B6 可选 ISIM 文件。包含 ISIM 的额外参数,如:EF_PCSCF(代理 CSCF 地址)、EF_GBA 相关参数、EF_IMS_CONFIG_DATA 等,用于增强 IMS 配置。
gsm-access B8 GSM 接入文件。创建 DF_GSM_ACCESS,包含:EF_KC(GSM 加密密钥)、EF_KCGPRS(GPRS 加密密钥)、EF_CPBCCH(广播信道信息),用于 2G 网络的向后兼容接入。
csim B9 CSIM 应用(CDMA 网络)。创建 ADF_CSIM,包含:EF_IMSI_M/T(IMSI)、EF_AH(鉴权历史)、EF_PRL(首选漫游列表)、EF_OTAPA(空中激活参数),用于 CDMA 网络接入。
opt-csim BA 可选 CSIM 文件。包含 CSIM 的可选参数,如:EF_FDN(固定拨号)、EF_SPNEF_MDN(移动目录号)、EF_HRPDCAP 等,用于增强 CDMA 功能。
eap BB EAP 客户端(认证框架)。创建 DF_EAP,包含:EF_EAPKEYS(EAP 密钥)、EF_EAPSTATUS(状态)、EF_REID/EF_REALM(身份和域),用于支持基于 EAP 的认证(如 Wi-Fi、5G 非 3GPP 接入)。

5G 高级功能类(5G 特色)

PE 类型 标签 含义与作用
df-5gs BC 5GS 专用文件。创建 DF_5GS,包含 5G 核心网特有的文件:EF_5GS3GPPLOCI(5G 位置信息)、EF_SUCI-CALC-INFO(SUCI 计算公钥与加密参数)、EF_UAC-AIC(UAC 接入标识)、EF_OPL5G(5G PLMN 列表)、EF_NSI(网络切片指示)、EF_ROUTING-INDICATOR(路由指示器)等,是 5G SA(独立组网)接入的关键。
df-saip BD SAIP 专用文件(SUCI 计算)。创建 DF_SAIP,包含:EF_SUCI-CALC-INFO-USIM(USIM 侧 SUCI 计算参数)。与 df-5gs 配合,但更专注于隐私保护标识符(SUCI)的派生。
df-snpn BE SNPN 专用文件(独立非公共网络)。用于 5G 专网(如企业/工业 5G 网络)。包含:EF_PWS-SNPN(公共告警系统),支持不依赖公共 PLMN 的专网接入。
df-5gprose BF 5G ProSe 专用文件(邻近服务)。用于 5G 设备直连通信(如车联网 V2X、D2D)。包含:EF_5G-PROSE-ST(服务表)、EF_5G-PROSE-DD(直接发现)、EF_5G-PROSE-U2NRU(U2N 中继)等。
df-5gprose(实际为 BF 之后的扩展,请注意标签 BF 本身对应此,以及后续的 iot/opt-iot 是双字节标签 BF 01/BF 02 见上 同上。

IoT 轻量级类(物联网特殊场景)

PE 类型 标签 含义与作用
iot BF 01(双字节) IoT 最小 Profile。针对资源受限的物联网设备(如传感器、智能表计)设计的轻量级 USIM。它将 MF 和 USIM 的核心文件合并到一个 PE 中,去掉了冗余目录,包含:EF_IMSIEF_ACCEF_KEYS 等,并强制要求 IotOptions(PIX 值)在头部定义。
opt-iot BF 02(双字节) 可选 IoT 文件。为 IoT Profile 提供可选增强文件,如:EF_FDNEF_SMSEF_SPNEF_EPSLOCIEF_5GS3GPPLOCI 等,允许 IoT 设备按需扩展功能(如短信、5G 位置更新)。

保留占位符类(版本兼容)

PE 类型 标签 含义与作用
rfu1 ~ rfu5 AB ~ AF 保留未来使用(Reserved for Future Use)。这些是占位符,没有实际功能(PE-Dummy 为空 SEQUENCE)。它们的存在是为了在规范未来版本中新增非文件系统 PE 时,避免重新编号导致标签混乱,确保向后兼容性。当前版本中遇到它们应被忽略或报错(取决于 eUICC 实现)。

总结:依赖关系与常用组合

在实际商用 Profile 中,通常至少包含:

  • header(头部)
  • mf(主文件根目录)
  • usim(USIM 应用,用于 3G/4G/5G)
  • pinCodespukCodes(安全保护)
  • securityDomain(用于安装后的远程管理和密钥更新)
  • end(终止)

genericFileManagement 与模板方式(mfusim 等)通常互斥,二选一。5G 功能(df-5gsdf-saip)是 5G SA Profile 的必备部分。


PEHeader 中字段的编码顺序

针对 PEHeader 结构,需要先明确一个关键区分:字段在 SEQUENCE 中的编码顺序identification 字段的数值 是两个完全不同的概念。

PEHeader 中字段的编码顺序是绝对强制性的,不能随意改变;但 identification 字段的数值(ID编号)是可以自由分配的(只要保证唯一性)。

以下是详细的法律依据、技术原因和底层机制:

ASN.1 的硬性规定(为什么顺序不能改)

在 ASN.1 的 DER(可区分编码规则) 中,SEQUENCE 的编码顺序由 ASN.1 模块定义中的书写顺序严格决定,解析器(eUICC)是按照位置索引(第1个字段、第2个字段……)来读取数据的。

PEHeader 的定义为:

PEHeader ::= SEQUENCE {
mandated NULL OPTIONAL, -- 第1个字段(隐式标签)
identification UInt15 -- 第2个字段(隐式标签)
}

强制编码顺序必须是:先 mandated(如果存在),后 identification

  • 如果违反顺序(例如把 identification 放在前面):eUICC 的 ASN.1 解码器会把 identification 的整数值(如 0x01)错误地解析为 mandated 字段。而 mandated 定义为 NULL 类型(不携带数据),当解码器发现数据类型不匹配(收到整数而不是空值)时,会直接抛出 bad-values(错误码 3)invalid-parameter(错误码 6),导致 Profile 安装彻底失败。

DER 编码与签名校验的约束(为什么必须严格顺序)

eUICC Profile 安装包在传输前,通常由 SM-DP+(订阅管理器-数据准备)进行数字签名。

  • 加密哈希计算:签名是对整个 Profile 包的二进制原始字节流进行哈希后计算的。
  • 如果改变顺序:即使字段内容完全一样,二进制字节流也会完全不同(因为 TLV 的排列变了)。计算出的哈希值将无法通过 eUICC 的签名验签,Profile 会被判定为“篡改/无效”,安装立即中止。

关于 identification 数值的灵活性(可以“随机”的部分)

虽然编码位置固定,但 identification 字段存储的数值(UInt15) 是可以自由定义的。

  • 定义identification 是 ProfileElement 的唯一标识号(范围 0~32767)。
  • 用途:主要用于 PEStatus 报错时定位是哪个 PE 出了问题(例如“PE ID 5 安装失败”)。
  • 规则:只要在同一个 Profile 包内,所有 PE 的 identification 不重复即可(例如 MF=1,PUK=2,PIN=3,USIM=5,END=99 是常见的习惯用法,但完全可以改为 MF=100,PUK=200)。
  • 注意:虽然在同一个 Profile 中可以有较大自由度,但在某些特定场景(如 PE-RFM 通过 identification 引用)会涉及逻辑依赖,不过这种依赖属于“业务逻辑”而非“编码强制”。

总结对照表

项目 是否可以随机/改变 原因
mandatedidentification 的编码先后顺序 ❌ 绝对不可以 ASN.1 DER 严格要求按定义顺序编码;改变会导致类型解析错误和签名验证失败。
identification 字段内部的数值(如 1、2、99) ✅ 可以自由分配(只要唯一) 该数值仅作为 PE 的索引/标签,由 Profile 生成者自行设定,规范仅要求不重复。

一句话总结:无法也不应改变 mandatedidentification 在二进制流中的排列顺序,但可以将 identification 的值设置为任何喜欢的数字(只要不与其他 PE 冲突)。


多个 ProfileElementPEHeader 里的 identification 值是否可以随机

针对“多个 ProfileElementPEHeader 里的 identification 值是否可以随机”这个问题,答案是:

可以自由选择(近乎随机),但必须严格遵守唯一的强制性规则,绝不能是“完全的、无约束的随机”。

展开来讲,它受以下 3 条硬性规则1 条重要建议 的约束:

硬性规则一:必须全局唯一(最重要)

  • 约束:在同一个 Profile 安装包内,所有出现的 ProfileElementidentification绝对不能重复
  • 原因:规范定义 identification 的主要用途是配合 PEStatus 结构进行错误定位。当 eUICC 在安装某个 PE 时遇到错误(如内存不足、模板不支持),它会返回 PEStatus,其中携带 identification 值来告诉 SM-DP+ 是“ID 为 X 的那个 PE”出了问题。
  • 后果:如果两个 PE 的 ID 相同,eUICC 无法区分是哪一个报错,会导致歧义和诊断失败,安装会被中止。

硬性规则二:必须位于有效数值范围内

  • 约束identification 定义为 UInt15,取值范围是 0 ~ 32767。不能超出这个范围。

硬性规则三:0 值通常不建议使用

  • 虽然规范允许 0,但在绝大多数 ASN.1 编码实践中,0 常被视为“未初始化”或“无效 ID”。为了避免混淆,实际商用 Profile 中通常从 1 开始编号。

关于“是否可以随机”的技术分析

  • 可以“随意选数”:规范没有规定 MF 必须是 1,也没有规定 USIM 必须是 5。可以把 MF 设为 100,USIM 设为 200,PUK 设为 50,只要不重复即可。从 ASN.1 解码器的角度看,identification 只是一个整数容器,它不关心数字是否连续或是否从 1 开始。
  • 但绝不能“丢骰子式随机”
    • 重复风险:如果完全随机生成(比如在 1~32767 中随机取 5 个数),存在极小的概率重复。一旦重复,该 Profile 包是非法的。
    • 逻辑依赖影响:虽然 identification 主要供报错使用,但在某些高级场景(如 GenericFileManagement 中的显式引用,或外部 RFM 脚本寻址)可能会通过 ID 来引用特定的 PE。如果 ID 是完全随机且不记录的,后续维护和远程管理将无从下手。

推荐的工程实践(非强制,但强烈建议)

为了方便人工排查和日志追踪,业界通常遵循语义化编号

  • 范围分段
    • 1 ~ 99:核心系统 PE(如 MF=1, PUK=2, PIN=3, USIM=5, END=99)
    • 100 ~ 199:5G 扩展 PE(如 DF-5GS=100, DF-SAIP=101)
    • 200 ~ 299:应用/小程序 PE
  • 递增分配:按出现顺序递增,避免跳号过大造成视觉混乱。

总结对比表

维度 是否允许 约束条件
数值是否必须连续(如 1,2,3…) ❌ 不必须 可以跳号(如 1, 5, 99)
数值是否必须从 1 开始 ❌ 不必须 可从任意有效值开始(如 100)
数值是否可以重复使用 绝对禁止 全局唯一是硬性要求
是否可以完全随机生成 ⚠️ 技术上可行但危险 必须保证去重;若依赖外部引用,不建议
推荐做法 建议按功能模块分段分配,便于日志溯源 确保唯一性即可

顶级标签的排列顺序

根据提供的示例数据,解码后的顶级标签(即 ProfileElement 的 TLV 标签)顺序为:

A0B0A3A2B2B3AA


对应关系与说明

顺序 标签 对应 ProfileElement PE ID 作用
1 A0 ProfileHeader - 必备开头,提供版本、ICCID、服务列表等元数据
2 B0 PE-MF 1 创建主文件(MF)及基础文件(EF_DIR、EF_ARR 等)
3 A3 PE-PUKCodes 2 定义 PUK 解锁码(PUK1/PUK2/本地PUK)
4 A2 PE-PINCodes 3 定义 PIN 和 ADM(PIN1/PIN2/ADM1)
5 B2 PE-TELECOM 4 创建 TELECOM 目录(链接到 MF 的 ARR)
6 B3 PE-USIM 5 创建 USIM 应用及关键文件(IMSI、UST、SPN 等)
7 AA PE-End 99 终止标志,结束 Profile 解析

为什么是这个顺序(依赖关系)?

  • A0 必须第一,因为 eUICC 需要先读取版本、ICCID 和强制模板列表,才能初始化安装环境。
  • B0 紧随其后,因为 PE-USIM(B3)和 PE-TELECOM(B2)中的 EF_ARR 都通过 linkPath 指向 MF 下的 EF_ARR(文件ID 2F06),所以 MF 必须优先创建。
  • A3/A2(PUK/PIN)可以放在 MF 之后任意位置,它们不依赖文件系统,仅定义安全凭证,本例将它们放在 MF 之后、USIM 之前,也是合理的。
  • B2B3 的顺序没有强制要求,但本例先 TELECOM 后 USIM,两者都依赖 MF,但互不依赖,所以可互换。
  • AA 必须最后,作为结束标记。

是否允许其他顺序?

  • A0 必须第一、AA 必须最后外,某些独立元素(如 PUK/PIN 之间,或不同应用之间)可以互换。
  • 不能违反依赖关系:例如将 B3 放在 B0 之前会导致 USIM 中的链接文件找不到 MF 的 EF_ARR,安装失败。
  • 因此,一个合规的 Profile 安装包必须遵循先元数据 → 先父目录 → 先被引用文件的原则,具体顺序可由生成工具(如 SM-DP+)根据模板定义自动排列,但上述示例顺序是典型且完全正确的。

总结说明

关于示例数据中 A0B0A3 等标签的顺序,结论是:顺序不是绝对固定的(ASN.1 语法未强制),但绝不能随意随机,必须遵循逻辑依赖关系

具体原因和规则如下:

ASN.1 语法层面:不强制标签升序

  • 在 ASN.1 的 DER 编码中,如果顶层结构定义为 SETSET OF,才强制要求按标签(Tag)升序排列。
  • 但本规范中的 Profile 安装包是由 ProfileElement 的 TLV 连续拼接构成(或等价于 SEQUENCE OF ProfileElement)。SEQUENCE OF 保留原始输入顺序,不会像 SET 那样自动排序。
  • 可以验证:示例中标签顺序为 A0(160)B0(176)A3(163)A2(162),并非升序(160, 176, 163, 162 是乱序的),所以它不是 SET OF,因此 ASN.1 编译器不会强制排序。

安装逻辑层面:必须遵循依赖关系(不可随机)

虽然语法不强制,但 eUICC 在安装 Profile 时是顺序解析、顺序执行的,因此依赖关系决定了顺序必须满足

  • ProfileHeader(A0)必须是第一个

    • 它包含 major-versioniccideUICC-Mandatory-GFSTEList(强制模板列表)。
    • eUICC 在安装开始前必须先读取这些元数据,才能正确初始化安装上下文、校验版本和模板兼容性。如果 A0 不在最前面,eUICC 会因缺少关键信息而报错中止。
  • PE-MF(B0)必须先于 PE-USIM(B3)和 PE-TELECOM(B2)

    • PE-USIM(B3)中的 EF_ARR 使用了链接路径 linkPath = '2F06'H,它明确指向 MF 根目录下的 EF_ARR(文件 ID 2F06)。
    • 如果在创建 EF_ARR 链接时,MF 下的 EF_ARR 尚未被创建(即 B0 还没执行),eUICC 会报告“目标文件不存在”错误,导致安装失败。
    • 同理,PE-TELECOM 也会链接到 MF 的访问规则,因此也必须后置。
  • PE-End(AA)必须是最后一个

    • 它标记了整个 ProfileElement 列表的终结。eUICC 遇到它后会停止解析,不再处理后续数据(如果还有,会被忽略或报错)。

哪些可以交换顺序?(独立性较强的 PE)

  • PE-PUKCodes(A3)和 PE-PINCodes(A2) 之间没有依赖关系,它们的顺序可以互换。
  • 同样,如果存在多个互不依赖的应用(例如两个独立的 Applet),它们的顺序也可以调整。

总结对照表

标签 类型 允许的位置限制 原因
A0 ProfileHeader 必须第一 提供全局元数据,是所有后续操作的先决条件
B0 PE-MF 必须在 B2/B3 之前 USIM/TELECOM 的 ARR 链接依赖 MF 下的 EF_ARR(2F06)
A3 / A2 PUK/PIN 可在 B0 之后任意位置 仅定义安全凭证,不依赖文件系统路径
B2 PE-TELECOM 必须在 B0 之后 依赖 MF 的访问规则(链接路径)
B3 PE-USIM 必须在 B0 之后 依赖 MF 的访问规则(链接路径)
AA PE-End 必须最后 终止标志,结束安装包解析

结论

不能随机排序。虽然 ASN.1 规范本身没有强制编号递增,但 eUICC 的安装器是状态机顺序执行的,文件系统的创建必须遵循“父目录先于子目录”、“被引用文件先于引用文件”的原则。一个合规的 Profile 生成工具(如 SM-DP+)必须按照上述依赖关系生成 Profile,否则会导致 eUICC 安装失败并返回错误状态(如 template-not-supportedbad-values)。