居民健康卡用户卡命令集
《居民健康卡用户卡命令集》由卫生部于2012年2月24日卫办综发〔2012〕26号印发,自2012年2月24日起实施。
居民健康卡用户卡命令集V1.0
目录
1 适用范围
本规范规定了居民健康卡用户卡应支持的功能、复位应答的格式以及卡片的命令与响应列表。
本规范适用于所有制作、发行、使用居民健康卡的医疗卫生机构、第三方联合发卡机构、持卡人和生产企业。
2 规范性引用文件
下列文件中的条款通过本部分的引用而成为本部分的条款。凡是注日期的引用文件,其随后所有的修改单(不包括勘误的内容)或修订版均不适用于本部分,然而,鼓励根据本部分达成协议的各方研究可使用这些文件的最新版本。凡是不注日期的引用文件,其最新版本适用于本部分。
GB/T 16649.4—2010 识别卡 带触点的集成电路卡 第4部分
GB/T 16649.5—2002 识别卡 带触点的集成电路卡 第5部分
ISO/IEC14443 识别卡 非接触式集成电路卡 接近式卡
JR/T 0025—2010 中国金融集成电路(IC)卡规范
卫生部《居民健康卡技术规范》(卫办发〔2011〕60号)
3 定义和缩略语
3.1 定义
3.1.1 居民健康卡(ResidentsHealth Card)
居民健康卡是中华人民共和国居民拥有的,在医疗卫生服务活动中用于身份识别,满足健康信息存储,实现跨地区和跨机构就医、数据交换和费用结算的基础载体,是计算机可识别的CPU卡。
3.1.2 CPU卡(CentralProcessing Unit Card)
带有中央处理器(CPU)、存储单元以及卡片操作系统的集成电路卡。
3.1.3 芯片(Chip)
本规范中特指居民健康卡中用于完成数据处理和存储功能的集成电路器件。
3.1.4 芯片操作系统(COS,CardOperating System)
CPU卡芯片中存储和可运行的,以保护应用数据和程序的机密性和完整性,控制CPU卡芯片与外界信息交换为目的的嵌入式软件。
3.1.5 加密算法(CryptographicAlgorithm)
为了隐藏或显现数据信息内容的变换算法。
3.1.6 对称加密算法(SymmetricCryptographic Algorithm)
加密密钥可以从解密密钥中推算出来,反过来也成立,在大多数算法中加/解密密钥是相同的。
3.1.7 非对称加密算法(AsymmetricCryptographic Algorithm)
加密算法的加密密钥和解密密钥是不一样的,不能由一个密钥推导出另一个密钥。
3.1.8 密钥(Key)
加密转换中控制操作的符号序列。
3.1.9 对称密钥(SymmetricKey)
在对称加密算法中使用的密钥。
3.1.10 非对称密钥(AsymmetricKey)
在非对称加密算法中使用的密钥,包括公钥和私钥。
3.1.11 公钥(PublicKey)
在一个实体使用的非对称密钥对中可以被公众使用的密钥。在数字签名方案中,公钥用于验证。
3.1.12 私钥(PrivateKey)
在一个实体使用的非对称密钥对中仅被该实体使用的密钥。在数字签名方案中,私钥用于签名。
3.1.13 数字签名(DigitalSignature)
对数据的一种非对称加密变换。该变换可以使数据接收方确认数据的来源和完整性,保护数据发送方发出和接收方收到的数据不被第三方篡改,也保护数据发送方发出的数据不被接收方篡改。
3.1.14 生物标识(Biomarker)
人的某种特异性的生物学特征,具有遗传性和终身携带性,如血型。
3.1.15 医学警示(MedicalAlert)
患者在就医、急诊或抢救时需要特别提醒医生注意的信息,包括疾病史、体内装置、药物过敏史、对某些物质的不耐受史等。
3.2 缩略语
以下缩略语和符号表示适用于本规范。
表3-1缩略语和符号列表
4 复位应答
复位应答中历史字节的前8个字节固定为芯片提供机构注册标识(2字节,由国家IC卡注册中心分配的注册标识号)||卡片制造机构注册标识(2字节,由国家IC卡注册中心分配的注册标识号)||卡片序列号(4字节)。
5 命令
在卡片读写过程中,卡片总是处于以下状态之一,在一种状态下,只有某些命令能够被执行。卡片具有的状态如下:
(1) 空闲状态:此时卡片没有获得读写权限;
(2) 安全状态:此时卡片获得了一定的读写授权,可以进行读写操作。
卡片上不同应用之间通过“防火墙”以防止跨过应用进行非法访问,在选择其它应用后,所获得的安全状态消失。卡片通过EXTERNAL AUTHENTICATION命令获得一定的读写授权,当卡片从终端接收到一条命令时,它必须首先检查当前状态是否允许执行该命令。在命令执行成功后,卡片将如表5- 1所示进入另一个状态(或同一个)。
表5- 1说明了命令执行成功后的状态变化。第一行表示命令发出时卡片的当前状态,第一列表示发出的命令,整张表给出的是在当前状态下某个命令执行成功后的状态。
阴影部分表示在卡片处于相应状态时发出此命令是无效的。在这种情况下,卡片不执行该命令。
表5- 1命令执行成功后的状态变化
命令 |
空闲 |
安全 |
SELECT(选择当前应用) |
空闲 |
安全 |
SELECT(选择其它应用) |
空闲 |
空闲 |
EXTERNAL AUTHENTICATION |
安全 |
安全 |
SELECT(选择文件或记录) |
空闲 |
安全 |
READ BINARY(一般二进制文件) |
空闲 |
安全 |
READ RECORD(一般记录文件) |
空闲 |
安全 |
READ BINARY(限制二进制文件) |
N/A |
安全 |
READ RECORD(限制记录文件) |
N/A |
安全 |
ERASE RECORD |
N/A |
安全 |
WRITE RECORD |
N/A |
安全 |
5.1 命令APDU格式
命令APDU的格式如表5-2所示
表5-2命令APDU的结构
命令APDU中发送的数据字节数用Lc(命令数据域的长度)表示。
响应APDU中期望返回的数据字节数用Le(期望数据长度)表示。当Le存在且值为0时,表示需要最大字节数(256字节)。
命令APDU报文的内容见表5-3:
表5-3命令APDU的内容
5.2 响应APDU格式
响应APDU格式由一个变长的条件体和后随两字节长的必备尾组成,见表5-4:
表5-4 响应APDU的结构
Data |
SW1 |
SW2 |
?——条件体——? |
响应APDU的内容见表5- 5:
表5- 5 响应APDU的内容
5.3 基本命令
5.3.1 APPLICATION BLOCK命令
5.3.1.1 定义和范围
APPLICATION BLOCK命令使当前选择的应用失效。
当APPLICATION BLOCK命令成功地完成后,用SELECT命令选择已临时锁定的应用时,将回送状态码 ‘6283’(选择文件无效),同时返回FCI。
对其他命令的影响根据不同应用而定。
5.3.1.2 命令报文
APPLICATION BLOCK命令报文编码见表5-6
表5-6 APPLICATION BLOCK命令报文
5.3.1.3 命令报文数据域
命令报文数据域包括根据《居民健康卡技术规范》第9.4.2章中的规定进行编码的报文鉴别码(MAC)数据元。
5.3.1.4 响应报文数据域
响应报文数据域不存在。
5.3.1.5 响应报文状态码
无论应用是否已经失效,此命令执行成功的状态码是‘9000’。
IC卡可能回送的错误状态码如表5-7所示:
表5-7 APPLICATION BLOCK错误状态
5.3.2 APPLICATION UNBLOCK命令
5.3.2.1 定义和范围
APPLICATION UNBLOCK命令可以对临时锁定的应用解锁,当APPLICATION UNBLOCK命令成功地完成后,用SELECT命令可以正确选择此应用,应用功能同时被恢复。
5.3.2.2 命令报文
APPLICATION UNBLOCK命令报文编码见表5-8:
表5-8 APPLICATION UNBLOCK命令报文
5.3.2.3 命令报文数据域
命令报文数据域包括根据《居民健康卡技术规范》第9.4.2章中的规定进行编码的报文鉴别码(MAC)数据元。
5.3.2.4 响应报文数据域
响应报文数据域不存在。
5.3.2.5 响应报文状态码
此命令执行成功的状态码是‘9000’。
IC卡可能回送的错误状态码如表5-9所示:
表5-9 APPLICATION UNBLOCK错误状态
5.3.3 CARD BLOCK命令
5.3.3.1 定义和范围
CARD BLOCK命令使卡中所有应用永久失效。
当CARD BLOCK命令成功地完成后,所有后续的命令都将回送状态码“不支持此功能”(SW1SW2=‘6A81’),且不执行任何其他操作。
5.3.3.2 命令报文
CARD BLOCK命令报文编码见表5-10:
表5-10 CARD BLOCK命令报文
5.3.3.3 命令报文数据域
命令报文数据域包括根据《居民健康卡技术规范》第9.4.2章中的规定进行编码的报文鉴别代码(MAC)数据元。
5.3.3.4 响应报文数据域
响应报文数据域不存在。
5.3.3.5 响应报文状态码
此命令执行成功的状态码是‘9000’。
IC卡可能回送的错误状态码如表5-11所示:
表5-11 CARD BLOCK错误状态
5.3.4 EXTERNALAUTHENTICATION命令
5.3.4.1 定义和范围
EXTERNAL AUTHENTICATION命令要求IC卡中的应用验证接口设备中保密模块的有效性,以使接口设备获得某种授权。
IC卡的响应包括命令处理状态的回送。
5.3.4.2 命令报文
EXTERNAL AUTHENTICATION命令报文编码见表5-12:
表5-12 EXTERNAL AUTHENTICATION命令报文
代码 |
值 |
CLA |
‘00’ |
INS |
‘82’ |
P1 |
‘00’ |
P2 |
密钥标识符(见表5-12表5-13) |
Lc |
‘11’ |
Data |
鉴别用数据 |
Le |
不存在 |
表5-13定义了命令报文中的密钥标识符:
表5-13密钥标识符的结构
EXTERNAL AUTHENTICATION命令使用的算法参考值(P1)编码为‘00’表示无信息。算法参考值在命令发出之前是已知的。
5.3.4.3 命令报文数据域
命令报文数据域中包含17个字节的数据:
——第1至第8个字节为鉴别数据;
——第9至第16个字节是鉴别所需的原始信息;
——第17个字节表示密钥版本。
其中,鉴别数据根据《居民健康卡技术规范》第9.7.3章中的规定进行编码。
5.3.4.4 响应报文数据域
响应报文数据域不存在。
5.3.4.5 响应报文状态码
此命令执行成功的状态码是‘9000’。
IC卡可能回送的警告状态码如表5-14所示:
表5-14 EXTERNAL AUTHENTICATION警告状态
IC卡可能回送的错误状态码如表5-15所示:
表5-15 EXTERNAL AUTHENTICATION错误状态
5.3.5 GET CHALLENGE命令
5.3.5.1 定义和范围
GET CHALLENGE命令请求一个用于安全相关过程(例如:安全报文、安全鉴别)的随机数。
随机数在使用后失效,不能被下一个命令再次使用。
5.3.5.2 命令报文
GET CHALLENGE命令报文编码见表5-16:
表5-16 GET CHALLENGE命令报文
5.3.5.3 命令报文数据域
命令报文数据域不存在。
5.3.5.4 响应报文数据域
响应报文数据域包括随机数,长度为8字节。
5.3.5.5 响应报文状态码
此命令执行成功的状态码是‘9000’。
IC卡可能回送的错误状态码如表5-17所示:
表5-17GET CHALLENGE错误状态
5.3.6 INTERNALAUTHENTICATION命令
5.3.6.1 定义和范围
INTERNAL AUTHENTICATION命令提供了利用接口设备发来的随机数和自身存储的相关密钥进行数据鉴别的功能。
5.3.6.2 命令报文
INTERNAL AUTHENTICATION命令报文编码见表5-18:
表5-18 INTERNAL AUTHENTICATION命令报文
INTERNAL AUTHENTICATION命令的参数P1和P2为‘00’表示无信息,它们的值是事先确定的。
5.3.6.3 命令报文数据域
命令报文数据域的内容是卡片或应用专用的鉴别数据,包含17个字节的数据:
――第1至第8个字节是过程密钥计算使用的数据,由终端产生;
――第9至第16个字节是鉴别所需的原始信息;
——第17个字节表示密钥版本。
5.3.6.4 响应报文数据域
响应报文数据域内容是相关的鉴别数据,其值根据《居民健康卡技术规范》第9.7.3章中的规定进行计算。
5.3.6.5 响应报文状态码
此命令执行成功的状态码是‘9000’。
IC卡可能回送的警告状态码如表5-19所示:
表5-19 INTERNAL AUTHENTICATION警告状态
IC卡可能回送的错误状态码如表5-20所示:
表5-20 INTERNAL AUTHENTICATION错误状态
5.3.7 READ BINARY命令
5.3.7.1 定义和范围
READ BINARY命令用于读取透明文件的内容(或部分内容)。
5.3.7.2 命令报文
READ BINARY命令报文编码见表5-21
表5-21 READ BINARY命令报文
代码 |
值 |
CLA |
‘00’ |
INS |
‘B0’ |
P1 |
见表5-22 |
P2 |
见表5-22 |
Lc |
不存在 |
Data |
不存在 |
Le |
‘00’或要读出的数据的长度 |
表5-22定义了命令报文中的引用控制参数:
表5-22 READ BINARY命令引用控制参数
5.3.7.3 命令报文数据域
命令报文数据域不存在。
5.3.7.4 响应报文数据域
当Le的值为零时,读出自要读的首字节起的256个字节;如果在读出256个字节前已到达文件最后一个字节,则自要读的首字节起的全部字节将被读出。
5.3.7.5 响应报文状态码
此命令执行成功的状态码是‘9000’。
IC卡可能回送的警告状态码如表5-23所示:
表5-23 READ BINARY警告状态
IC卡可能回送的错误状态码如表5-24所示:
表5-24 READ BINARY错误状态
5.3.8 READ RECORD命令
5.3.8.1 定义和范围
READ RECORD命令读取记录结构的基本文件中指定的记录。
IC卡的响应由回送记录组成。
5.3.8.2 命令报文
READ RECORD命令报文编码见表5-25:
表5-25 READ RECORD命令报文
代码 |
值 |
CLA |
‘00’ |
INS |
‘B2’ |
P1 |
记录号或记录标识符 |
P2 |
引用控制参数(见表5-26) |
Lc |
不存在 |
Data |
不存在 |
Le |
‘00’ 或记录长度 |
记录号的取值范围为‘01’-‘FE’。
表5-26定义了命令报文中的引用控制参数:
表5-26READ RECORD命令引用控制参数
5.3.8.3 命令报文数据域
命令报文数据域不存在。
5.3.8.4 响应报文数据域
所有执行成功的READ RECORD命令的响应报文数据域由读取的记录组成。
5.3.8.5 响应报文状态码
此命令执行成功的状态码是‘9000’。
IC卡可能回送的警告状态码如表5-27所示:
表5-27 READ RECORD警告状态
IC卡可能回送的错误状态码如表5-28所示:
表5-28 READ RECORD错误状态
5.3.9 SELECT命令
5.3.9.1 定义和范围
SELECT命令通过文件名或AID、文件标识符来选择IC卡中的居民健康卡应用环境、DDF或ADF,通过文件标识符来选择ADF中的AEF。
命令执行成功后,居民健康卡应用环境、DDF或ADF、AEF的路径被设定。
除选择AEF外,从IC卡的响应报文应由回送FCI组成。
5.3.9.2 命令报文
SELECT命令报文编码见表5-29:
表5-29 SELECT命令报文
代码 |
值 |
CLA |
‘00’ |
INS |
‘A4’ |
P1 |
引用控制参数(见表5-30) |
P2 |
‘00’第一个或唯一一个文件实例 ‘02’下一个文件实例 |
Lc |
‘05’-‘10’(使用文件名或AID时)或‘02’(使用文件标识符时)或‘00’ |
Data |
文件名、AID、文件标识符或不存在 |
Le |
‘00’ |
表5-30定义了命令报文中的引用控制参数:
表5-30 SELECT命令引用控制参数
如果P1=‘00’并且数据域为空或等于‘3F00’,该命令将选择主控文件(MF)。
5.3.9.3 命令报文数据域
命令报文数据域应包括内容见表5-30。
5.3.9.4 响应报文数据域
除选择AEF外,响应报文中数据域应包括所选择的居民健康卡应用环境、DDF或ADF的FCI。表5-31到表5-33规定了此定义所用的标志。《居民健康卡技术规范》不规定FCI中回送的附加标志。
表5-31定义了成功选择居民健康卡应用环境后回送的FCI:
表5-31 SELECT居民健康卡应用环境的响应报文(FCI)
表5-32定义了成功选择DDF后回送的FCI:
表5-32 SELECT DDF的响应报文(FCI)
表5-33定义了成功选择ADF后回送的FCI:
表5-33SELECT ADF的响应报文(FCI)
5.3.9.5 响应报文状态码
此命令执行成功的状态码是‘9000’。
IC卡可能回送的警告状态码如表5-34所示:
表5-34 SELECT警告状态
IC卡可能回送的错误状态码如表5-35所示:
表5-35 SELECT错误状态
SW1 |
SW2 |
含 义 |
‘67’ |
‘00’ |
P1 P2与Lc不一致 |
‘6A’ |
‘81’ |
不支持此功能 |
‘6A’ |
‘82’ |
未找到文件 |
‘6A’ |
‘86’ |
参数P1 P2不正确 |
‘93’ |
‘03’ |
应用永久锁定 |
5.3.10 UPDATE BINARY命令
5.3.10.1 定义和范围
UPDATE BINARY命令报文使用命令APDU中给定的数据写入或修改透明结构的基本文件的全部或部分数据。当使用校验方式更新二进制文件时,如果尝试次数超过限制时,临时锁定当前应用。
5.3.10.2 命令报文
UPDATE BINARY命令报文编码见表5-36:
表5-36 UPDATE BINARY命令报文
表5-37定义了命令报文中的引用控制参数:
表5-37 UPDATE BINARY命令引用控制参数
5.3.10.3 命令报文数据域
命令报文数据域包括用来写入或更新原有数据的新数据。
5.3.10.4 响应报文数据域
响应报文数据域不存在。
5.3.10.5 响应报文状态码
此命令执行成功的状态码是‘9000’。
IC卡可能回送的错误状态码如表5-38所示:
表5-38 UPDATE BINARY错误状态
5.3.11 UPDATE RECORD命令
5.3.11.1 定义和范围
UPDATE RECORD命令报文用命令APDU中给定的数据添加记录或更改指定的记录。当使用校验方式更新记录时,如果尝试次数超过限制时,临时锁定当前应用。
UPDATE RECORD命令不能对健康应用的住院信息索引文件记录和门诊信息索引文件记录进行更新操作。
对线性结构文件来说,只能使用指定记录号(P1中指定)方式更新记录。
对循环结构文件来说,只能使用“上一个记录”命令选项添加或更新记录,添加或更新后该记录的记录号为1。
5.3.11.2 命令报文
UPDATE RECORD命令报文编码见表5-39:
表5-39UPDATE RECORD命令报文
代码 |
值 |
CLA |
‘00’或‘04’ |
INS |
‘DC’ |
P1 |
指定的记录号(‘01’~‘FE’) |
P2 |
见表5-40 |
Lc |
后续数据域的长度 |
Data |
添加的或更新原有记录的新记录 |
Le |
不存在 |
表5-40定义了命令报文中的引用控制参数:
表5-40 UPDATE RECORD命令引用控制参数
5.3.11.3 命令报文数据域
命令报文数据域由添加的或更新原有记录的新记录组成。
5.3.11.4 响应报文数据域
响应报文数据域不存在。
5.3.11.5 响应报文状态码
命令执行成功的状态码是‘9000’。
IC卡可能回送的错误状态码如表5-41所示:
表5-41 UPDATE RECORD错误状态
5.4 应用命令
5.4.1 ERASE RECORD命令
5.4.1.1 定义和范围
ERASE RECORD命令专用于擦除居民健康应用的住院信息索引文件记录和门诊信息索引文件记录。使用安全报文方式擦除,如果尝试次数超过限制时,临时锁定当前应用。
擦除索引文件记录前,需要获得文件的擦除权限。
5.4.1.2 命令报文
ERASE RECORD命令报文编码见表5-42:
表5-42 ERASE RECORD命令报文
代码 |
值 |
CLA |
‘84’ |
INS |
‘0C’ |
P1 |
指定的记录号 |
P2 |
见表5-43 |
Lc |
‘04’ |
Data |
报文鉴别代码(MAC)数据元;根据《居民健康卡技术规范》第9.4.2章中的规定进行编码。 |
Le |
不存在 |
表5-43定义了命令报文中的引用控制参数:
表5-43 ERASE RECORD命令引用控制参数
5.4.1.3 命令报文数据域
命令报文数据域包括根据《居民健康卡技术规范》第9.4.2章中的规定进行编码的报文鉴别码(MAC)数据元。
5.4.1.4 响应报文数据域
响应报文数据域不存在。
5.4.1.5 响应报文状态码
命令执行成功的状态码是‘9000’。
IC卡可能回送的错误状态码如表5-44所示:
表5-44ERASE RECORD错误状态
5.4.2 WRITE RECORD命令
5.4.2.1 定义和范围
WRITE RECORD命令专用于生效居民健康应用的住院信息索引文件记录和门诊信息索引文件记录,对记录文件写入特定值 ‘00H’。使用安全报文方式写入,如果尝试次数超过限制时,临时锁定当前应用。
写入索引文件记录前,需要获得文件的写入权限。
5.4.2.2 命令报文
WRITE RECORD命令报文编码见表5-45:
表5-45WRITE RECORD命令报文
代码 |
值 |
CLA |
‘84’ |
INS |
‘D2’ |
P1 |
指定的记录号 |
P2 |
见表5-46 |
Lc |
‘04’ |
Data |
报文鉴别代码(MAC)数据元;根据《居民健康卡技术规范》第9.4.2章中的规定进行编码。 |
Le |
不存在 |
表5-46定义了命令报文中的引用控制参数:
表5-46 WRITE RECORD命令引用控制参数
5.4.2.3 命令报文数据域
命令报文数据域包括根据《居民健康卡技术规范》第9.4.2章中的规定进行编码的报文鉴别码(MAC)数据元。
5.4.2.4 响应报文数据域
响应报文数据域不存在。
5.4.2.5 响应报文状态码
命令执行成功的状态码是‘9000’。
IC卡可能回送的错误状态码如表5-47所示:
表5-47WRITE RECORD错误状态