Windows中PKI客户端如何实现“真”的基础设施

时间:2022-08-15 09:14:08

Windows中PKI客户端如何实现“真”的基础设施

中图分类号:TV348 文献标识码:A 文章编号:1009-914X(2015)04-0065-01

1. 引言

[1]PKI是公开密钥基础设施(Pub-lic Key lnfrastructure)的缩写。它是一个用公钥概念与技术来实施和提供安全服务的具有普适性的安全基础设施。基础设施是一种无所不在的底层结构,解决某一问题,为大范围的应用提供一系列的服务。电子通信基础设施和电子供应基础设施就是我们熟悉的例子。作为前者,局域网允许不同的机器之间为不同的目的交换数据;作为后者,电源插座可以让各种电力设备获得运行所需要的电压和电流。他们的最终原理是相同的;基础设施的目的就是:只要遵循需要的原则,不同的实体就可以方便地使用基础设施提供的服务。用于安全的基础设施也必须遵循同样的原理。[1]安全基础设施就是为整个组织提供安全的基本框架,可以被组织中任何需要安全的应用和对象使用。安全基础设施的“接入点”必须是统一的,便于使用。可见,如何实现PKI“真”的基础设施的概念是PKI客户端最关键的内容。目前大多数所谓实现了PKI客户端功能的软件都被加入到一些应用程序中。但是这样的结构违反了PKI作为一个“真”的基础设施的概念,无法保证所有应用程序和平台提供风格一致的安全服务。所以,客户端软件应当独立于所有的应用程序之外,应用程序通过标准接入点与客户端软件相连,应用程序使用基础设施,但并不是基础设施的一部分。本文就PKI客户端在windows中实现“真”的基础设施的方法进行了探讨,并给出了一种具体的实现示例。

2. pki客户端软件系统“真”的基础设施的实现思路。设计PKI客户端软件系统必须尽量满足两方面的要求:第一,对于操作系统而言,概念上简单,对操作系统内核影响最小,高效。第二,对于各种安全模块而言,能够允许他们以可加载模块的形式实现安全功能,并且不会带来额外的系统开销。为了满足这个设计目标,笔者采用通过在内核中放置Hook。Hook的本质是一段用以处理系统消息的程序,通过系统调用,将其挂入到系统。Hook机制允许程序截获并处理发往指定窗口的消息或特定事件,在特定的消息发出,并到达目的窗口之前,Hook程序先行截获此消息并得到对其的控制权)的方法,来对内部对象提供PKI安全服务。其过程为:用户进程执行系统调用,首先遵循操作系统内核原有的逻辑找到并分配资源,进行错误检查,,并经过传统的自主访问检查,在操作系统内核试图对内部对象进行下一步操作之前,PKI客户端的Hook调用具体的安全模块来使内部对象满足认证要求、完整性;机密性、公正和不可否认性。这样,PKI客户端利用安全模块的载人机制和模块栈技术,使实现具体安全策略的软件系统与PKI客户端的框架相接,这就可以使用多个安全模块并且保持了PKI客户端接口的单一性。[1]由于PKI是一个安全基础设施,它必须达到一个全面的安全性。所以,经过系统分析,PKI客户端应该提供的Hook有:任务Hook、程序装载Hook、进程通信Hook;文件系统Hook、网络Hook等。PKI客户端可以使用任务Hook管理进程的安全信息并且控制进程的操作;它可利用程序装载Hook来实现用户装载程序的特权管理;它可以利用文件Hook来对于文件操作加入安全性;它可以使用进程间通信Hook来对系统的进程通信进行管理;它可以利用网络Hook提供PKI在网络通信方面的安全接入点。PKI客户端就可以使用这些Hook来实现全面的安全性。由于篇幅所限,在此不对使用这些Hook的必要性和实现方法进行详述。

3.PKI客户端“真”的基础设施的部分实现方案。PKI客户端“真”基础设施实现起来较复杂,因篇幅所限;在此不能对其进行全方位的分析。因为确保网络通信安全是PKI应用的一个重要方面,所以我们选取对网络缓冲区的访问为切入点来进行讨论。基于2所述的思路,我们需要构造一个PKI网络Hook,来实现PKI客户端软件系统在网络通信方面的接人。首先我们应确定在网络通信的哪一环构造网络Hook,并且如何构造网络Hook。

在Windows系统中进行编程时,总是需要使用系统提供的大量应用程序接口来调用系统功能或者与系统进行交互,在Windows系统中包含着专门针对网络编程的接口-Winsock APl。Winsock APl在Windows系统中为网络开发提供了一个协议无关的接口,它包含了一组网络I/O和获取网络信息的库函数,网络应用程序通过调用这部分函数实现自己的功能。Winsock API库函数都包含在Winsock.dll中,在系统中作为网络程序与TCP/IP的中间连接存在。当应用程序用TCP/UDP传送数据时,数据被送人协议栈中,然后逐个通过每一层直到被当做二串比特流送人网络。其中每一层对收

到的数据都要增加一些首部信息。其实真正需要安全服务的是应用程序传来的用户数据;有四种方式获取用户数据,其一,截取以太网帧;其二,截取IP数据报;其三,、截取TCP段/UDP数据报;其四,直接截取用户数据。如果采用前三种办法,都需要对数据报或帧进行分解,比较烦琐,故采用第四种办法。而应用程序使用网络的时候,都是通过调用Winsock.dll来进行网络通信。也就是说,当应用程序要发送用户数据时,应用程序就调用Winsock.dll中的APl函数,将用户数据提交内核空间,然后内核再将用户数据发送出去。如果在应用程序层截取数据,我们就必须了解该应用程序的源程序,然后开发出相应的插件来截取用户数据。但是应用软件的数量很多,而且大多数不公开源程序,即便我们能接触到源程序,对每一个应用程序都要写相应的插件,这也不现实,所以不采用这种方法。如果直接从内核空间读取用户数据就能避免上述问题;但由于安全性方面的考虑,操作系统内核的内核空间一般不能被用户访问,这种方法仍然不可行。如果我们在用户数据从用户空间发往内核空间时截获用户数据,也就是说;在用户数据从用户空间发往内核空间时会激发特定的消息,我们使用Windows提供的Hook先行截获此消息并得到对其的控制权,从而截获用户数据,这种方法对内核没有影响,而且也不需要开发多个插件,故2所述的网络Hook应该在此实现。下面我们将要探讨如何构造该网络Hook。

构造PKI客户端网络Hook的过程为:当操作系统中有某一个应用程序发送数据包时,提交到内核之前,PKI客户端截获此消息,对其引用的网络缓冲包中的数据进行PKI安全服务,再进行原来的下一步操作,由系统的TCP/IP协议栈将其修改过的数据包发送到网络上;―在系统内核接收到数据包后,也就是说经过系统的TCP/IP协议栈解析得到的用户数据之后;提交到应用程序之前,PKI客户端Hook截获此消息+对其引用的网络缓冲包中的数据进行PKI安全服务,再进行下一步操作,即将其修改过的数据包发送到相应的应用程序中。

上述实现方法能够保证数目不受限制的应用程序、设备和服务器无缝地协调工作,安全地传输、检索数据,安全地访问服务器等等。它可以被网络中的任何需要安全的应用的对象使用,实现了“真”的基础设施的定义。这只是PKI安全基础设施的一方面,在其他方面,我们可以使用其他PKI Hook来实现安全基础设施在其他方面的接入,来达到全面的PKI“真”基础设施的定义。

4. 小结。本文提出的实现方案,实现了严格意义上的PKI“真”的基础设施的定义,PKI实现“真”基础设施网络方面目前已基本完成。笔者相信,真正实现PKI“真”的基础设施的产品将会有着非常广阔的应用前景。

参考文献

[1] [美]Carlisle Adams Steve Lloyd,《公开密钥基础设施――概念、标准和实施》[M),北京,人民邮电出版社,2002.

上一篇:掺加粉煤灰对于水工大体积混凝土性能的影响 下一篇:江西北部页岩气资源勘查探究