核心概念与概览
这些签名都是用于保障eSIM远程配置与管理流程中数据的完整性 (Integrity)、真实性 (Authenticity) 和抗抵赖性 (Non-repudiation)。它们通过非对称加密(ECDSA算法)实现,由发送方使用私钥签名,接收方使用公钥验签。
不同签名的作用对象(被签名的数据)、生成方、验签方各不相同,共同构成了一个复杂的信任链。
详细对比表格
| 签名名称 | 作用 | 生成方 | 验签方 | 主要应用场景 |
|---|---|---|---|---|
| euiccSignEPE | 证明eUICC在处理eUICC Package时发生了错误,并保证错误信息的完整性和来源。 | eUICC | eIM | eUICC Package执行错误时,生成错误报告。 |
| euiccSignEPR | 证明eUICC成功处理了eUICC Package,并保证执行结果的完整性和来源。 | eUICC | eIM | eUICC Package执行成功后,返回结果报告。 |
| smdpSignature2 | 证明SM-DP+已经认证了eUICC,并确保后续下载流程的绑定。 | SM-DP+ | eUICC | Profile下载流程中的PrepareDownload阶段。 |
| serverSignature1 | 证明RSP Server(SM-DP+或SM-DS)的身份,并确保认证挑战等信息的完整性。 | SM-DP+ / SM-DS | eUICC | 共同相互认证 (CMAP) 的初始阶段。 |
| euiccCancelSessionSignature | 证明取消会话的请求确实来自eUICC,并确保取消原因等信息的完整性。 | eUICC | SM-DP+ | 取消正在进行的RSP会话(如Profile下载)。 |
| euiccNotificationSignature | 证明通知(非Profile安装结果)确实来自eUICC,并保证其内容完整。 | eUICC | SM-DP+ / SM-DS | 发送其他类型的通知(如用户取消、操作失败等)。 |
| euiccSignPIR | 证明Profile安装结果确实来自eUICC,并保证其内容完整。 | eUICC | SM-DP+ | 通知Profile安装成功或失败的结果。 |
| euiccSignature1 | eUICC在CMAP中向RSP Server证明自己的身份,并回应挑战。 | eUICC | SM-DP+ / SM-DS | 共同相互认证 (CMAP) 中的eUICC认证步骤。 |
| euiccSignature2 | eUICC确认PrepareDownload请求,并绑定一次性密钥,确保后续Profile下载的安全性。 |
eUICC | SM-DP+ | Profile下载流程中的PrepareDownload阶段。 |
| eimSignature | 证明eUICC Package确实来自关联的eIM,并确保其内容的完整性和新鲜度(防重放)。 | eIM | eUICC | eIM发送eUICC Package(包含PSMOs/eCOs)给eUICC。 |
详细说明与版本差异
euiccSignEPE 和 euiccSignEPR
作用与区别:这两个签名是eUICC在处理完eIM下发的eUICC Package后,向eIM返回结果时使用的。
euiccSignEPR用于成功结果,euiccSignEPE用于错误结果。生成方式:eUICC使用其私钥
SK.EUICC.ECDSA对特定数据(euiccPackageResultDataSigned /euiccPackageErrorDataSigned +associationToken)进行签名。生成方:eUICC。
验签方:eIM。eIM使用从
CERT.EUICC.ECDSA中提取的公钥PK.EUICC.ECDSA进行验证。
euiccCancelSessionSignature
- 作用:eUICC用于授权取消一个正在进行的RSP会话。
- 生成方式:eUICC使用其私钥
SK.EUICC.ECDSA对euiccCancelSessionSigned数据对象(包含TransactionID,smdpOid,reason)进行签名。 - 生成方:eUICC。
- 验签方:SM-DP+。SM-DP+使用与该RSP会话关联的
PK.EUICC.ECDSA进行验证。同时,SM-DP+还会验证返回的OID与自己的证书OID是否一致。
euiccNotificationSignature 和 euiccSignPIR
作用与区别:两者都是eUICC生成的、用于通知外部实体(如SM-DP+)的签名。
euiccNotificationSignature用于通用通知,其对tbsOtherNotification数据签名。euiccSignPIR用于Profile安装结果通知,其对ProfileInstallationResultData数据签名。
生成方式:eUICC使用其私钥
SK.EUICC.ECDSA对各自的数据对象进行签名。生成方:eUICC。
验签方:SM-DP+ 或 SM-DS。接收方使用从
CERT.EUICC.ECDSA中提取的公钥PK.EUICC.ECDSA进行验证。
euiccSignature1 和 euiccSignature2
作用与区别:这两个是eUICC在Profile下载流程中使用的关键签名。
euiccSignature1在CMAP中生成,用于向RSP Server证明自己的身份。euiccSignature2在PrepareDownload阶段生成,用于确认下载请求,并绑定一个一次性密钥对(otPK.EUICC.ECKA),确保后续的Bound Profile Package只能由该eUICC解密。
生成方式:
euiccSignature1:eUICC使用私钥SK.EUICC.ECDSA对euiccSigned1数据签名。euiccSignature2:eUICC使用私钥SK.EUICC.ECDSA对euiccSigned2和smdpSignature2的拼接数据签名。
生成方:eUICC。
验签方:SM-DP+。SM-DP+使用
PK.EUICC.ECDSA进行验证。
smdpSignature2
- 作用:在SM-DP+完成对eUICC的认证后,生成此签名,用于向eUICC证明其身份,并绑定后续的Profile下载流程。
- 生成方式:SM-DP+使用其Profile绑定私钥
SK.DPpb.ECDSA对smdpSigned2和euiccSignature1的拼接数据进行签名。 - 生成方:SM-DP+。
- 验签方:eUICC。eUICC使用从
CERT.DPpb.ECDSA中提取的公钥PK.DPpb.ECDSA进行验证,并同时验证CERT.DPpb.ECDSA和认证证书CERT.DPauth.ECDSA属于同一所有者。
serverSignature1
- 作用:在CMAP的第一步,RSP Server(SM-DP+或SM-DS)向eUICC证明自己的身份。
- 生成方式:RSP Server使用其认证私钥(如
SK.DPauth.ECDSA)对serverSigned1数据对象(包含TransactionID,euiccChallenge,serverChallenge,SM-XX Address等)进行签名。 - 生成方:SM-DP+ 或 SM-DS。
- 验签方:eUICC。eUICC使用从
CERT.DPauth.ECDSA中提取的公钥进行验证。
eimSignature
作用:这是eIM管理eUICC Package的核心机制,用于保证下发给eUICC的指令(PSMOs/eCOs)的完整性和来源可信。
生成方式:eIM使用其私钥
SK.EIM.ECDSA对euiccPackageSigned和associationToken的拼接数据进行签名。euiccPackageSigned数据对象包含eimId,eidValue,counterValue, 可选的eimTransactionId, 以及euiccPackage。
如果eIM配置数据中没有配置
associationToken,则使用一个值为零的associationToken(即'84 01 00')进行拼接和签名。生成方:eIM。
验签方:eUICC。eUICC使用从eIM配置数据中获取的
PK.EIM.ECDSA进行验证,并检查EID和counterValue以防止重放攻击。
总结与关键点
- 信任根:这些签名最终都依赖于一个可信的根证书颁发机构(CI),因为所有实体的证书(如
CERT.EUICC.ECDSA,CERT.DPauth.ECDSA,CERT.EIM.ECDSA)都是通过CI证书链进行验证的。 - 签名算法:几乎所有签名都使用 ECDSA 算法,在 SGP.22 v3.0/v3.1 中,部分签名数据对象名称中的
ECDSA被替换为SIG(如CERT.DPauth.SIG,SK.EUICC.SIG),但底层仍是ECDSA,这主要是为了在规范中更清晰地表示该密钥用于签名(Signing)而非密钥协商(Key Agreement)。 associationToken的作用:为euiccSignEPR/euiccSignEPE签名数据的一部分。它充当了eIM和eUICC之间的一个“关联令牌”,进一步增强了安全性。counterValue的作用:eimSignature和euiccPackageSigned中包含counterValue,这是一个由eIM维护的递增计数器,用于防止重放攻击。eUICC会检查接收到的counterValue是否大于之前存储的值。
eUICC 如何获取 PK.EIM.ECDSA
eUICC获取eIM公钥(PK.EIM.ECDSA)的机制,主要依赖于eIM配置数据(EimConfigurationData)的预配置和存储,并非通过动态在线获取。
流程与步骤:
- 预配置:eIM的公钥信息(
PK.EIM.ECDSA或包含该公钥的CERT.EIM.ECDSA)作为eIM配置数据(EimConfigurationData)的一部分,预先配置并存储在eUICC中。 - 存储:eUICC中存储的
EimConfigurationData数据结构包含eimPublicKey(PK.EIM.ECDSA)或eimCertificate(CERT.EIM.ECDSA)字段,同时包含eimId(用于标识关联的eIM)。 - 读取:当eUICC收到来自eIM的eUICC Package(包含
eimSignature)时,eUICC会使用euiccPackageSigned中的eimId来检索其存储的eIM配置数据,从而获取对应的PK.EIM.ECDSA。 - 验签:eUICC使用检索到的
PK.EIM.ECDSA来验证eimSignature。
关键数据结构(来自SGP.32 v1.1):
EimConfigurationData ::= SEQUENCE { |
总结:eUICC是通过本地预配置的eIM配置数据获取PK.EIM.ECDSA的,而不是通过在线接口动态获取。
eIM 平台如何获取 CERT.EUICC.ECDSA
eIM平台获取eUICC证书(CERT.EUICC.ECDSA)的机制,发生在eIM包检索过程或直接配置文件下载的认证流程中。
主要流程(通过IPA间接获取):
- eUICC提供证书:在eUICC与IPA(LPA)交互的
ES10b.AuthenticateServer过程中,eUICC会生成AuthenticateServerResponse,其中包含:euiccSigned1(签名数据)euiccSignature1(eUICC使用SK.EUICC.ECDSA生成的签名)euiccCertificate(CERT.EUICC.ECDSA)eumCertificate(CERT.EUM.ECDSA)
- IPA转发给eIM:IPA收到eUICC的响应后,在调用
ESipa.AuthenticateClient函数时,将euiccCertificate(即CERT.EUICC.ECDSA)和eumCertificate一并转发给eIM。 - eIM存储:eIM接收到这些证书后,将其存储在本地,用于后续的验证(如验证
euiccSignEPR/euiccSignEPE)。
关键代码片段(来自SGP.32 v1.1):
AuthenticateResponseOk ::= SEQUENCE { |
IPA调用ESipa.AuthenticateClient时的输入:
IPA calls ESipa.AuthenticateClient function comprising: |
注意:如果IPA具有minimizeEsipaBytes能力且未提供CERT.EUICC.ECDSA,eIM需要根据收到的euiccSigned1和euiccSignature1等信息,通过其他方式(如eIM内部存储或从CI查询)获取证书。
总结:eIM是通过IPA作为中介,在认证流程(ESipa.AuthenticateClient)中获取eUICC提供的CERT.EUICC.ECDSA,并将其存储在eIM本地,用于后续的验签操作。
签名数据生成过程
签名生成与验签总览表
| 签名名称 | 生成方 | 原始数据拼接方式 | 验签方 | 验签使用的公钥 |
|---|---|---|---|---|
| euiccSignEPR | eUICC | euiccPackageResultDataSigned + associationToken |
eIM | PK.EUICC.ECDSA |
| euiccSignEPE | eUICC | euiccPackageErrorDataSigned + associationToken |
eIM | PK.EUICC.ECDSA |
| smdpSignature2 | SM-DP+ | smdpSigned2 + euiccSignature1 |
eUICC | PK.DPpb.ECDSA |
| serverSignature1 | SM-DP+/SM-DS | serverSigned1 |
eUICC | PK.DPauth.ECDSA |
| euiccSignature1 | eUICC | euiccSigned1 |
SM-DP+/SM-DS | PK.EUICC.ECDSA |
| euiccSignature2 | eUICC | euiccSigned2 + smdpSignature2 |
SM-DP+ | PK.EUICC.ECDSA |
| eimSignature | eIM | euiccPackageSigned + associationToken |
eUICC | PK.EIM.ECDSA |
| euiccNotificationSignature | eUICC | tbsOtherNotification |
SM-DP+/SM-DS | PK.EUICC.ECDSA |
详细签名原型说明
euiccSignEPR & euiccSignEPE
- 原始数据拼接(SGP.32 v1.1/v1.2):
euiccSignEPR:euiccPackageResultDataSigned与associationToken的数据对象拼接。euiccSignEPE:euiccPackageErrorDataSigned与associationToken的数据对象拼接。- 版本差异:在 SGP.32 v1.0.1 中,拼接的是
euiccPackageResultDataSigned与eimSignature。这是重要的升级点,associationToken取代了eimSignature成为签名的一部分。
- 验签: eIM 使用从
CERT.EUICC.ECDSA中提取的PK.EUICC.ECDSA进行验证。 - 规范出处: SGP.32 EuiccPackageResult。
euiccSignEPR and euiccSignEPE SHALL be created using the SK.EUICC.ECDSA and verified using the related PK.EUICC.ECDSA. In case there are more than one SK.EUICC.ECDSA available for signing, the SK.EUICC.ECDSA chaining back to the CI public key identified by the euiccCiPKId of the eIM Configuration Data (of the Associated eIM for which the eUICC Package Result is intended) SHALL be used. euiccSignEPR SHALL apply on the concatenated data objects euiccPackageResultDataSigned and associationToken. euiccSignEPE SHALL apply on the concatenated data objects euiccPackageErrorDataSigned and associationToken.
If no associationToken is configured for the eIM, the associationToken data object SHALL be used with the value set to zero for creating the signature.
The eIM SHALL use the PK.EUICC.ECDSA from CERT.EUICC.ECDSA to verify the signature euiccSignEPR and euiccSignEPE. The eIM SHALL verify CERT.EUICC.ECDSA.
euiccSignEPR和euiccSignEPE应使用SK.EUICC.ECDSA生成,并使用相关的PK.EUICC.ECDSA进行验证。若存在多个可用于签名的SK.EUICC.ECDSA,则应使用链接至eIM配置数据中euiccCiPKId所标识的CI公钥的SK.EUICC.ECDSA。euiccSignEPR应用于拼接后的数据对象euiccPackageResultDataSigned和associationToken。euiccSignEPE应用于拼接后的数据对象euiccPackageErrorDataSigned和associationToken。
若eIM未配置关联令牌,则应使用关联令牌数据对象,并将其值设为零以生成签名。
eIM应使用来自CERT.EUICC.ECDSA的PK.EUICC.ECDSA来验证euiccSignEPR和euiccSignEPE签名。电子身份管理(eIM)应验证CERT.EUICC.ECDSA。
smdpSignature2
- 原始数据拼接:
smdpSigned2(DER编码) 与euiccSignature1(OCTET STRING) 的拼接。 - 验签: eUICC 使用从
CERT.DPpb.ECDSA中提取的PK.DPpb.ECDSA进行验证。 - 规范出处: SGP.32 Direct Profile Download。
Compute the smdpSignature2 over smdpSigned2 and euiccSignature1 using the SK.DPpb.ECDSA.
使用SK.DPpb.ECDSA计算smdpSigned2和euiccSignature1的smdpSignature2。
serverSignature1
- 原始数据拼接:
serverSigned1(DER编码) 数据对象。 - 验签: eUICC 使用从
CERT.DPauth.ECDSA中提取的PK.DPauth.ECDSA进行验证。 - 规范出处: SGP.22 v2.5
3.1.2 Common Mutual Authentication Procedure。
· Compute the serverSignature1 over serverSigned1 using the SK.XXauth.ECDSA.
使用SK.XXauth.ECDSA在serverSigned1上计算serverSignature1。
euiccSignature1
- 原始数据拼接:
euiccSigned1(DER编码) 数据对象。 - 验签: SM-DP+ 或 SM-DS 使用从
CERT.EUICC.ECDSA中提取的PK.EUICC.ECDSA进行验证。 - 规范出处: SGP.22 v2.5
3.1.2 Common Mutual Authentication Procedure。
· Compute the euiccSignature1 over euiccSigned1 using SK.EUICC.ECDSA. When generating the euiccSignature1, the eUICC SHALL use credentials related to the euiccCiPKIdToBeUsed parameter received from the SM-XX.
使用SK.EUICC.ECDSA在euiccSigned1上计算euiccSignature1。在生成euiccSignature1时,eUICC应使用与从SM-XX接收到的euicciPKIdToBeUsed参数相关的凭据。
euiccSignature2
- 原始数据拼接:
euiccSigned2(DER编码) 与smdpSignature2(OCTET STRING) 的拼接。 - 验签: SM-DP+ 使用与该 RSP 会话关联的
PK.EUICC.ECDSA进行验证。 - 规范出处: SGP.22 v2.5 Sub-procedure Profile Download and Installation – Download Confirmation 。
· Compute the euiccSignature2 over euiccSigned2 and smdpSignature2 using SK.EUICC.ECDSA. When generating the euiccSignature2, the eUICC SHALL use the same private key as in the AuthenticateServer response.
使用SK.EUICC.ECDSA通过euiccSigned2和smdpSignature2计算euiccSignature2。在生成euiccSignature2时,eUICC应使用与AuthenticateServer响应中相同的私钥。
eimSignature
- 原始数据拼接 :
euiccPackageSigned(DER编码) 与associationToken(OCTET STRING)的拼接。- 注意:如果
associationToken未配置,则使用一个值为零的associationToken数据对象(即84 01 00)进行拼接。
- 注意:如果
- 验签: eUICC 使用从 eIM 配置数据中获取的
PK.EIM.ECDSA进行验证。 - 规范出处: SGP.32 EuiccPackageRequest 。
The eIM SHALL sign the euiccPackageSigned data object concatenated with the associationToken data object (retrieved from the eIM Configuration Data) to create the eimSignature. If no association token is configured in the eIM Configuration Data, the associationToken data object SHALL be used with the value set to zero (i.e., ‘84 01 00’) for creating the signature.
eIM应将euiccPackageSigned数据对象与关联令牌数据对象(从电子标识管理器配置数据中检索)连接后进行签名,以生成电子标识管理器签名。若电子标识管理器配置数据中未配置关联令牌,则应使用关联令牌数据对象并将其值设置为零(即’84 01 00’)来创建签名。
euiccNotificationSignature
- 原始数据拼接:
tbsOtherNotification(DER编码) 数据对象。 - 验签: SM-DP+ 或 SM-DS 使用从
CERT.EUICC.ECDSA中提取的PK.EUICC.ECDSA进行验证。 - 规范出处: SGP.22 v2.5 Function (ES10b): RetrieveNotificationsList 。
euiccNotificationSignature SHALL be created using the SK.EUICC.ECDSA and verified using the PK.EUICC.ECDSA as described in section 2.6.7.2. euiccNotificationSignature SHALL apply on the tbsOtherNotification data object.
euiccNotificationSignature应使用SK.EUICC.ECDSA创建,并使用PK.EUICC.ECDSA如第2.6.7.2节所述进行验证。euiccNotificationSignature应适用于tbsOtherNotification数据对象。
关键验证点总结
- 信任链校验:验签方在进行签名验证前,必须首先验证签名者证书的完整性和有效性。例如,eUICC 在验证
smdpSignature2前,必须先验证CERT.DPpb.ECDSA的证书链,并确保CERT.DPauth.ECDSA和CERT.DPpb.ECDSA属于同一实体。 - 完整性校验:验签方在验证签名时,会按照相同的拼接方式重新计算待签名的数据,然后用公钥解密签名,比较两者是否一致。
- 防重放攻击:对于
eimSignature,eUICC 会在验证签名后,检查euiccPackageSigned中的counterValue是否大于 eUICC 本地存储的值,以防止重放攻击。 - 上下文一致性:对于
euiccSignature2,SM-DP+ 在验证签名后,还会验证euiccSigned2中的TransactionID是否与当前 RSP 会话的TransactionID一致。