智能卡由于安全性高、携带方便、价格便宜等特点被广泛应用于信息加密技术领域,而要在Windows操作系统上使用智能卡完成加密操作,则必须设计和实现基于智能卡的CSP,智能卡从硬件上提供密钥保护,应用程序通过CryptoAPI选择相应的CSP,方便、快捷地完成了智能卡提供的一整套加密操作。目前,基于智能卡的CSP在PKI系统中广泛流行,不同智能卡需要开发基于自身特定的CSP,因此将不同智能卡的CSP统一起来具有广阔的市场前景。
1CSP简介
CSP(CryptographicServiceProvider)加密服务提供层,是Microsoft公司用来在Windows平台上提供第三方加密模块的接口标准,它提供一套基于软件或者硬件的加解密服务,包含加密标准和加密算法的实现。作为一个CSP,它包含一个动态链接库DLL文件和一个签名文件,签名文件用于验证CSP,以保证CSP未被非法篡改。 CryptoAPI(CryptoApplicationProgrammingInterface)是PKI推荐使用的一组加密API,它是由操作系统开发商提供给应用程序的开发接口。CryptoSPI(CryptoSystemProgrammingInterface)也是一组API接口,它是由操作系统开发商提供给密码服务开发商的系统接口,其实际应用如图1所示。应用程序的开发者安装CSP后,通过CryptoAPI把来自应用程序的调用交给操作系统,操作系统内部选择指定的CSP,通过CryptoSPI来驱动CSP执行实际的操作,完成加密解密、签名认证、证书导入导出等一系列完整的加密服务。
2基于智能卡的CSP设计与实现
2.1智能卡的文件系统设计
一个CSP有一个密钥库,如图2所示。密钥库是用来存储密钥的,每个密钥库中包含一个或多个密钥容器(KeyContainers),而每个密钥容器中包含属于一个特定用户的所有密钥对,CSP利用密钥容器来管理密钥,一般来说,一个密钥容器中有两对公私密钥对,即交换密钥对、签名密钥对。不同智能卡可以建立不同的CSP,应用程序可以通过 CryptoAPI选择相应的CSP以及其中相应的密钥容器来完成智能卡提供的一整套加密操作。
智能卡(SmartCard)是IC卡的一种,它的特点是安全性高、价格便宜、携带方便。它内含有集成电路芯片,本身具有存储能力和计算能力,可以存储私钥和证书,实现RSA、ECC、HASH等复杂的算法,被广泛应用于身份认证、访问控制、密钥存储和算法实现等方面。本设计使用的智能卡是武汉天喻智能卡(Version1.2),根据CSP中密钥容器的结构,对天喻智能卡的文件系统进行的设计如图3所示,其中主控文件(MF)是整个文件系统的根,每张卡有且只有一个MF,它在卡的个人化过程中首先被建立起来,在卡的整个周期内一直存在并保持有效,可存储卡的公共数据信息并为各种应用服务,它所对应的是密钥容器结构中的密钥库。专用文件(DF)是 MF下针对不同的应用建立起来的一种文件,它所对应的是密钥容器结构中的密钥容器;基本文件(EF)是用于存储各种应用的数据和密钥,它存在于MF和DF 下,它所对应的是密钥容器结构中的密钥对和证书。
2.2基于智能卡的CSP设计
基于智能卡的CSP设计可以基于软件实现、硬件实现和软硬件结合实现。基于软件实现的CSP,安全性不高;基于硬件实现的CSP虽然安全性高,但是费用昂贵;基于软硬件结合实现的CSP,费用不高、安全性好,这种实现方法的密钥对在智能卡内产生,其私钥不能被导出,利用私钥进行的解密和签名操作也在卡内进行,而对称加密、产生哈希值的操作则由软件完成。本设计采用的是基于软硬件结合实现,HASH算法和对称加密算法的实现采用软件方式,而RSA密钥对和随机数则在智能卡建立完文件系统后由智能卡内部产生和使用。
CryptoAPI包括初始化函数、密钥生成函数、加解密函数、数字签名验证函数、密钥操作函数和散列函数等25个基本函数,应用程序通过这25个函数来调用CSP模块,完成连接上下文、产生密钥、导入导出密钥、产生哈希值、加密解密、签名验证、销毁密钥和释放上下文等操作。在 CryptoAPI的25个基本函数中CPAcquireContext是最重要的函数,在此接口内可以完成智能卡的连接和初始化工作,调用此接口可以获取指定密钥容器里的密钥句柄,从而对完成之后的加密解密和签名验证工作,使用CPReleaseContext进行释放。在基于智能卡的CSP实现中,需要使用句柄来标记和访问密钥容器和密钥,CSP的上下文对象句柄的类型是HCRYPTPROV,密钥对象句柄的类型是HCRYPTKEY,哈希对象句柄的类型是HCRYPTHASH。在本设计中,CSP的上下文对象句柄指向的是自定义的结构体PROV_CONTAINER,它包含密钥容器名称、密钥句柄、设备句柄等信息;密钥对象句柄指向的是自定义的结构体KEY_INFO,它包含密钥操作的相关信息;哈希对象句柄指向的是自定义的结构体 HASH_INFO,它包含哈希操作的相关信息。
基于智能卡的CSP设计主要包括上下文的连接部分、密钥对的产生部分、加密解密和签名验证部分。上下文的连接部分主要实现的是连接智能卡、建立智能卡的文件系统;密钥对的产生部分主要实现的是在智能卡内部产生RSA密钥对;加密解密和签名验证部分主要实现的是利用密钥进行加密解密、计算哈希值后进行签名验证。选用RSA作为签名和交换算法、MD5和SHA1作为HASH算法、DES和3- DES作为对称加密算法。根据基于智能卡的CSP软件设计的实际需要,必须依照智能卡的通信机制和安全体制,制定建立文件系统、产生RSA密钥对、公钥加密、私钥解密、签名验证、产生随机数等基本命令,依据CryptoAPI的25个基本函数和智能卡的基本命令,完成基于智能卡的CSP设计。
2.3基于智能卡的CSP实现
基于智能卡的CSP设计完成之后,即可进行测试。因为第三方开发的CSP要获取微软的签名才能够应用到其操作系统中,所以为了避免测试过程中每一次修改都要重新获取微软的签名,我们采用的是在所开发CSP的DLL外再加一层DLL壳,由DLL壳调用里面CSP的DLL,由外壳DLL来获取微软签名,来保证修改过的CSP的DLL对签名没有影响。本测试程序采用基于MFC的对话框形式,通过按钮来实现对CSP的DLL的测试,接着将通过测试后的CSP进行安装,最终实现基于智能卡的CSP设计。