Windows系统中的安全组件—CAPICOM
王之业
概述
Windows操作系统为我们提供了先进的加密体系模型CryptAPI,同时该模型也提供了丰富的函数供第三方开发使用。但使用CryptAPI完成一些通常的操作(如:加密、签名)仍然是相当复杂的。幸好MS同时提供了CAPICOM组件,封装了上述的复杂操作,使你只需要调用一两个函数,就可以完成指定的功能。
CAPICOM是一个COM模型的组件,可以在Windows环境下各种语言中使用。而且,CAPICOM中的大多数接口都是“脚本安全”的,这意味着你可以在浏览器网页脚本中安全地使用这些接口所提供的功能。
下面将对CAPICOM的功能做简要的介绍。在阅读这个介绍时,我们假设您已经对密码学知识、COM模型、脚本编程已经有初步的了解。
功能和适用环境
目前,CAPICOM共有两个版本:1.0版和 2.0版。其中,后者在前者的基础上,提供了一些额外的功能。
CAPICOM v1.0提供如下功能:
1、 产生和验证PKCS#7格式的数字签名;
2、 使用证书加密/解密数据;
3、 使用口令加密/解密数据;
CAPICOM v2.0额外提供如下功能:
1、 产生和验证代码签名;
2、 支持文件形式的证书;
3、 快速证书搜索;
4、 产生任意数据的哈希值;
5、 支持AES算法(需要Windows .NET Server 2003 或 Windows XP支持);
6、 支持高级证书属性,例如:政策、模板。
CAPICOM是重分发组件,也就是说它没有被包含在操作系统的中,需要单独安装注册该组件(可以从MS那里免费下载);CAPICOM v1.0 要求Win95、WinNT 4.0或更高版本,CAPICOM v2.0 要求Win98 、WinNT 4.0 + SP4 或更高版本。
主要功能使用说明
下面对几种常用的加密操作和证书管理功能进行说明。
哈稀运算
使用对象:HashedData
脚本安全。
注意:需要CAPICOM v2.0 支持。
口令加解密
使用对象:EncryptedData
脚本安全。
注意:该加密结果不符合PKCS#7标准,也就是说用CAPICOM加密的数据也只能用其解密。
数字信封
使用对象:EnvelopedData
脚本安全。
处理结果符合PKCS#7标准。
数字签名
使用对象:SignedData
脚本安全。
处理结果符合PKCS#7标准。
证书管理
使用对象:Certificate、Store等
脚本安全。
你可以利用CAPICOM提供的一系列证书管理组件完成证书的验证、查询、存储、显示等操作。
内部策略
算法搜索策略
CAPICOM首先检查系统缺省CSP是否支持用户指定的算法及密钥长度,如果失败,则搜索微软提供的CSP,并判断其是否支持上面指定的算法和密钥长度。搜索顺序如下:
1、 系统缺省CSP;
2、 Microsoft Enhanced Cryptographic Provider;
3、 Microsoft Strong Cryptographic Provider;
4、 Microsoft Base Cryptographic Provider;
由上可见,在CAPICOM中,我们可以通过自定义CSP并提供自己的加密算法,供上层应用程序使用。
例子程序
下面以VBScript调用CAPICOM为例,大家可以看到它的使用是非常简单的。
显示证书
Set Cert = CreateObject("CAPICOM.Certificate") ‘创建对象
Cert.Import “证书的PEM编码” ‘输入证书数据
Cert.Display ‘显示证书,大家可以看到那个很常见的证书显示窗口。
数据哈稀
Set hash = CreateObject("CAPICOM.HashedData")
hash.hash “需要求哈稀的数据”
hashResult = hash.Value ‘哈稀的结果已经存在hashResult中了
参考资料
在MSDN中有对CAPICOM的详细描述,以下提供两个连接地址:
CAPICOM使用参考:msdn\\Security\\ Security(General)\\SDK Documentation\\Cryptography\\ Cryptography Reference\\CAPICOM Reference
CAPICOM例子程序:msdn\\Security\\ Security(General)\\SDK Documentation\\CryptographyUsing Cryptography\\Using CAPICOM
下载最新的CAPICOM:
http://download.microsoft.com/download/7/7/0/7708ec16-a770-4777-8b85-0fcd05f5ba60/CC2RINST.EXE