社保CPU卡的安全体系研究
文章出处:http://www.ifyousmell.com 作者: 人气: 发表时间:2011年12月08日
IC卡(Integrate Circuit Card)是将集成电路芯片镶嵌于塑料基片中,封装成卡的形式,它因体积小、存储容量大、安全性高、使用方便等优点被广泛应用于各行各业。IC卡分为存储卡(Memory Card) 、逻辑加密卡(Logical Encrypt Card)和CPU卡(CPU Card)。中华人民共和国社会保障卡(简称社保卡)使用的是CPU卡。劳动和社会保障部于1999 年制定并发布了《社会保障卡建设总体规划》,按照此规划,社保卡将实行“一卡多用”和“全国通用”。社保卡作为劳动者在劳动保障领域办理有关事务的身份验证和交易消费的唯一电子凭证,其安全性尤为重要。
1 社保卡内部结构
1.1 物理结构
社保卡的内部包含五部分:CPU 及加密逻辑、RAM、ROM、EEPROM 及I/O,是一个完整的计算机安全体系[1],如图1 所示。
其中,CPU 及加密逻辑保证EEPROM 中数据安全, 防止外界用非法手段获取EEPROM中的数据;RAM 存放命令参数、返回结果、安全状态、临时密钥等数据,掉电后自动丢失。社保卡操作系统COS 掩膜在ROM 中,保证COS 的代码安全。用户信息以文件形式存放在EEPROM 中,在拥有相应权限的前提下可进行读或写。
1.2 文件组织结构
社保卡的文件系统是完全遵照《社会保障(个人)卡规范》[2]和ISO/IEC 7816-4 [3] 来组织的, 它是具有树型结构的多级目录系统, 由主文件MF(Master File)、目录文件DF(Directory File)、和基本文件EF(Element File)组成,其中包含下级目录的DF 为DDF,不包含下级目录的DF 为ADF。文件系统在社保卡的EEPROM 中建立。MF 在社保卡内唯一存在,在MF 和DF 下可以有多个EF 和多个下一级DF。社保卡支持多层目录结构,同层目录中文件不能有相同的ID。在应用系统中,各个不同的应用可以创建不同的DF,使一张社保卡可以适用于多个应用。社保卡具体的层次结构如图2所示。
2 社保卡安全体系的设计要求
社保卡的安全体系有以下几个阶段:在芯片制造商完成芯片的制造后,社保卡处于未初始化状态;卡片制造厂商封装完成后进行初始化和检测,此时社保卡处于初始化阶段;初始化和检测完成后社保卡处于未个人化阶段;发卡方使用专用密钥进行个人化,此时处于个人化阶段,这个过程中发卡方设计自己应用的安全体系并封装到卡片中,当个人化过程结束后,社保卡在发卡方规划的安全体系的保护下对《社会保障(个人)卡规范》和ISO/IEC7816-4 中的指令进行解释和执行。因此,社保卡安全体系的设计需具备以下要求:
从设计上保证即使攻击者(含设计者)得到社保卡代码,也不会影响卡片安全性。
卡片中所有密钥(口令密钥、密码算法密钥)无论在什么条件下均不可由外界读出,因而卡片密钥内容是不可复制的。
卡片中对文件的读写根据应用需求设计安全级别,必须保证拥有相应的级别才可读或写。
无其它隐含命令可直接读写卡中的数据。
ROM 中的代码不能从外部读出,也不能被驻留在EEPROM 中的程序读取。
EEPROM 中的数据只能通过社保卡命令访问。
3 社保卡安全体系划分
社保卡的安全体系可分为社保卡自身安全与应用安全。应用安全又分为安全状态、安全属性、安全机制、密码算法和密钥管理等几个方面。社保卡的核心软件是卡内操作系统COS(Chip Operation System)。社保卡通过COS 来管理卡内软硬件资源,并通过安全通道与外界交换信息,保证用户数据安全的传输,达到社保卡安全应用的目的。
3.1 安全状态
安全状态指的是一种安全级别。在环境目录(DDF/MF)和应用目录(ADF)中各有15 个等级的安全状态。环境目录下的安全状态,称为全局安全状态字;应用目录下的安全状态,称为局部安全状态字。如果卡工作在环境目录下(DDF/MF),则局部安全状态无意义。
安全状态是通过对KEY 进行外部认证后,将KEY 数据信息中的安全级别字(SSB)映射到安全状态字上。若认证密钥在DDF/MF 下,则映射到全局安全状态字上;若认证密钥在ADF 下,则映射到局部安全状态字上。SSB 的高4 位表示安全级别的下限(1~15),SSB 的低4 位表示安全级别的上限(1~15)。假设KEY 的SSB 为‘XY’,表示认证KEY 成功后可获得X 至Y 区域内的安全级别。例如:在DDF/MF 下有Key1,其安全级别设置为‘46’,即SSB=‘46’。Key1 认证通过后,卡的全局安全状态为4,5,6 三级。若在ADF 下有Key2,SSB=‘AD’,则Key2 认证通过后,卡的局部安全状态为10、11、12、13 四级。若SSB=‘00’表示Key 认证通过后对安全状态无影响。‘X’>‘Y’的组合为不合理数据。
3.2 安全属性
安全属性是指对社保卡的操作权限,用户只有达到安全属性规定的权限才能通过COS 命令对卡内文件和KEY 进行操作。Right定义了对文件和KEY 操作的权限,用2 个字节表示,高字节对应全局安全状态,低字节对应局部安全状态。每个字节的高4 位表示安全状态的下限,低4 位表示安全状态的上限。假设权限的高字节为‘XY’,若‘X’‘Y’表示文件或KEY 的全局安全级别在‘X’至‘Y’区域内,对文件或KEY 访问前,先要满足文件或KEY 的访问权限;若‘X’>‘Y’,表示文件或KEY 被禁止访问;若为‘0Y’,表示对文件或KEY 的访问无安全级别限制。
安全属性往往和COS 文件系统相关联, 根据对不同文件类型的操作权限,可以设计不同的安全属性。
增加权限:在当前目录下创建新文件的权限。
激活权限:激活失效安全机制的权限。
终止权限:永久终止的权限,对于MF 来说表示卡锁定,对于ADF 文件来说表示当前应用永久锁定,即: 应用失效。
读权限:对EF 文件内容的读操作权限。
写权限:对EF 文件内容的写操作权限。
安装权限:表示安装密钥或密码的权限。
使用权限:表示使用密钥或密码的权限。
修改权限:修改密钥或密码的权限。
解锁权限:解锁密码PIN 的权限,此权限只有PIN 才有。
3.3 安全机制
安全机制是指安全状态的改变所采用的方法和手段以及安全属性和安全状态之间的控制关系。COS 命令在执行过程中,首先要检查COS 环境所处的安全状态是否符合执行命令要求的安全属性。假设当前COS 所处的是安全状态A,执行COS 命令安全属性要求安全状态B , 在执行COS 命令前要通过安全机制涉及安全提升方法,将安全状态提升到安全状态B ,这样COS 命令才能正常执行。安全状态、安全机制、安全属性,三者的关系见图3。
社保卡的安全机制根据《社会保障(个人)卡规范》规定,有三方面的要求, 即: 内部/外部认证、PIN 验证和安全报文MAC(MessageAuthentication Code)。
3.3.1 内部/外部认证:内部认证和外部认证是一种互认证过程。内部认证是用读卡设备来认证卡, 保证卡的合法性, 内部认证可以防止伪造的卡在读卡设备上进行操作。外部认证是用卡来认证外部读卡设备的合法性,外部认证可以防止恶意对卡进行操作,读取和更改卡内信息。外部认证还可以改变社保卡的安全状态,一般卡内存储了多个外部认证密钥,每个外部认证密钥所能改变的安全状态不一样,在进行外部认证时,必须通过密钥索引参数选择相对应的外部认证密钥完成外部认证。
3.3.2 PIN 验证:PIN 实际上就是密码,根据《社会保障(个人)卡安全要求》[4]规定,社保卡只有一个密码PIN,持卡用户可以修改密码,通过密码验证,改变卡的安全状态,达到安全要求。
3.3.3 安全报文MAC:传送安全报文的目的是保证数据的可靠性、完整性和发送方的认证。数据完整性和对发送方的认证是通过使用MAC 来实现,数据可靠性通过数据域的加密来得以保障。
3.4 密码算法
社保卡用的加密算法都是对称分组加密算法,一般通用的对称加密算法主要是DES(Data Encryption Standard)。DES 算法,见图4,需要满足4 个要求:提供高质量的数据保护,防止数据未经授权的泄露和未被察觉的修改;具有相当高的复杂性;使得破译的开销超过可能获得的利益;便于理解和掌握;DES 算法的入口参数有三个:Key、Data、Mode。其中Key 为8 个字节共64 位, 是DES 算法的工作密钥;Data 也为8 个字节64位,是要被加密或被解密的数据;Mode 为DES 的工作方式,有两种:加密或解密。如果Mode 为加密,则用Key 去把数据Data 进行加密,生成Data 的密码形式作为DES 的输出结果; 如Mode 为解密, 则用Key 去把密码形式的数据Data 解密, 还原为Data 的明码形式作为DES 的输出结果。在使用DES 时, 双方预先约定使用的“密码”即Key,然后用Key 去加密数据;接收方得到密文后使用同样的Key 解密得到原数据,这样便实现了安全性较高的数据传输。
3.5 密钥管理
社保卡的密钥的装载、更新和下发都有一整套安全管理办法。社保卡的密钥分为三个级别:国家级密钥、省级密钥和地市级密钥,采用多级密钥管理方式,逐级分散下发。从而保证用于加(解)密算法的非对称私有密钥或对称加密密钥在没经授权的情况下,不会被泄漏。如果增设个人密码,则应保证其在社保卡中的安全存放。社保卡的COS 在设计、封装时将所有密钥存放在专用的文件中,即:密钥存放到密钥文件中,密码存放到密码文件中,并且外部不能访问这两种文件,每一种密钥只能执行特定的功能,这样可以保障密钥和密码不外泄漏, 同时又能正常使用。
4 结束语
为了适应社会保障信息化发展要求,满足社保卡系统建设、应用和管理的需求,实现“一卡多用”、“全国通用”,社保卡安全体系的研究是解决卡片信息安全问题的关键和基础技术。随着社保卡应用领域和功能的不断地扩展,社保卡安全体系的研究和设计也将随之发展,从而保证卡内信息的安全。