居民健康卡应用规范
《居民健康卡应用规范》由卫生部于2012年2月24日卫办综发〔2012〕26号印发,自2012年2月24日起实施。
居民健康卡应用规范V1.0
1 适用范围
本规范规定了居民健康卡的文件结构、数据元以及数据对象列表,描述了居民健康卡各项操作的流程,明确了在不同应用场景下进行数据交换、信息传输以及数据签名和验证的过程。
本规范适用于所有制作、发行、使用居民健康卡的医疗卫生机构、第三方联合发卡机构、持卡人和生产企业,以及居民健康卡应用系统的研制、维护等单位和部门。
2 规范性引用文件
下列文件中的条款通过本部分的引用而成为本部分的条款。凡是注日期的引用文件,其随后所有的修改单(不包括勘误的内容)或修订版均不适用于本部分,然而,鼓励根据本部分达成协议的各方研究可使用这些文件的最新版本。凡是不注日期的引用文件,其最新版本适用于本部分。
GB/T 2260—2007 中华人民共和国行政区划代码
GB/T 2261.1—2003 人的性别代码
GB/T 2261.2—2003 婚姻状况代码
GB/T 2312—1980 信息交换用汉字编码字符集——基本集
GB 3304—1991 中国各民族名称的罗马字母拼写法和代码
GB/T 4658—2006 学历代码
GB/T 6565—2009 职业分类与代码
GB 11643—1999 公民身份号码
GB 11714—1997 全国组织机构代码编制规则
GB/T 16649.4—2010 识别卡带触点的集成电路卡第4部分
GB/T 16649.5—2002 识别卡带触点的集成电路卡第5部分
ICD-9-CM 国际疾病分类第九版临床修订
ICD-10 国际疾病与相关健康问题分类代码第十版
ISO/ IEC 14443 识别卡非接触式集成电路卡接近式卡
ISO/IEC 7811/2—2001 识别卡记录技术第2部分
GA 324.1—2001 户口类别代码
WS 363—2011 卫生信息数据元目录
WS 364—2011 卫生信息数据元值域代码
WS 365—2011 城乡居民健康档案基本数据集
JR/T 0025—2010 中国金融集成电路(IC)卡规范
卫生部《居民健康卡技术规范》(卫办发〔2011〕60号)
卫生部《居民健康卡用户卡命令集 V1·0》
卫生部《居民健康卡安全存取模块(SAM)卡技术规范 V1·0》
卫生部《居民健康卡安全存取模块(SAM)卡命令集 V1·0》
3 定义和缩略语
3.1 定义
3.1.1 应用(Application)
IC卡和终端之间的应用协议和相关的数据集。
3.1.2 命令(Command)
终端向IC卡发出的一条信息,该信息启动一个操作或请求一个应答。
3.1.3 接口设备(InterfaceDevice)
终端上插入IC卡的部分,包括其中的机械和电气部分。
3.1.4 响应(Response)
IC卡处理完收到的命令报文后,返回给终端的报文。
3.1.5 终端(Terminal)
为完成居民健康卡交易而在交易点安装的设备,用于同IC卡的连接。它包括接口设备,也可包括其它部件和接口,例如与主机通讯的接口。
3.1.6 居民健康卡(ResidentsHealth Card)
居民健康卡是中华人民共和国居民拥有的,在医疗卫生服务活动中用于身份识别,满足健康信息存储,实现跨地区和跨机构就医、数据交换和费用结算的基础载体,是计算机可识别的CPU卡。
3.1.7 CPU卡(CentralProcessing Unit Card)
带有中央处理器(CPU)、存储单元以及卡片操作系统的集成电路卡。
3.1.8 卡片操作系统(COS,CardOperating System)
CPU卡芯片中存储和运行的,以保护应用数据和程序的机密性和完整性,控制CPU卡芯片与外界信息交换为目的的嵌入式软件。
3.1.9 加密算法(CryptographicAlgorithm)
为了隐藏或显现数据信息内容的变换算法。
3.1.10 对称加密算法(SymmetricCryptographic Algorithm)
加密密钥可以从解密密钥中推算出来,反过来也成立,在大多数算法中加/解密密钥是相同的。
3.1.11 非对称加密算法(AsymmetricCryptographic Algorithm)
加密算法的加密密钥和解密密钥是不一样的,不能由一个密钥推导出另一个密钥。
3.1.12 密钥(Key)
加密转换中控制操作的符号序列。
3.1.13 对称密钥(SymmetricKey)
在对称加密算法中使用的密钥。
3.1.14 非对称密钥(AsymmetricKey)
在非对称加密算法中使用的密钥,包括公钥和私钥。
3.1.15 公钥(PublicKey)
在一个实体使用的非对称密钥对中可以被公众使用的密钥。在数字签名方案中,公钥用于验证。
3.1.16 私钥(PrivateKey)
在一个实体使用的非对称密钥对中仅被该实体使用的密钥。在数字签名方案中,私钥用于签名。
3.1.17 数字签名(DigitalSignature)
对数据的一种非对称加密变换。该变换可以使数据接收方确认数据的来源和完整性,保护数据发送方发出和接收方收到的数据不被第三方篡改,也保护数据发送方发出的数据不被接收方篡改。
3.1.18 生物标识(Biomarker)
3.1.19 医学警示(MedicalAlert)
患者在就医、急诊或抢救时需要特别提醒医生注意的信息,包括疾病史、体内装置、药物过敏史、对某些物质的不耐受史等。
3.2 缩略语
以下缩略语和符号表示适用于本规范:
表3-1 缩略语和符号列表
4 文件、数据元、数据对象列表
本部分定义了居民健康卡在医疗领域的各项专有应用,DDF1是居民健康卡应用环境,DDF2是其他预留应用环境。
图4-1 居民健康卡文件结构示意图
居民健康卡应用支付环境: FID = ‘DDF1’,AID = ‘WS.SYS.DDF01’。
发卡机构基本数据文件: FID = ‘EF05’,变长记录文件。
持卡人基本信息数据文件: FID = ‘EF06’,变长记录文件。
持卡人照片数据文件: FID = ‘EF07’, 二进制文件。
身份识别数据区ADF: FID= ‘DF01’,AID = ‘915600013200’。
地址信息文件: FID= ‘EF05’,变长记录文件。
联系人信息文件: FID= ‘EF06’,变长记录文件。
职业、婚姻信息文件: FID = ‘EF07’,变长记录文件。
证件记录信息文件: FID= ‘EF08’,变长记录文件。
基础健康信息区ADF: FID= ‘DF02’,AID = ‘915600013201’。
临床基本数据文件: FID= ‘EF05’,变长记录文件。
特殊信息数据文件: FID= ‘EF06’,变长记录文件。
过敏基本数据文件: FID= ‘EF07’,循环记录文件。
免疫基本数据文件: FID= ‘EF08’,循环记录文件。
管理数据区ADF: FID= ‘DF03’,AID = ‘915600013202’。
住院信息索引文件: FID= ‘EF05’,定长记录文件。
门诊信息索引文件: FID= ‘EF06’,定长记录文件。
住院信息文件: FID= ‘EE01’- ‘EE03’,二进制文件。
门诊信息文件: FID= ‘ED01’- ‘ED05’,二进制文件。
注:1、二进制文件:文件数据是通过连续空间中的字节地址进行存取。
2、记录文件:数据以记录为单位进行存取,同一文件内所有记录的长度可以不相等。同一文件内最多可以容纳254条记录。
表4-1 发卡机构基本数据文件
表4-2持卡人基本信息数据文件
表 4-3持卡人照片数据文件
‘EF07’
二进制文件
读 =RK1DDF1
改写=UK1DDF1
标签
数据元
类型
长度
照片
b
3074
注:照片文件存放方式为两字节照片数据长度+照片数据,例如照片数据为2066(0x0812)字节,则文件第一个字节为0x08,第二个字节为0x12,从第三个字节开始为照片数据。
表4-4地址信息文件
表4-5 联系人信息文件
表4-6职业、婚姻信息文件
表4-7证件记录信息文件
表4-8 临床基本数据文件
表4-9 特殊信息数据文件
表4-10过敏基本数据文件
表4-11 免疫基本数据文件
表4-12住院信息索引文件
表4-13门诊信息索引文件
表4-14 住院信息文件
表4-15 门诊信息文件
4.1 文件结构
本规范中的文件组织结构来自且符合GB/T 16649.4的基本组织结构。
本部分描述了符合本规范的应用文件结构。
从终端的角度来看,IC卡上的文件是一种树形结构。树的每一个分支是一个应用数据文件(ADF)或一个目录定义文件(DDF)。一个ADF是一个或者多个应用基本文件(AEF)的入口点。一个ADF及其相关的数据文件处于树的同一分支上。一个DDF是其他ADF或者DDF的入口点。
4.2 应用数据文件(ADF)
ADF的树形结构:
(1) 能够将数据文件与应用联系起来;
(2) 确保应用之间的独立性;
(3) 可以通过应用选择实现对其逻辑结构的访问。
从终端的角度看,ADF是一个只包含封装在其文件控制信息(FCI)中的数据对象的文件。
4.3 应用基本文件(AEF)
本规范中,一个AEF包含一个或多个原始BER-TLV数据对象,或一个非结构化的纯数据元。在选择了某一应用后,AEF通过其文件标识符进行查询。
4.4 文件到GB/T 16649.4的文件结构的映射
使用下列到GB/T 16649.4的映射:
(1) 一个GB/T 16649.4定义的专用文件(DF)映射为一个ADF或一个DDF。可以通过它来访问基本文件和DF。在IC卡中处于最高层的DF称为主文件(MF)。
(2) GB/T 16649.4定义的一个基本文件(EF) 对应一个AEF。EF永远不会成为另一个文件的入口点。
4.5 文件引用
根据文件的种类,文件可以通过文件名引用。IC卡中的任何ADF或DDF都可以通过它的DF名引用。ADF的DF 名与它的AID对应或以AID作为DF名的开头。一张IC卡中的每个 DF 名字必须在该卡内是唯一的。
5 卡操作
5.1 总体操作
包括对居民健康卡用户卡进行寻卡、上电初始化,鉴别卡真伪、有效期、外部认证读写权限,进入相应的读写操作等业务。
5.1.1 总体操作流程
(1) 用户卡上电复位,卡片位于MF下。
(2) 发送SELECT命令,选择居民健康卡应用环境DDF1。
(3) 执行内部认证流程,对卡进行内部认证。
(4) 发送SELECT命令,选择EF05。
(5) 发送READ RECORD命令,读卡有效期。
(6) 发送SELECT命令到各应用文件。
(7) 根据各应用文件读写控制权限,选择是否进行外部认证。
(8) 对相应文件进行读写操作。
(9) 流程结束。
5.1.2 流程图
图5-1 总体应用流程图
5.2 内部认证
内部认证判定用户卡是否本系统卡。
5.2.1 内部认证流程
(1) 终端从SAM卡获取8字节随机数。
(2) 定义8字节长度的鉴别所需的原始信息,如1122334455667788。
(3) 随机数做为用户卡过程密钥计算使用的数据,同时作为SAM卡过程密钥产生因子。
(4) 终端准备内部认证所需的数据,其中第1至第8字节为随机数,第9至第16字节为原始信息,第17字节为密钥版本。
(5) 终端向SAM卡发送DELIVERY SESSION KEY命令,将指定的密钥进行分散,并产生过程密钥。
(6) 终端向SAM卡发送CIPHER DATA命令,加密原始信息。
(7) 终端将SAM卡返回的加密结果左右8字节异或,得到鉴别数据A。
(8) 终端向用户卡发送INTERNAL AUTHENTICTION命令,得到返回值B。
(9) 终端比较A、B值是否相同,如果相同内部认证成功,否则内部认证失败。
(10)流程结束。
5.2.2 流程图
图5-2 内部认证流程图
5.3 外部认证
用户卡只有通过相应控制密钥的外部认证后,才可以对相应的的文件进行读写等操作。
5.3.1 外部认证流程
(1) 定义8字节长度的鉴别所需的原始信息,如1122334455667788。
(2) 终端向用户卡发送GET CHALLENGE命令,获得8字节随机数。
(3) 随机数做为SAM卡过程密钥产生因子。
(4) 终端向SAM卡发送DELIVERY SESSION KEY命令,将指定的密钥进行分散,并产生过程密钥。
(5) 终端向SAM卡发送CIPHER DATA命令,加密原始信息。
(6) 终端将SAM卡返回的加密结果左右8字节异或,得到鉴别数据。
(7) 终端准备外部认证所需的数据,其中第1至第8字节为鉴别数据,第9至第16字节为原始信息,第17字节为密钥版本。
(8) 终端向用户卡发送EXTERNAL AUTHENTICATION命令。
(9) 用户卡返回状态码如为‘9000’,则外部认证成功,否则外部认证失败。
(10)流程结束。
5.3.2 流程图
图5-3 外部认证流程图
5.4 应用锁定
向用户卡发送应用锁定命令可以对卡进行临时锁定或永久锁定。临时锁定方式后可以用应用解锁命令进行解锁,永久锁定方式后不能解锁。另外当使用校验方式更新记录文件或二进制文件时,如果MAC错误尝试次数超过限制,COS会自动临时锁定当前应用。
5.4.1 应用锁定流程
(1) 终端向用户卡发送SELECT命令,选择待锁定的应用区(DF)。
(2) 终端执行外部认证流程,对该DF下的LK密钥进行外部认证。
(3) 终端向用户卡发送GET CHALLENGE命令,获得8字节随机数。
(4) 随机数做为SAM卡过程密钥产生因子。
(5) 终端向SAM卡发送DELIVERY SESSION KEY命令,将指定的STK密钥进行分散,并产生过程密钥。
(6) 终端向SAM卡发送CIPHER DATA命令,对应用锁定(APPLICATION BLOCK)命令头进行MAC计算。
(7) 终端向用户卡发送APPLICATION BLOCK 命令 +MAC值,对该DF进行应用锁定。
5.5 应用解锁
临时锁定后的用户卡应用区,只有该应用区进行应用解锁后,才可以继续使用。
5.5.1 应用解锁流程
(1) 终端向用户卡发送SELECT命令,选择被临时锁定的应用区(DF)。
(2) 终端执行外部认证流程,对该DF下的LK密钥进行外部认证。
(3) 终端向用户卡发送GET CHALLENGE命令,获得8字节随机数。
(4) 随机数做为SAM卡过程密钥产生因子。
(5) 终端向SAM卡发送DELIVERY SESSION KEY命令,将指定的STK密钥进行分散,并产生过程密钥。
(6) 终端向SAM卡发送CIPHER DATA命令,对应用解锁(APPLICATION UNBLOCK)命令头进行MAC计算。
(7) 终端向用户卡发送APPLICATION UNBLOCK 命令 +MAC值,对该DF进行应用解锁。
5.6 卡锁定
用户卡不允许再使用时,可以执行卡锁定命令,对该用户卡进行永久卡锁定,卡锁定后不能解锁。
5.6.1 卡锁定流程
(1) 终端向用户卡发送SELECT命令,选择待锁定的卡片根目录(MF)。
(2) 终端执行外部认证流程,对MF下的BK密钥进行外部认证。
(3) 终端向用户卡发送GET CHALLENGE命令,获得8字节随机数。
(4) 随机数做为SAM卡过程密钥产生因子。
(5) 终端向SAM卡发送DELIVERY SESSION KEY命令,将指定的STK密钥进行分散,并产生过程密钥。
(6) 终端向SAM卡发送CIPHER DATA命令,对卡锁定(CARD BLOCK)命令头进行MAC计算。
(7) 终端向用户卡发送CARD BLOCK 命令 +MAC值,对该用户卡进行卡锁定。
5.7 应用维护
应用维护包括卡锁定、应用锁定、应用解锁、数据带MAC更新。这些过程必须在拥有相应的操作权限控制密钥的终端上按如下步骤执行:
(1) 通过外部认证,满足操作的安全状态;
(2) 终端向卡申请一随机数;
(3) 发送相应的应用维护命令,卡在收到命令后执行以下操作:
a. 使用前一步骤产生的随机数,利用《居民健康卡技术规范》中9.6节描述的方式产生过程密钥;
b. 使用该过程密钥产生MAC,并与命令报文中的MAC进行比较,如果结果一致,则相应的功能被实现,否则回送错误状态信息。MAC产生方式见《居民健康卡技术规范》中9.4节描述。
6 卡业务应用
在卡业务应用过程中,向SAM卡发送应用命令必须在验证完口令之后才可以执行。SAM卡上电之后验证一次口令,直到SAM卡下电重新上电才需要重新进行口令验证。
6.1 卡识别应用 (对应MF\\DDF1数据区)
读写卡识别数据区内的数据,卡识别数据区包括发卡基本数据(EF05)和持卡人基本数据(EF06)和照片数据(EF07)。
6.1.1 读卡识别数据区信息
6.1.1.1 描述
读取用户卡中MF\\DDF1中的基本文件(即EF05、EF06和 EF07)数据。
6.1.1.2 命令
参见《居民健康卡用户卡命令集 V1·0》和《居民健康卡安全存取模块(SAM)卡命令集 V1·0》。
6.1.1.3 处理流程
(1) 终端根据应用执行的情况决定从用户卡读取哪些文件。
(2) 终端选择对应记录所在的DF文件,然后再选对应的EF文件。
(3) 终端根据应用执行情况和《居民健康卡技术规范》中定义的对应文件的读控制密钥的情况,决定是否执行外部认证。(读控制密钥的情况参见《居民健康卡技术规范》,外部认证命令处理过程参见本文档的对应章节)。
(4) 终端发送READ RECORD命令读取指定记录;终端发送READ BINARY命令读取EF07数据。
(5) 用户卡根据读记录所需的读控制权限,判断命令执行的条件是否满足,如果不满足则返回错误码到终端;如果满足则用户卡读取记录或二进制文件数据,读取成功则返回数据到终端,否则返回错误码到终端。
(6) 终端根据用户卡返回结果,决定是否继续读取对应EF文件中的数据。
6.1.1.4 流程图
图6-1 读卡识别数据流程图
6.1.2 写卡识别数据区信息
6.1.2.1 描述
更新用户卡中MF\\DDF1中的基本文件(即EF05、EF06和 EF07)数据。
6.1.2.2 命令
参见《居民健康卡用户卡命令集V1·0》和《居民健康卡安全存取模块(SAM)卡命令集V1·0》。
6.1.2.3 处理流程
(1) 终端根据应用执行的情况决定更新用户卡中哪些文件。
(2) 终端选择对应记录所在的DF文件,然后再选对应的EF文件。
(3) 终端根据应用执行情况和《居民健康卡技术规范》中定义的对应文件的写控制密钥的情况,决定是否执行外部认证。(写控制密钥的情况参见《居民健康卡技术规范》,外部认证命令处理过程参见本文档的对应章节)。
(4) 终端发送带密文+MAC安全报文的UPDATE RECORD命令更新指定记录,在这一过程中,使用STKDDF1计算密文及MAC;终端发送UPDATE BINARY命令更新EF07数据。
(5) 用户卡根据写记录所需的写控制权限,判断命令执行的条件是否满足,如果不满足则返回错误码到终端;如果满足更新记录文件则验证密文和MAC是否正确(密文和MAC的计算方法和步骤参见《居民健康卡技术规范》9.4节描述),如果正确,则将解密后的明文数据写入卡内,否则返回错误码到终端。如果满足更新二进制文件则以明文方式将数据写入卡内,否则返回错误码到终端。
(6) 终端根据用户卡返回结果,决定是否继续更新对应EF文件中的数据。
6.1.2.4 流程图
图6-2 写卡识别数据处理流程图
6.2 身份识别应用(对应DDF1\\DF01数据区)
读写身份识别数据区内的数据,身份识别数据区包括EF05、EF06、EF07和EF08文件。
6.2.1 读DF01应用数据
6.2.1.1 描述
读取用户卡中的DF01应用数据。
6.2.1.2 命令
参见《居民健康卡用户卡命令集 V1·0》和《居民健康卡安全存取模块(SAM)卡命令集V1·0》。
6.2.1.3 处理流程
(1) 终端根据应用执行的情况决定从用户卡读取哪些记录。
(2) 终端选择对应记录所在的DF文件,然后再选对应的EF文件。
(3) 终端根据应用执行情况和《居民健康卡技术规范》中定义的对应文件的读控制密钥的情况,决定是否执行外部认证。(读控制密钥的情况参见《居民健康卡技术规范》,外部认证命令处理过程参见本文档的对应章节)。
(4) 终端发送READ RECORD命令读取指定记录。
(5) 用户卡根据读记录所需的读控制权限,判断命令执行的条件是否满足,如果不满足则返回错误码到终端;如果满足则用户卡读取记录数据,读取成功则返回记录数据到终端,否则返回错误码到终端。
(6) 终端根据用户卡返回结果,决定是否继续读取对应EF文件中的记录。
6.2.1.4 流程图
图6-3 读DF01应用数据处理流程图
6.2.2 写DF01应用数据
6.2.2.1 描述
更新用户卡中的DF01应用数据。
6.2.2.2 命令
参见《居民健康卡用户卡命令集V1·0》和《居民健康卡安全存取模块(SAM)卡命令集V1·0》。
6.2.2.3 处理流程
(1) 终端根据应用执行的情况决定更新用户卡中哪些记录。
(2) 终端选择对应记录所在的DF文件,然后再选对应的EF文件。
(3) 终端根据应用执行情况和《居民健康卡技术规范》中定义的对应文件的写控制密钥的情况,决定是否执行外部认证。(写控制密钥的情况参见《居民健康卡技术规范》,外部认证命令处理过程参见本文档的对应章节)。
(4) 终端发送带密文+MAC安全报文的UPDATE RECORD命令更新指定记录。
(5) 用户卡根据写记录所需的写控制权限,判断命令执行的条件是否满足,如果不满足则返回错误码到终端;如果满足则验证密文和MAC是否正确(密文和MAC的计算方法和步骤参见《居民健康卡技术规范》9.4节描述),如果正确,则将解密后的明文数据写入卡内,否则返回错误码到终端。
(6) 终端根据用户卡返回结果,决定是否继续更新对应EF文件中的记录。
6.2.2.4 流程图
图6-4 写DF01应用数据处理流程图
6.3 基础健康信息应用(对应DDF1\\DF02数据区)
读写基础健康信息区内的数据,基础健康信息区包括EF05、EF06、EF07和EF08文件。
6.3.1 读DF02应用数据
6.3.1.1 描述
读取用户卡中的DF02应用数据。
6.3.1.2 命令
参见《居民健康卡用户卡命令集V1·0》和《居民健康卡安全存取模块(SAM)卡命令集V1·0》。
6.3.1.3 处理流程
(1) 终端根据应用执行的情况决定从用户卡读取哪些记录。
(2) 终端选择对应记录所在的DF文件,然后再选对应的EF文件。
(3) 终端根据应用执行情况和《居民健康卡技术规范》中定义的对应文件的读控制密钥的情况,决定是否执行外部认证。(读控制密钥的情况参见《居民健康卡技术规范》,外部认证命令处理过程参见本文档的对应章节)。
(4) 终端发送READ RECORD命令读取指定记录。
(5) 用户卡根据读记录所需的读控制权限,判断命令执行的条件是否满足,如果不满足则返回错误码到终端;如果满足则用户卡读取记录数据,读取成功则返回记录数据到终端,否则返回错误码到终端。
(6) 终端根据用户卡返回结果,决定是否继续读取对应EF文件中的记录。
6.3.1.4 流程图
图6-5 读DF02应用数据处理流程图
6.3.2 写DF02应用数据
6.3.2.1 描述
更新用户卡中的DF02应用数据。
6.3.2.2 命令
参见《居民健康卡用户卡命令集V1·0》和《居民健康卡安全存取模块(SAM)卡命令集V1·0》。
6.3.2.3 处理流程
(1) 终端根据应用执行的情况决定更新用户卡中哪些记录。
(2) 终端选择对应记录所在的DF文件,然后再选对应的EF文件。
(3) 终端根据应用执行情况和《居民健康卡技术规范》中定义的对应文件的写控制密钥的情况,决定是否执行外部认证。(写控制密钥的情况参见《居民健康卡技术规范》,外部认证命令处理过程参见本文档的对应章节)。
(4) 终端发送带密文+MAC安全报文的UPDATE RECORD命令更新指定记录。
(5) 用户卡根据写记录所需的写控制权限,判断命令执行的条件是否满足,如果不满足则返回错误码到终端;如果满足则验证密文和MAC是否正确(密文和MAC的计算方法和步骤参见《居民健康卡技术规范》9.4节描述),如果正确,则将解密后的明文数据写入卡内,否则返回错误码到终端。
(6) 终端根据用户卡返回结果,决定是否继续更新对应EF文件中的记录。
6.3.2.4 流程图
图6-6 写DF02应用数据处理流程图
6.4 管理业务应用(对应DDF1\\DF03数据区)
包括对住院信息和门诊信息的记录、提取和报销。MAC的计算方法和步骤参见《居民健康卡技术规范》9.4节描述。对住院信息和门诊信息进行签名时的SAM卡证书数据,从SAM卡的SAM卡证书文件中读取,SAM卡证书文件参见《居民健康卡安全存取模块(SAM)卡技术规范V1·0》相应描述。
6.4.1 记录住院信息
6.4.1.1 描述
读写用户卡中住院信息索引文件(DF03\\EF05)及住院信息(DF03\\EE01-03)。
6.4.1.2 命令
参见《居民健康卡用户卡命令集V1·0》和《居民健康卡安全存取模块(SAM)卡命令集V1·0》。
6.4.1.3 记录住院信息流程
(1) 终端获得住院信息索引文件读权限。
(2) 终端向用户卡发送SELECT命令,选择住院信息索引文件,从第一条记录开始搜索到第一个值为空(‘FF’)的记录,根据这条记录的记录号RN确定住院信息文件的文件标识符FID(‘EE’+RN)。
(3) 如果没有空记录,则无法记录住院信息,流程结束。
(4) 终端获得住院信息文件写权限。
(5) 终端向用户卡发送SELECT命令,选择住院信息文件。
(6) 终端执行数据签名流程,将待签名的住院信息数据发送到SAM卡进行签名,得到64字节签名值。
(7) 终端向用户卡发送UPDATE BINARY命令,写入本次住院信息、签名值和SAM卡证书数据。
(8) 终端向用户卡发送SELECT命令,选择住院信息索引文件。
(9) 终端向用户卡发送带MAC安全报文的WRITE RECORD命令,写入住院索引信息文件第RN条记录。
(10)流程结束。
6.4.1.4 流程图
图6-7 住院信息记录流程图
6.4.2 记录门诊信息
6.4.2.1 描述
读写用户卡中门诊信息索引文件(DF03\\EF06)及门诊信息(DF03\\ED01-05)。
6.4.2.2 命令
参见《居民健康卡用户卡命令集V1·0》和《居民健康卡安全存取模块(SAM)卡命令集V1·0》。
6.4.2.3 记录门诊信息流程
(1) 终端获得门诊信息索引文件读权限。
(2) 终端向用户卡发送SELECT命令,选择门诊信息索引文件,从第一条记录开始搜索到第一个值为空(‘FF’)的记录,根据这条记录的记录号RN确定门诊信息文件的文件标识符FID(‘ED’+RN)。
(3) 如果没有空记录,则无法记录门诊信息,流程结束。
(4) 终端获得门诊信息文件写权限。
(5) 终端向用户卡发送SELECT命令,选择门诊信息文件。
(6) 终端执行数据签名流程,将待签名的门诊信息数据发送到SAM卡进行签名,得到64字节签名值。
(7) 终端向用户卡发送UPDATE BINARY命令,写入本次门诊信息、签名值和SAM卡证书数据。
(8) 终端向用户卡发送SELECT命令,选择门诊信息索引文件。
(9) 终端向用户卡发送带MAC安全报文的WRITE RECORD命令,写入门诊索引信息文件第RN条记录。
(10)流程结束。
6.4.2.4 流程图
图6-8 门诊信息记录流程图
6.4.3 住院费用信息提取及费用报销
6.4.3.1 描述
本部分描述了住院费用提取及报销的简易流程。
6.4.3.2 命令
参见《居民健康卡用户卡命令集V1·0》和《居民健康卡安全存取模块(SAM)卡命令集V1·0》。
6.4.3.3 住院费用信息提取及报销流程
(1) 终端获得住院信息索引文件(DF03\\EF05)读权限。
(2) 终端向用户卡发送SELECT命令,选择住院信息索引文件,从第一条记录开始搜索不为空(‘00’)的记录,根据这条记录的记录号RN确定住院信息文件的文件标识符FID(‘EE’+RN)。
(3) 终端向用户卡发送SELECT命令,选择住院信息文件。
(4) 终端向用户卡发送READ BINARY命令,读取住院记录数据(住院信息、签名值和SAM卡证书)。
(5) 终端将住院记录数据发送到后台,由后台验证签名的的有效性。
(6) 终端根据后台返回结果,判断住院记录数据签名验证是否成功。
(7) 终端获得住院信息索引文件擦除权限。
(8) 终端向用户卡发送SELECT命令,选择住院信息索引文件。
(9) 终端向用户卡发送带MAC安全报文的ERASE RECORD命令,擦除住院索引信息文件第RN条记录有效标志。
(10)流程结束。
6.4.3.4 流程图
图6-9 住院费用提取及报销流程图
6.4.4 门诊费用信息提取及报销
6.4.4.1 描述
本部分描述了门诊费提取及报销的简易流程。
6.4.4.2 命令
参见《居民健康卡用户卡命令集V1·0》和《居民健康卡安全存取模块(SAM)卡命令集V1·0》。
6.4.4.3 门诊费用提取及报销流程
(1) 终端获得门诊信息索引文件(DF03\\EF06)读权限。
(2) 终端向用户卡发送SELECT命令,选择门诊信息索引文件,从第一条记录开始搜索不为空(‘00’)的记录,根据这条记录的记录号RN确定门诊信息文件的文件标识符FID(‘ED’+RN)。
(3) 终端向用户卡发送SELECT命令,选择门诊信息文件。
(4) 终端向用户卡发送READ BINARY命令,读取门诊记录数据(门诊信息、签名值和SAM卡证书)。
(5) 终端将门诊记录数据发送到后台,由后台验证签名的的有效性。
(6) 终端根据后台返回结果,判断门诊记录数据签名验证是否成功。
(7) 终端获得门诊信息索引文件擦除权限。
(8) 终端向用户卡发送SELECT命令,选择门诊信息索引文件。
(9) 终端向用户卡发送带MAC安全报文的ERASE RECORD命令,擦除门诊索引信息文件第RN条记录有效标志。
(10)流程结束。
6.4.4.4 流程图
图6-10 门诊费用提取及报销流程图
7 数据签名和验证
7.1 数据签名
7.1.1 描述
住院信息或门诊信息写入到用户卡时需要进行数据签名,以保证数据的真实性和完整性。待签名数据为住院(或门诊)信息文件中除签名值和SAM卡证书之外的所有数据项内容。
7.1.2 命令
参见《居民健康卡用户卡命令集V1·0》和《居民健康卡安全存取模块(SAM)卡命令集V1·0》。
7.1.3 数据签名流程
(1) 终端获得需签名的住院(或门诊)信息数据。
(2) 终端向SAM卡发送SELECT命令,选择SAM卡DF01目录。
(3) 终端将获得的住院(或门诊)信息记录数据分组,向SAM卡循环发送DATA COMPRESS命令,使用SM3算法计算,得到32字节哈希值。
(4) 终端向SAM卡发送DIGITAL SIGNATURES命令,用私钥对哈希值做签名,得到64字节签名值。
(5) 流程结束。
7.1.4 流程图
图7-1 数据签名流程图
7.2 数据签名验证
7.2.1 描述
本部分描述了数据签名验证的流程。通过验证数据签名,保证数据真实,没有被篡改。验证签名数据为住院(或门诊)信息文件的住院(或门诊)信息的记录、交易签名和SAM卡证书。
7.2.2 命令
参见《居民健康卡用户卡命令集V1·0》和《居民健康卡安全存取模块(SAM)卡命令集V1·0》。
7.2.3 数据签名验证流程
证书密钥的使用参见《居民健康卡技术规范》中9.10.2.2节。
(1) 终端读取用户卡住院(或门诊)信息文件的住院(或门诊)信息的记录、交易签名和SAM卡证书,并将上述三项数据项发到后台,由后台进行数据签名验证。
(2) 后台将验证结果发送到终端。
(3) 终端根据返回结果判断数据签名验证是否成功。
(4) 流程结束。
7.2.4 流程图
图7-2 数据签名验证流程图