来源:中国一卡通网 作者:杨帆, 张焕国 发布时间:2009-10-12 17:05:45 字体:[大 中 小]
摘 要:讨论了通用智能卡操作系统COS 的安全体系, 围绕该体系的三大功能: 文件操作、认证系统、加/ 解密展开论述。金融智能卡操作系统是建立在通用COS 基础上集成了银行应用的COS。结合实践的JETCOS 智能卡操作系统分析了金融智能卡COS 在交易流程和应用过程中的安全性。
智能卡又称为IC 卡( Integrated circuit Card) , 即集成电路卡。根据卡中使用的集成电路的不同可以分为存储器卡、逻辑加密卡和CPU卡。由于CPU卡中集成了中央处理器CPU、存储器和芯片操作系统( Chip Operating System, COS) , 构成一个完整的计算机系统, 具有独立的数据处理能力, 因此安全性大大增强, 从而得到了广泛的应用, 成为IC 卡中的主流产品。本文主要针对CPU 卡进行讨论。COS 建立在CPU、存储器等硬件之上, 是管理芯片资源和实现安全保密的操作系统。它的主要功能是: 控制智能卡和外界的信息交换, 管理智能卡内的存储器, 并在卡内部完成各种命令的处理。
1 安全体系
根据接触式集成电路( IC) 卡国际标准ISO7816-4, 智能卡安全体系包括三部分: 安全状态( Security Status) 、安全属性( Security Attributes) 以及安全机制( Security Mechanisms) 。安全状态是指智能卡当前所处的安全级别, 即当前安全状态寄存器的值。安全属性又称为访问权限, 即在进行某种操作时要求安全状态寄存器的值是什么。安全机制从广义上说是卡片支持的各种安全模式, 从狭义上说是安全状态实现转移所采用的方法和手段。一种安全状态通过上述安全机制转移到另一种状态, 把该安全状态与某个安全属性相比较, 如果一致, 则表明能够执行该属性对应的命令; 如果不一致, 则相关命令不能被执行, 从而达到了安全控制的目的。这就是智能卡安全体系的基本工作原理, 如图1 所示。
安全机制是安全体系的关键, 广义的安全机制主要涉及到文件操作、认证系统、加/ 解密三大功能模块。
2 文件操作
2. 1 基本文件结构
文件系统是COS 的基础模块, 它负责组织、管理、维护IC卡内存储的所有数据。根据ISO7816-4, COS 支持的文件类型为: 主文件( Master File, MF) 、目录文件( Dedicated File, DF) 和基本文件( Elementary File, EF) 。主文件MF为文件系统的根,下面可以有多个目录文件DF 和基本文件EF。目录文件DF分为DDF 和ADF 两种。DDF可以含有下级目录ADF, 而ADF不能含有下级目录文件。
主文件MF 在IC 卡中唯一且必须存在。DDF 是指包含多个应用的DF, 一个ADF则代表一个应用, 任何一个DF 在物理上和逻辑上都保持独立。基本文件EF 用于存放密钥或用户数据, 分为密钥文件和工作基本文件。
2. 2 文件的访问控制
文件的访问控制可采取鉴别寄存器方式和状态机方式, 这里以鉴别寄存器方式为例。用两个四位寄存器来表示安全状态: 一个寄存器称为MF 的安全状态寄存器, 另一个寄存器为当前DF的安全状态寄存器。每个寄存器的初始值是0, 取值安全状态员安全状态圆执行命令符合命令要求的安全属性钥命令拒绝安全机制再晕图员智能卡安全体系范围是0 ~F 之间的某一个值。文件有两种不同的访问控制权限AC0, AC1。AC0 是使用权限, AC1 是修改权限, 分别用一个字节表示。当前安全状态寄存器的值大于AC 字节的低半字节小于其高半字节时, 该文件的相应读、写权限在该安全状态下被满足, 则能进行相关操作。COS在建立文件时指定其AC0和AC1 的值来对文件的访问权限进行设定, 通过口令校验和外部认证两条命令可以改变安全状态寄存器的值, 从而利用安全机制实现对文件的访问控制。
3 认证系统
3. 1 用户鉴别
用户鉴别( Verify) , 也称为口令校验, 是指智能卡对其持有者合法性的验证, 以减少被非法用户冒用的可能。具体实现上, 由用户向智能卡出示只有他本人才知道的通行字PIN, 并由智能卡对该Password 的正确性进行判断。如果正确, 则验证通过, 改变智能卡当前的安全状态为PIN后续状态从而用户获得相应使用权限; 如果不正确, 则错误计数器的值减1, 若错误尝试次数达到错误计数器的上限, 则卡会自动锁定。
3. 2 内部认证和外部认证
内部认证( Internal Authentication) , 是指读写设备对智能卡的合法性进行的验证; 外部认证( External Authentication) , 是指智能卡对读写设备的合法性进行的验证。内、外部认证的原理是合法的读写设备和智能卡应该共有相应的内、外部认证密钥, 伪造的读写设备或智能卡无法获得相应密钥。具体实现上, 是通过读写设备和卡双方同时用对称加密算法对一个随机数进行加密运算, 然后判断双方运算结果的一致性或者通过一方对随机数加密另一方进行解密来达到认证的目的。类似于口令校验, 外部认证通过后, 当前安全状态寄存器的值变成外部认证密钥的后续状态。
3. 3 安全报文传送
为保证卡与外界传输的信息的安全性, 除了明文方式传递数据外, COS 提供安全报文传送方式, 其目的在于保证数据的可靠性、完整性和对发送方的认证。数据完整性和对发送方的认证通过使用消息认证码MAC( Message Authentication Code)来实现。数据的可靠性通过对数据域的加密得到保证。
MAC 是消息内容和秘密钥的公开函数, 其输出是定长的短数据块: MAC = C( M, K) 。其中M是消息内容, K 是通信双方共享的秘密钥, C 是MAC 值的生成算法。算法C 要求已知M1 和C( M1 , K) , 无法构造出满足C( M2 , K) = C( M1 , K) 的报文M2 , 所以MAC 能唯一鉴别原报文。COS支持如下两种安全报文传送方式:
( 1) 线路认证方式。终端对要发送给卡的整条命令计算MAC 值, 并附加在传输的命令数据的尾部, 即A→B: M‖ C( M, K) , 卡收到命令后用秘密钥K 对接收到的M求MAC 值,并与C( M, K) 比较, 从而验证MAC 值的正确性, 只有校验正确的数据才予以接收; 卡如果有返回给终端的应答数据, 也同样以线路认证方式发送。如果M 被窜改, 收方据此计算出的MAC 值就与发方传送过来正确值不同; 如果有冒充的非法发送端发送消息, 由于它得不到秘密钥K, 所以也无法得到正确的MAC 值。因此这种方式能保证传输数据的完整性和发送方的真实性。
( 2) 线路加密认证方式。终端对要发送给卡的命令数据域加密, 然后再对整条命令( 包括命令头和加密后的命令数据域) 计算MAC 值, 并附加在被加密了的命令数据的尾部, 即A→B: E( M, K2 ) ‖C( E( M, K2 ) , K1 ) , 卡收到命令后首先用K1验证MAC 值的正确性, 再用K2 对命令的DATA 域数据解密,恢复命令数据域的明文; 卡如果有返回给终端的应答数据, 也同样以线路加密认证方式发送。由于传送的是加密后的密文,仅由收、发双方共享K2 , 所以线路加密认证方式除了提供线路认证方式的优点外, 还能保证数据的可靠性。
4 加 / 解密
4. 1 密钥管理
COS 的密钥管理涉及密钥的生成、分配、存储和使用。根据密钥分级原则, 把智能卡中涉及的密钥划分为三级: 主密钥、二级密钥、初级密钥。高级密钥生成低级密钥。低级密钥由高级密钥管理控制, 可以减少直接保密的密钥数量, 简化密钥管理, 保证密钥安全。主密钥由应用管理机构产生和维护, 二级密钥由主密钥通过某种算法分散到每张IC 卡中, 过程密钥由每次交易具体涉及的数据产生。
根据全程安全原则, 安全管理贯穿密钥的生成、分配、存储和使用的过程。
主密钥是在安全保密的情况下由管理机构产生的真随机序列。根据责任分离原则, 一个密钥专职一种功能, 所以根据COS 应用中涉及的业务种类, 应生成对应个数的主密钥。子密钥, 即二级密钥, 由对应的主密钥对每张用户卡唯一的应用序列号进行加密生成。过程密钥, 即初级密钥, 由二级密钥对每次交易的某些具体数据进行加密生成。
主密钥采用人工分配的方式, 以确保高安全性。子密钥在管理机构由主密钥产生, 再下载到每张卡中。过程密钥在卡中生成, 采用“一次一密”方式, 只在当次交易有效, 保护该次交易的敏感数据。
主密钥存储在管理机构中, 生存周期长, 安全性要求最高,存储在高度安全的专用密码装置中。子密钥存储在MF或DF下的密钥文件中, 在整个MF或DF的建立到删除过程中有效。过程密钥由于只对一次特定的交易有效, 所以生存周期短, 使用时动态产生, 存储在卡的内存中, 使用完毕即销毁。子密钥和过程密钥在卡中以非可见的形式存放, 任何时候都不能出卡, 不能被显式读取。COS 设定了每个密钥的安全条件, 只有满足特定的安全状态, 才能使用或修改该密钥。当某些密钥( 如个人PIN) 受到非法攻击时, 还能够自动锁定, 以确保密钥的抗攻击性。
4. 2 密码算法及应用
4. 2. 1 对称密码算法
DES, 3DES, AES 是普遍使用的对称密码算法。COS 中涉及内外部认证、安全报文、生成过程密钥等均用到了对称密码算法。图2 说明安全报文传送中MAC 基于DES 算法的生成过程。其中, D 表示被加密的数据被分成的八字节数据块, ī表示异或, 最终得到的八个字节结果取左边四个字节作为MAC 值。
4. 2. 2 非对称密码算法
利用公开密钥密码实现数字签名方便安全, 如果COS 支持公开密钥密码, 由于其具有独立的数据处理能力和良好的安全性, 则IC 卡可作为数字签名的安全载体。用来签名的私钥保存在卡中, 并且任何情况下不能读出。签名的过程在卡中完成, 比在主机上用私钥实现签名更安全。目前可用于COS 的非对称算法有RSA, ECC 等。出于对安全和速度的考虑, 一般不是对数据直接签名, 而是对其哈希值进行签名。
5 金融智能卡COS 的安全性
金融智能卡操作系统是建立在通用COS 基础上集成了银行应用的COS, 其中电子存折和电子钱包是两种最主要的金融应用, 能支持圈存、圈提、消费、取现和修改透支限额五种类型的交易, 可用来代替流通领域的现金、支票, 成为电子货币的方便载体在金额领域使用, 所以对其安全性的要求更高。金融COS作为通用COS 的具体应用, 除了在交易流程上依赖于通用COS的安全体系, 还有金融交易其特有的安全措施。下面结合JETCOS 详细说明金融COS 的交易流程和应用安全。
5. 1 交易流程
圈存是将银行账户上的资金划转到电子存折或钱包的交易; 圈提是将电子存折中的资金划转到银行账户的交易; 消费是使用电子钱包或电子存折在银行POS 机上消费的交易; 取现是使用电子存折在银行终端上支取现金的交易; 修改透支限额是修改电子存折透支限额的交易。以下以JETCOS 的电子存折圈存交易为例说明安全交易的流程( 图3) 。
( 1) 终端按照应用协议数据单元( Application Protocol DataUnit, APDU) 的格式向IC 卡发圈存初始化命令启动圈存交易:CLA INS P1 P2 Lc DATA Le80 50 00 01 0B 密钥标识符+ 交易金额+ 终端机编号10由CLA, INS, P1, P2 共同指定该条命令是电子存折的圈存初始化, Lc 指示DATA 的长度, Le 指示该命令完成后期望返回的数据长度。
( 2) IC 卡进行圈存初始化。首先将命令DATA 域中的交易金额加上存折的余额检查是否超出存折存钱的上限, 如溢出则返回错误码“6985”( 金额上溢) , 否则继续执行; 然后根据DATA 域中的密钥标识符查找卡中的圈存密钥, 利用此密钥对产生的伪随机数、联机交易序号和“8000”加密生成过程密钥;再用过程密钥对交易金额、终端机编号等信息生成MAC1, 并向主机发送MAC1 和生成MAC1 的各项, 以供主机验证IC 卡的合法性。由于每次交易的伪随机数和交易序号不同, 所以过程密钥也不同。采用“一次一密”的方式, 确保了当次交易敏感数据的安全性。圈存初始化命令成功执行后返回的响应报文域为:DATA SW1 SW2原余额+ 联机交易序号+ 密钥版本号+ 算法标识+ 伪随机数+ MAC1 90 00其中DATA 域是传递给主机的数据, SW 是返回码, “9000”表示该命令成功执行。
( 3) 主机进行主机端的圈存处理。由于主机已经装载了圈存主密钥, 所以主机可以根据卡的应用序列号计算出该卡的圈存子密钥, 再由IC 卡传递的DATA 生成过程密钥和相应的MAC 值与MAC1 比较, 如不相同则返回错误码“9302”( MAC错误) , 否则继续执行, 从而保证了IC 卡传递数据的完整性和主机对IC 卡身份的认证。确认有效后主机从银行账户中扣除圈存金额, 并产生报文鉴别码MAC2, 用于IC 卡对主机进行合法性的认证。
( 4) 终端向IC 卡发圈存主过程命令, 其中DATA 域数据由主机端交易生成:CLA INS P1 P2 Lc DATA Le
80 52 00 00 0B 交易日期+ 交易时间+ MAC2 04
( 5) IC 卡进行圈存主过程。利用当次交易的过程密钥和主机传递DATA 的相关项生成MAC 值, 从而验证MAC2 是否有效。确认有效后, 完成实质性交易: 交易金额加在余额上, 更新联机交易序号, 更新交易明细文件, 并用TAC 密钥根据交易后的新余额、交易序号、交易时间等当次交易相关信息生成当次交易验证码TAC( Transaction Authentication Code) , 用于主机对IC 卡端圈存交易成功与否进行验证。圈存命令成功执行后返回的响应报文域为:DATA SW1 SW2TAC 90 00
( 6) IC 卡将TAC 传递给终端, 可供主机以后验证此次交易成功与否。
5. 2 应用安全
( 1) 交易状态机。一个完整的金融交易包括交易初始化和交易主过程, 初始化和主过程必须是同一种类型的交易。卡片的状态有: 空闲状态, 圈存状态, 圈提状态, 消费/ 取现状态和修改状态。仅当交易初始化后进入相应的交易状态, 同一类型的交易主过程才能进行。用内存系统区PSW 这个字的低五位标志五种状态。例如卡片初始状态是空闲态, 执行圈存初始化后, PSW 的b1 位被置为1, 即交易状态为圈存态。执行圈存主过程时, 先检查该位是否为1, 如果是, 则执行圈存主过程, 执行成功后置PSW 回空闲态; 如果不是, 则返回错误码“6901”( 状态无效) , 圈存主过程不被执行。表1 说明交易状态机的各种变化: 交易初始化可以在任何状态下执行, 执行后交易状态改变为初始化相应的状态; 交易主过程必须在相应的交易状态下才能执行, 执行后返回空闲态; 如果交易主过程的类型和交易状态不匹配, 则主过程不被执行。取余额和取交易认证可以在任何状态下执行, 并且不影响当前交易状态。
表1 交易状态变化
( 2) PIN验证。通用COS 的用户鉴别是指COS 对用户身份的认证, 并能改变当前安全状态, 但用户鉴别并不是必须的,这里的PIN验证是特定的金融交易类型要求的对用户身份的验证。除了电子钱包消费不用校验PIN, 其他各种交易类型都必须提交个人密码( PIN) , 这里也是通过判断PSW 值来检查是否已经校验PIN。PSW 的b9 位作为PINVer_OK 标志位, 当用户从金融终端输入合法的个人密码, 通过口令校验, 同时置该位为1。交易初始化时检查该位是否为1, 如果是, 继续执行, 否则返回错误码“6982”( 安全状态不满足) 。
( 3) CRC 校验。交易初始化时从存折/ 钱包文件中读取相关信息, 交易主过程时更新存折/ 钱包文件都需要读写FLASH存储器, 再读取前校验CRC, 更新后重新计算CRC 并写入FLASH 中相关文件的头部, 以便下次校验, 从而保证了读写物理过程的安全性和文件的完整性。
( 4) 备份写。智能卡能够在交易处理时, 包括拔卡或掉电的情况下, 保持数据的完整性, 这需要保证每次交易的所有更新一次性完成。为此JETCOS 中在FLASH 中开辟FL_RESTOREBUF区作为写入缓冲区, 每次交易需要对FLASH 更新的数据不是直接更新, 而是先写入FL_RESTOREBUF 区, 并置标志位FL_RESTORETAG 为0; 当交易处理完, 调用RestoreData子过程, 检查此时FL_ RESTORETAG 为0, 则从FL_ RESTOREBUF区依次更新到FLASH 的相应地址, 如果都更新成功, 则重置标志位FL_RESTORETAG 为1。更新FLASH 的过程中若遇到拔卡或掉电, COS 会在初始化时再次调用Restore-Data。如果第一次RestoreData 未进行成功, 则FL_RESTORETAG为0, 那么重新更新FLASH 的相应地址; 如果第一次RestoreData成功进行, 则FL_RESTORETAG 为1, 那么不必再次恢复数据。这种机制保证了拔卡或掉电时更新数据的一致性。
6 结束语
COS 的安全性是基于软件的安全, IC 卡系统的安全还需要对抗硬件攻击、分析攻击、应用攻击和系统攻击等。智能卡,尤其是金融IC 卡, 目前在金融系统还未得到广泛使用, 尚需要从硬件、稳定性、使用环境各方面加强抗攻击能力, COS 也必须相应加强反调试跟踪的能力。
( 文/武汉大学计算机学院, 杨帆, 张焕国)
推荐文章
论坛热帖