基于USB和SD接口智能卡的CSP设计
为了方便在Windows 上提供加密服务,Microsoft 提出了一套CSP/Crypto API 的开发模式,它提供了一套加解密和签名认证的编程接口供应用程序开发人员调用,通过调用这套函数接口,应用程序可以利用软件或硬件(智能卡)为用户提供强大的加解密服务。近几年来,由于智能卡的小巧,方便易用和高安全可靠性使得它已成为主流的安全介质。采用基于智能卡的CSP 能充分发挥智能卡即插即用、总线供电的特点,使安全设备具有可携带性和灵活性,能方便地在各种场合进行签名加密和认证。然而目前每个智能卡厂商都需要开发基于自己智能卡的CSP,如果能提供一套方便的、集成多厂商智能卡的CSP 的解决方案,将大大提高开发效率,节约开发成本,具有很高的应用价值和很好的市场前景。
1 CSP简介
1.1 关于Microsoft CryptoAPI和CSP
为了提供一些诸如加密/ 解密、签名/ 认证、随机数的生成等基本的信息安全服务,一些标准化组织和业界的大厂商提出了各自的一套关于提供这些服务的API,目前有关加密API 的国际标准和规范主要有:Intel CDSA、RSA PKCS#11 和微软CryptoAPI。其中微软CryptoAPI 是PKI 推荐使用的加密API[1],它为应用程序的开发者提供了一套完备的Win32 环境下加解密和签名验证接口,而CSP(Cryptographic Service Provider)则是真正实现这些加解密和签名验证功能的基本模块。
如图1 所示,应用程序通过调用CryptoAPI 提供的接口来使用所提供的安全服务,操作系统根据上层的API 调用来选择合适的SPI,相应的CSP 则通过统一的接口(SPI)来得到上层调用的参数,API 函数的具体实现则由具体对应的CSP提供。其中CSP 的实体是一个DLL 和一个签名文件,DLL 中包括:加密设备提供函数、密钥产生和交换函数、数据加密/ 解密函数、散列和数字签名函数等几类共24个基本的函数。在函数具体的实现中可以采用软件实现和基于USB 或SD 接口智能卡的硬件实现方式。本文提出了一套基于USB 和SD 接口智能卡的CSP 设计,应用程序可以通过CSP 在卡中建立公/ 私钥文件、对称密钥文件,并且能够进行加解密和签名认证。由于智能卡在不同文件的访问上可以设置不同的密钥来规定文件的访问权限,因此从硬件上保证了密钥文件的安全存储。
1.2 关于智能卡
这里所用到的智能卡也称CPU 卡,卡中包含中央处理器C P U 、E E P R O M 、R A M、R O M,其中R O M 中固化有COS(Chip Operating System)。智能卡对外通信的接口最常见的有应用于PC 上的USB 接口以及用于手持设备上的SD 接口。目前业界应用最广的智能卡标准是ISO7816,各大智能卡厂商会根据此标准来生产智能卡以及COS。智能卡能和外界进行通信,根据传入的命令在内部执行并且传出结果,我们所用到的智能卡能够在内部生成和保存RSA 的公私钥对,进行RSA 加解密运算。
在智能卡中有一个文件系统,根据ISO7816-4,智能卡内支持两种类型的文件:DF(Dedicated File)和E F(Elementary File)。DF 类似于DOS 中目录文件,其中可以包含DF 和EF;EF 类似于DOS 中的数据文件,是真正存放数据的文件,公私钥和对称密钥文件对属于EF 文件;在每个智能卡文件系统中有一个根目录文件MF(Master File),所有的DF 和EF 都存放在此根目录文件中。EF 存在两种类型,一种是二进制的EF,另一种是记录型EF。二进制EF 文件是一种无结构的文件,而记录型的EF 文件则是按记录来进行存取的,每条记录的长度可以在文件创建初指定。各智能卡厂商编写的COS 对ISO7816 的支持不同,如有的厂商COS不支持记录文件,文件访问权限的实现大不相同等等,这就需要各厂商开发针对自己智能卡的CSP,这样不利于节约开发成本和提高开发效率。本文提出的这套CSP 架构能够方便地集成不同厂商不同COS 版本的智能卡,从而解决该问题。
1.3 基于USB 和SD 接口智能卡的CSP
目前智能卡的接口主要是USB 接口和SD 接口两种,前者主要用于PC 机上,支持的操作系统多为各版本的PC Windows 系统(Windows 98/2000/XP);后者主要用于一些手持设备,如智能手机、掌上电脑,而这些手持设备上可以使用W i n -dows CE 操作系统。本文所介绍的CSP 主要是在这两种操作系统上进行开发的。对于USB 接口智能卡,可以通过PC机上的CSP(基于Windows98/2000/XP)直接对其进行操作;对于SD接口智能卡,有两种操作方式:一种是在手持设备上开发CSP(基于Windows CE)对其进行操作,另一种方式是通过PC 机上的CSP 和接入PC机的手持设备在底层进行通讯,CSP 把命令通过PC 机发送到手持设备的智能卡中,此时手持设备相当于一台读卡器。
2 基于USB和SD接口智能卡体系结构和模块设计
2.1 CSP 的逻辑结构
我们提出的这套CSP 的设计主要包括三个部分:CSP 的逻辑结构、智能卡中文件组织结构、CSP 的基本命令流模块。CSP 的基本操作是对密钥的操作,其中密钥主要是用于对称加密的会话密钥和用于交换和签名的公/ 私密钥。密钥操作主要包括:产生密钥、销毁密钥、导入导出密钥、用对称密钥进行加密解密、用公/ 私密钥对进行签名验证等。
CSP 的逻辑结构如图2 所示。密钥由密钥提供者(KeyProvider) 来提供,密钥提供者可以分为会话密钥提供者(Session Key Provider)和公私密钥提供者(RSA Key Provider),负责具体密钥的产生、密钥参数设置、密钥的操作的实现。密钥提供者驱动智能卡产生RSA 公/ 私密钥,并保存在卡内相应的密钥文件(EF)中,同时智能卡还提供签名、验证和随机数生成等操作,这些操作都是由密钥提供者根据ISO7816-4 协议在内存中构建相应的命令并发送到智能卡由其执行。相对于会话密钥,CSP 则可提供软实现,在内存中来进行操作。
密钥容器(Key Container)控制密钥提供者,每一个密钥容器对于一个特定的应用。对于一个新的应用,CSP 创建一个新的密钥容器,设置所需的参数,通过控制密钥提供者来产生特定的密钥,最后对其进行操作。对于用户,各个密钥容器之间是透明的,互不影响互不干涉,统一应用于同一个CSP 中。密钥容器的创建涉及到在智能卡上建立一个目录文件(DF),其中有关于该容器的密钥文件(EF)都放在该目录文件下。CSP 管理员(CSP Manager)充当一个全局管理者的角色,它是全局唯一的,负责建立和管理各类CSP 上下文环境。每个用户有自己特定的CSP 应用环境,CSP 上下文则代表一个用户具体的CSP 应用环境,CSP 管理员负责初始化CSP 的管理环境,主要包括初始化智能卡和设置智能卡管理员密钥文件。CSP 上下文(CSP Context)相当于一个用户的应用环境,所有的应用都是在CSP 上下文中完成,CSP 应用环境主要包括该用户所建立密钥容器的类型、密钥提供者的类型和密钥容器所在的具体位置。CSP 上下文在智能卡中为每个用户创建该CSP 应用主目录文件,保存用户密钥文件,为每个应用创建密钥容器,并对其进行管理。
2.2 智能卡中的文件系统结构
对于上面提出的CSP 逻辑结构,在智能卡中应有相应的文件系统结构对其进行支持,对CSP 管理员、CSP 上下文、密钥容器和密钥提供者的操作都涉及到智能卡相应的文件操作,在卡中建立特定文件结构来进行密钥的管理和操作。我们设计的该CSP 智能卡文件系统结构如图3 所示,其中CSP 管理员初始化卡,建立根目录(MF),在根目录下建立管理员密钥文件。只有拥有合法密钥的用户才能拥有管理员权限;为用户建立CSP 上下文,即在根目录下面为每一个CSP 上下文建立一个目录文件(DF),不同的目录文件对应于不同的CSP上下文,最后在根目录下创建一个记录型的EF 文件,该文件每一条记录对应一个上下文,记录它所在的目录ID、CSP上下文名字等信息。CSP 上下文在自己的目录文件中建立用户密钥文件、密钥容器目录文件,以及记录密钥容器信息的记录型EF文件。每一个密钥容器对应于一个目录文件,在密钥容器的目录文件中,密钥容器建立自己特定的密钥文件,包括会话密钥和公/ 私密钥文件。各密钥容器目录相互独立互不影响。
2.3 CSP 中的命令流
该CSP 设计的两大部分是CSP 逻辑结构设计和CSP 命令流的设计。CSP 命令流是CSP 的逻辑模块(CSP Manager,CSP Context,CSP Container,Key Provider)根据ISO7816-4 中命令格式在内存中构建命令并发送到智能卡中,智能卡执行命令后返回结果。该CSP 中对智能卡进行操作的模块包括:命令构建模块、命令传输模块、命令解析模块。CSP 上层逻辑模块对智能卡操作的过程主要包括:通过命令构建模块构建要进行操作的命令,命令传输模块调用卡的驱动把命令发送到智能卡中执行,执行后通过命令传输模块得到返回的结果,再由命令解析模块解析该结果。
这样设计最大的好处在于决策和执行分开。逻辑模块决策要执行的命令,由命令流模块构建和传输命令。命令流模块可以针对不同厂商的智能卡来设计和实现,比如根据每个智能卡厂商COS 对ISO7816-4 的支持不同,分别针对其开发不同的命令构建模块和命令解析模块集成到一个CSP 中。逻辑模块只负责决策要实施的命令,具体命令的构建、传送、解析对它是透明的。这样就能在不改变上层逻辑结构模块的前提下,靠增加命令流模块方便地集成更多厂商智能卡设备;同时由于命令传输模块和智能卡驱动分离,通过命令传输模块调用不同的驱动把命令发往不同接口的智能卡,这样该CSP 就能支持基于不同平台、不同终端、不同厂商的USB 和SD 接口智能卡。
3 结论
开发这样一套能集成不同厂商智能卡的CSP 不仅能节约开发成本,提高开发效率,而且由于其本身支持SD 接口智能卡,使之能用于手机和Pocket PC 这样的掌上设备,可以开发出基于其上的功能强大且灵活的应用程序,这些应用程序可以被用于诸如个人金融、证券、保险等行业和领域,应用前景十分广阔。