1引言
由于移动公网的广泛发展和手机PDA的大力普及,移动终端作为固网上业务服务器的访问接入终端也变得越来越常见。然而,移动终端通过基于GPRS/CDMA的移动公网接入业务服务器的过程存在着较大的安全风险。在没有执行任何安全保护措施的情况下,移动终端就与业务服务器进行数据传输,很容易导致双方传输的数据被别有用心的人截取或者篡改,如果这些数据涉及到商业敏感信息,这将对双方的利益带来巨大的损失。并且,移动终端虽然体积小巧,方便携带,也容易丢失和被盗,再加上设备的非授权使用,授权用户的不合理或者恶意的行为,这些全都会带来安全威胁。因而,寻找给移动终端和业务服务器的访问过程增加安全性的解决方案是人们追求的目标。IPSecVPN技术是目前普遍使用的方法,先在公共网络上建立一个私有隧道,然后才在这个隧道上进行双方的数据传输。这样,安全性确实会得到一定的提高,但是如果没有智能卡的帮助,安全性还是会大打折扣。因此,针对这种情况,设计了一个基于智能卡的移动IPSecVPN安全接入终端系统,本文重点介绍该系统中CSP的开发。
2相关背景
2.1智能卡与PC/SC规范
智能卡是一张内含嵌入式集成电路芯片的信用卡般大小的塑料卡,具有储存信息量大,数据保密性好,抗干扰能力强,储存可靠,读写设备简单,使用灵活,操作速度快,脱机工作能力强,易于携带等特点。本系统所使用的智能卡是一张特制的内含有交换密钥对,签名密钥对和证书用以提供加解密、认证等服务的电子卡。
PC/SC规范是一套为集成电路卡(ICC)与个人计算机系统设计进行交互的规范,能够让智能卡方便地访问WindoW平台。其主要优点就是让应用程序不必为了与智能卡通信而去了解智能卡读卡器的细节,应用程序通过PC/SC规范和智能卡读卡器通信,后者再通过ISO7816与智能卡进行通信来获取智能卡提供的服务,其传输的包结构是TPDU。
1.2CryptoAPI体系结构与CSP
CryptoAPI是微软提供的一套公共接口,包含了一系列的函数,为应用程序提供加解密、数字签名、哈希等安全服务,而应用程序不必关心其具体实现。不同的供应商可以开发独立的加密模块,这些模块成为加密服务提供者(CryptographicServiceProviderCSP),完成密钥生成/交换、加解密、数字签名、认证等服务的真正模块。微软默认的CSP是RSABasedProvider,使用RSA公司的加密算法。一个系统中可以加载多个CSP模块,它们相互独立。应用程序可以使用任意一个CSP模块,而不必关心它的具体实现,每个CSP都对CryptoAPI进行不同的实现。
CryptoAPI的体系结构如图1所示。
从图1可以看出,它分为应用层:系统层和加密服务提供层。处于应用层的应用程序通过CryptoAPI来调用CSP模块提供的各种服务。
3软硬件结合的CSP开发
本文介绍的移动安全接入终端系统在WINCE下开发,使用WIND0wMOBILE5.0SDK。系统分两层,彼此间相互独立,上层进行拨号,下层给上层提供CSP支撑,上下两层通过系统来整合。CSP可以基于软件实现,也可以基于硬件实现,还可以基于软硬件结合实现。基于软件实现的CSP,其使用的密钥对及算法与操作系统有关,安全性不高;而基于硬件实现的CSP虽然安全性较高,但是费用昂贵;而基于软硬件实现的CSP,由于将密钥技术对生成和加解密操作与操作系统分离,所以其密钥的管理和加解密比基于软件的CSP安全提高了很多,而与安全性方面没有多少关系的部分使用软件实现,费用比基于硬件实现的CSP降低了许多,可以说是一种比较折中的选择。本系统使用的CSP采用软硬件结合的方案,目标是提供一个基于SDIO智能卡的CSP。哈希、解密等功能是不需要硬件实现的,因此这些部分可以用软件实现。而WINCE系统中包含了这部分的软实现,所以在设计中可以利用现有资源,只在需要硬实现的部分才对卡进行操作,这样既提高了性能又不影响安全性。
在对卡的调用中,命令和响应报文要符合IS07816-4标准,因此需要一个将数据根据智能卡指令组装成智能卡可识别的APDU的程序,由此程序负责数据格式的转换。
根据以上设计原理的分析,可得图2所示的CSP系统结构图。
将CSP的实现分为3个模块:CSP主程序模块、CSP图形界面模块、CSP智能卡访问模块
(1)CSP主程序模块
主程序模块是CSP的核心模块,实现CSP中的业务逻辑并以CryptoSPI标准接口形式提供。主程序模块通过调用图形界面模块的相应图形界面实现与用户的交互(在CRYPT—SLIENT标志未设置时)。主程序模块对智能卡的访问及数据传送都是通过智能卡访问模块来实现的。
(2)CSP图形界面模块
图形界面模块负责CSP与用户的交互实现。主要有卡片初始化时的PIN码设置界面和程序运行中提示用户输入PIN码以验证其合法性的界面。
(3)CSP智能卡访问模块
智能卡访问模块是CSP使用智能卡上服务的实现模块。它负责与智能卡建立连接,数据传输,释放连接等。它接收主程序模块的智能卡访问请求,并根据请求组织相应的APDU发送到智能卡,以及从卡上获取返回的结果,最终将结果数据提交给主程序模块。
将CSP划分成3个模块,可以降低程序各个模块之间的耦合度,实现起来比较灵活。如果需要更改程序界面就不需要去改变CSP主程序模块。同样,当使用另外一种智能卡时,只需要替换相应的智能卡实现模块,而不需要去改变主程序模块和程序界面,这样就可以很方便地将第三方的智能卡实现模块加载进来,实现对多智能卡的支持。
CSP主程序模块以DLL形式提供,是实现CSP的关键,其中的各个类都有具体的功能职责,并且通过组合和关联关系形成一定的层次关系。此外在CSP中,还有其他的辅助函数定义,如块加密时的编码与解码函数等。其类设计如下:
(1)CContext
CContext类对应了一个用户上下文对象,在逻辑上相当于密钥库。它通过组合关系包括了CSP中的其他类对象,并通过这些类对象来进行相应的操作。CContext作为用户上下文对象,是提供CryptoSPI中23个接口函数实现的对象。
(2)CContainer
CContainer类对应了一个密钥容器,一个用户上下文往往包含多个密钥容器。CContainer对象中会缓存其包括的证书信息,这里缓存交换密钥对证书和签名密钥对证书两个证书。
(3)CCard
CCard类代表了扩展卡类型。在这个类中封装了所有对卡的安全操作,包括验证、加解密、存储管理等。一个CCard对象会缓存对应扩展卡上的所有密钥容器对象,这样要访问密钥容器的相关信息就会变得方便、快捷。
(4)CRSAProvider
CRSAProvider类是用于调用系统提供的CSP的。它负责获取系统提供CSP的句柄,利用此句柄调用相关的功能实现以及释放得到的句柄。
(5)CPPManager
CPPManager类也是一个辅助控制类,它的定义只是为了使得程序更加清晰。它的功能是根据CPGetProvParam中参数的不同值取得CSP的相关信息。
(6)CHandleTable
CHandleTable类是一个辅助存储类,它用于存储CSP中密钥容器等对象的句柄。它采用Hash表结构来存储对象句柄,并且提供了相应的增加、删除、读取等功能。CSP编写测试完成后,必须要让微软对其CSPDLL进行签名,这样该CSP才能装进操作系统内。这步比较简单,只需要将其DLL与一个资源描述文件作为附件发往cspsign@microsoft.com就可以了,签名周期一般为3天。完成签名后,CSP就可以安装到系统中工作了。在WindowsMobile5.0系统中,需在注册表中注册该CSP,CSP安装完成,以后可以通过CryptoAPI接口调用CSP提供的安全服务了。
4结束语
本文不仅对微软加密体系进行了详细的分析,而且结合移动安全终端系统,对智能卡上的CSP的开发进行了充分的介绍和分析。CSP通过标准的CryptoSPI接口嵌入到微软加密体系中,使用户可以通过CryptoAPI接口来使用智能卡上所提供的高安全性的加密服务,来满足日益增加的网络安全需求。