摘 要 本文从密码学的角度对windows操作系统进行了分析,指出了windows操作系统是如何通过程序来实现密码安全功能的,并描述了windows操作系统的安全特征及实现用户认证的技术细节。
关键词 csp;ms-capi;数字证书;activex控件;com组件;ntlm;域控制器
1 引言
在安全方面,微软开发并免费提供一套密码接口api(ms-capi),使用这套api能够解决windows操作系统中的密码安全问题。
像java中的jca/jce一样,ms-capi隐藏了密码算法本身的一些繁琐内容,而仅体现出功能上的要求。ms-capi同样使用了引擎和类的方式,但它有自己的术语描述方法。在ms-capi中,提供者类等同于我们常说的csp(cryptographic service providers)。不同的厂家提供的csp在内部实现代码上可能不尽相同,但是在对外接口上按照微软的定义都是完全一样的。ms-capi提供一套通用的但需要csp支持的外包接口,应用程序开发者通过使用这套接口来实现密码安全功能。csp的内部内容对于应用程序的开发者来说是透明的。WwW.133229.COMms-capi自带默认的微软csp,这个csp也可被其它第三方的csp所替代。
图1 ms-capi与csp的关系
图2 ms-capi方法与csp
csp实际上就是一个dll文件,这个文件必须经过微软的签名才能保证它在windows操作系统中的可用性,目前,微软免费对第三方的csp进行签名。在应用过程中,windows操作系统首先要验证签名合法性后才能正常使用。
2 ms-capi
我们来看一段用vb写的小程序,这是运用ms-capi来生成数字签名的例子。例子本身很简单,但笔者还是给出了一定的注解,便于阅读。
//给需要签名的明文分配一个变量strplaintext
strplaintext = ”明文数据”
//通过capicom数字签名类创建一个对象,给对象命名odigsig
set odigsig = createobject(“capicom.signeddata”)
//在数字签名对象和明文建立关联
odigsig.content = strplaintext
//设置输出数据仅为签名结果而不包含明文
fdetached = true
//生成明文。通过调用数字签名对象的sign方法,同时传递相应参数到方法中,变量signature包含签名结果
signature = odigsig.sign(nothing,fdetached)
和jca/jce类似,ms-capi的最大优点就在于它是完全公开的,用户可以自由的使用。而且,它已经成为了ie和windows2000以上操作系统的一部分。在未来的日子里,依靠微软的品牌效应再加上windows操作系统庞大的用户群,很可能使得ms-capi成为相当流行的密码安全类软件。ms-capi另一大优点在于capicom。capicom是一个com客户端,可以通过activex控件或com组件的形式进行密码函数的自动调用,capicom用于处理基本的密码操作,如签名验证,数字信封,解密数字信封,加解密数据,检查数字证书的有效性等。capicom可以用vb或vc进行调用。
3 安全与windows操作系统
3.1 安全特征
(1)安全登录与反欺骗措施:安全登录要求管理员为所有用户设置一个口令用于登录。黑客会开发一个能够给用户显示登录界面的程序,然后通过某种方式在用户终端上运行,而不加怀疑的用户往往会认为这个登录界面就是系统的登录界面,并在其中输入自己的用户id和口令,攻击者以此方式轻易地就能够截获用户id和密码,并显示一个登录失败的错误信息给用户。windows2000以上操作系统通过要求用户使用ctrl-alt-del结合的方式进行登录来防止上述攻击。键盘驱动程序在捕捉到ctrl-alt-del的序列以后,会通知系统调用正确的登录显示界面。在windows中,是没有办法屏蔽ctrl-alt-del三键组合消息的,因此,使得黑客欺骗变得无机可乘。
(2)任意访问控制:这种机制允许资源如文件的拥有者能够决定谁并且能够以哪种方式来访问资源。
(3)权限访问控制:这种机制允许系统管理员在出现问题的情况下,超越任意访问控制的范围。
(4)地址空间保护:windows2000以上操作系统给每个进程提供独立的受保护的虚拟地址空间,这样就有效地防止了恶意的进程攻击。
(5)新页归零:这种机制保证了任何新页都是从内存地址二进制0开始的,这样一来,一个进程就无法知道它前面的那个进程到底做了些什么。
(6)安全审计:利用这个机制,系统管理员能够通过查询系统产生的日志了解系统的相关安全事件。
每个windows2000的用户和用户组会被分配一个惟一的sid,这个sid由一个随机数和一个短的二进制的头标志组成。每个sid在全世界惟一。进程和线程只有在用户的sid下才能运行。每个进程在windows2000下都有一个包含sid和其它信息的可访问令牌。系统中的每个资源(如文件)又都有一个对应的安全描述符,该描述符描述了哪个sid允许做哪些操作。
3.2 用户认证
windows 2000使用kerberos协议来完成用户身份认证。同时系统也支持windows nt的挑战/响应机制,这种机制又被称之为ntlm。ntlm以挑战/响应机制为基础,同时避免明文口令的简单传递。ntlm的工作原理如下:
(1)用户在登录界面上输入用户id和口令。用户的计算机计算出口令的摘要值,同时在内存中销毁用户输入的口令。
(2)客户端将用户id的明文传递到服务端。
(3)服务器传送16字节的随机数到客户端。
(4)客户端用口令计算出的摘要加密随机数,客户端将加密结果(客户端响应值)传送到服务器端。
(5)服务器将用户id、传给客户端的随机数、客户端响应值(即客户端加密结果)传递给一台特殊的机器,我们称之为域控制器。在域控制器上保留着所有的用户id和口令的消息摘要值。
(6)域控制器接收到从服务器端传来的上述数据以后,从数据库(sam)中可以得到当前用户对应的口令消息摘要值,并且用它来加密从服务器端传来的随机数。
(7)域控制器通过比较从服务器端传来随机数加密结果(第5步)和自身计算得到的结果(第6步)的一致性,来判断用户的身份是否合法。
图3 windows ntlm 的认证过程
4 结论
从安全性的角度来说,windows系统本身还有诸多方面值得我们进行深入的研究,因为windows系统的安全性被集成到了操作系统的方方面面,大多数安全决策被本地的安全颁发策略所控制,本文的侧重点仅在于关于密码安全基础的概念方面,力图使读者对于系统的安全特性有所了解,以便日后再进行深入研究。
参考文献
[1]steve burnett & stephen paine著,冯登国,周永彬,张振峰,李德全等译.《密码工程实践指南》.清华大学出版社,2001.10
[2]bruce schneier著,吴世忠等译.应用密码学——协议、算法与c源程序.机械工业出版社,2000
[3]张世永.《网络安全原理与应用》.科学出版社
[4]尹传勇,刘寿强,陈娇春.《基于pki/ca身份认证体系的应用研究》.计算机安全