Windows操作系统的密码解决方案
科普小知识2021-11-03 10:43:58
...
摘 要 本文从密码学的角度对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.11665.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允许做哪些操作。