9.2. ISD 与SSD 的关联
在本规范中,可执行加载文件(Executable Load File)和一个安全域相关联,装载时从可执行加载文件实例化的所有应用也都与同一个安全域相关联。
本规范提供了应用迁移功能。应用迁移允许已和某个安全域关联的应用变更为与另一个安全域相关联。
应用迁移另一个好处是:除了可执行加载文件和应用,在可执行加载文件被注册时,
2
可执行加载文件中应用在CMSAC注册表中就是可见的。
为避免混淆可选应用和可执行加载文件中的应用,引入一个新的术语:可执行模块(Executable Module)。可执行模块用来标识可执行加载文件中的一个或多个应用。
应用,包括安全域,可以使用它们关联的安全域所提供的安全信道以及密码服务。应
2
用并不需要预先知道它们所关联安全域的AID:这些信息由CMSAC注册表维护,并由主安全域为应用提供它们所关联安全域的一个引用(reference);同时,由于应用将来可能被执行迁移操作而使得其关联的安全域发生变动,所以应用也不应为方便将来的使用而存储该安全域引用。
迁移意味着一个应用从与一个安全域的关联变更为与另一个不同安全域的关联。 可执行加载文件最初与加载它的那个安全域关联,但它可能立即(在加载过程中进行隐式迁移)或者随后(显式迁移)被迁移到另一个不同的安全域,从而改变关联关系。
2
发卡商安全域即ISD仅仅和他本身相关联,CMSAC规范不对ISD的具体创建过程进行定义。但无论如何,卡片应禁止其他安全域向ISD迁移应用。
一个辅助安全域可能接受或者拒绝一个应用迁移的请求,具体的应用迁移及关联请参照9.4.3中的描述。
综上,在卡片上应用有多种继承关系。每种继承关系的根都是与自己相关联的那个安全域,安全域及应用和可执行加载文件的关联关系如图9.1所示。
22
主安全域(ISD)辅助安全域1(SSD)辅助安全域2(SSD)可执行加载文件B迁移应用A应用B可执行加载文件A 图9.1 ISD与SSD的关联关系 9.3. 安全域服务 利用下述接口实现的安全信道协议参见附录D、E。 9.3.1. 应用访问安全域服务 应用可以访问关联安全域提供的服务。通过使用这些服务,应用根据安全域提供的加密支持来确保个人化和运行时期间的机密性和完整性。本规范定义一般的安全域服务,可能包含有:
? 成功验证卡外实体后启动安全信道的建立; ? 对安全域信道上接收的命令进行解封操作; ? 验证完整性;
? 获得机密数据的原始数据; ? 控制APDU命令序列; ? 对私密数据块进行解密;
? 设置安全级别:对下一个将要接收到的命令或下一个将返回的响应设置完整性和/
或机密性要求;
23
? 复位时关闭安全信道;
? 销毁通过建立安全信道创建的所有秘密信息。 取决于支持的安全信道协议,安全域服务可能包含:
? 对安全信道中发送的响应进行封装(有机密性要求时增加完整性和(或)对原始数
据进行加密); ? 加密私密数据块; ? 控制APDU响应序列。
安全域可能支持并发管理多个安全信道会话(即多个逻辑信道上选择的应用,每一个启动一个安全信道),或限制自己只管理一个安全信道会话,而不关心试图使用该安全域服务的并发选择应用的数目。如果安全域支持并发管理多个安全信道会话,应能区分多个安全信道会话和它们各自的逻辑信道。如果安全域不支持并发管理多个安全信道会话,当在某个逻辑信道上请求打开一个不同于当前安全信道会话的新的安全信道时,安全域将拒绝该请求。
9.3.2. 安全域访问应用服务
安全域能够接收发往其关联应用的STORE DATA命令。安全域在命令转发给应用之前,根据当前安全信道预处理该命令。
9.3.3. 安全域空间管理
卡片可以支持安全域的空间管理,在创建新辅助安全域的时候,卡片应有能力指定辅助安全域所能够管理的卡片空间的最大值。在安全域创建完成后,此值不可修改。
如果安全域的安装指令中包含空间大小参数,卡片应在安全域安装的同时为此安全域划出指定大小的空间,此空间为该安全域独占,其他安全域包括ISD将被禁止使用此空间;如果安全域的安装指令中不存在空间大小参数,那么此安全域将和其他安全域一起共享卡片上未被分配的空间。
在通过安全域执行INSTALL[for load], INSTALL[for install]指令时,安全域应判断所要安装的可执行模块、应用实例所需空间大小。如果超出安全域的剩余空间,卡片应返回错误码。鉴于空间管理方面的考虑,对于指定了空间大小的安全域,不建议支持应用的迁移,其“extradition accept”属性应为false。
卡片应允许卡外实体通过GET_DATA指令获取安全域的剩余空间,如果当前选择的是ISD或者未指定的大小的安全域,则卡片返回剩余共享空间的大小;如果当前选择的是指定大小的安全域,则返回当前安全域的剩余空间。
在安全域被删除之后,其所占空间将会被重新释放。 9.3.4. 应用个人化的支持
应用安装后,需要获得应用的个人化数据,包括自身的密钥和持卡人相关数据。应用能够利用关联安全域提供的安全通信和密钥解密服务来管理该个人化数据的安全加载。这可以通过两种方式实现:1)利用应用访问安全域服务的能力;2)利用安全域访问应用的能力。
24
9.3.4.1. 利用应用访问安全域服务的能力
(1)本地个人化的支持
安全域需要为其直接关联的应用提供安全通信的相关支持。
下图是应用使用其关联安全域提供的服务进行本地个人化的流程图:
主机应用安全域SELECT{{SELECT应用SELECT响应认证过程ProcessSecurity应用专有个人化APDU{应用专有个人化APDUunwrap()Decrypt()执行个人化操作应用专有个人化APDU响应APDU接口CMS2AC API 图9.2 利用应用访问安全域服务的能力进行本地个人化的流程 (2)空中个人化的支持 通过空中方式进行应用的个人化,需要使用到SCP80的机制进行应用个人化操作,SCP80数据域中使用的安全密钥应属于应用所属安全域。 空中的数据结构如下图: SCP80: TS102.225CMS2AC指令 图9.3 空中OTA数据指令数据结构
支持空中个人化的应用首先要求能够支持Toolkit指令,接收空中的PP下载指令;同时应用需要实现对安全域API的调用功能,以支持对安全域服务的使用。
下图是应用进行空中个人化的流程图:
25
主机应用应用个人化密钥加载安全域应用个人化密钥加载应用专有个人化APDU{{DecryptData 应用个人化密钥加载响应应用专有个人化APDU执行个人化操作应用专有个人化APDU响应APDU接口CMS2AC API
图9.4 利用应用访问安全域服务的能力进行本地个人化的流程 空中方式不支持SELECT指令选择应用,而是通过OTA指令的TAR来选择交互的应用。具体对应用进行个人化的操作流程,请参照错误!未找到引用源。. 9.3.4.2. 利用安全域访问应用的能力 (1)本地个人化的支持 对于只支持基本逻辑信道的卡片,允许应用在没有被选择的情况下进行个人化处理。而安全域成为选择应用,安全域代表应用接收命令。安全域在将命令转发给应用之前,将对个人化(STORE DATA)命令进行预处理。 对于支持多个逻辑信道的卡片略有区别:应用可能有多重选择限制,从而造成个人化操作失败。 对于不支持利用安全域访问应用能力的应用,其关联的安全域将拒绝任何发往该应用的STORE DATA指令。 运行规定(Runtime Behavior) 当接收到INSATALL[for personalization]指令以及接下来的STORE DATA指令后,执行应用个人化操作的安全域应当: ? 提供安全通信; ? 签别卡外实体是否为合法应用提供者; ? 根据安全信道级别预处理接下来收到的STORE DATA指令。
2
当接收到要将命令转发到应用的请求后,CMSAC应当: ? 确认卡片生命周期状态非CARD_LOCKED或TERMINATED; ? 检查进行个人化处理的应用没有多重选择限制
? 检查当前选择的安全域是否同进行个人化处理的应用关联 个人化流程
下图是应用在本地个人化时从关联安全域获取数据的流程图:
26