Microsoft Windows® 2000的加密服务提供程序(CSP, Cryptographic Service Provider)
CSP是真正实行加密的独立模块,他既可以由软件实现也可以由硬件实现。但是他必须符合CryptoAPI接口的规范。每个CSP都有一个名字和一个类型。每个CSP的名字是唯一的,这样便于CryptoAPI找到对应的CSP。目前已经有9种CSP类型,并且还在增长。每个CSP有一个密钥库,密钥库用于存储密钥。而每个密钥库包括一个或多个密钥容器(Key Containers)。每个密钥容器中含属于一个
CSP是真正实行加密的独立模块,他既可以由软件实现也可以由硬件实现。但是他必须符合CryptoAPI接口的规范。
每个CSP都有一个名字和一个类型。每个CSP的名字是唯一的,这样便于CryptoAPI找到对应的CSP。目前已经有9种CSP类型,并且还在增长。
每个CSP有一个密钥库,密钥库用于存储密钥。而每个密钥库包括一个或多个密钥容器(Key Containers)。每个密钥容器中含属于一个特定用户的所有密钥对。每个密钥容器被赋予一个唯一的名字。在销毁密钥容器前CSP将永久保存每一个密钥容器,包括保存每个密钥容器中的公/私钥对。
CryptoAPI作为MISF的基础技术,向开发人员提供了利用基于标准、核心加密功能的能力。CryptoAPI 1.0版支持公共密钥和对称密钥的操作,比如密钥生成、密钥管理、密钥交换、加密、解密、散列、数字签名和签名验证。CryptoAPI 2.0包含了核心加密功能和基于认证的功能以便开发人员能够通过这些公共密钥操作使用认证并进行必要封装和编码以将认证应用于他们的应用程序。
CryptoAPI使用了一种服务供应程序模型,在该模型中加密由加密服务供应程序CSPs提供。该模型使得开发人员易于使他们的应用程序适应不断发展的加密技术和政府的技术输出规定(请参阅"Microsoft Policy on Export Controls on Encryption"。通过不同的CSPs,开发人员能够使用具有更高输出性的加密系统,新的加密算法,或一些基于硬件的设备—而不必改变他们的应用程序代码。
由于CryptoAPI已经得到技术输出的许可,开发人员可以确信一个程序只需编写一次程序就可以进行全球发布。如今,CryptoAPI 通过Microsoft RSA的默认CSP可在全球使用。该默认CSP支持的算法包括:40-位RC2和RC4;512位RSA; MD2和MD5;160位SHA-1。
CryptoAPI支持X.509 v3认证格式和ASN.1编码,以及用于封装的PKCS #7和PKCS #10。这将使利用CryptoAPI的应用程序能够与其它依赖上述标准的基于认证的系统进行互操作。Microsoft还正在致力于使CryptoAPI成为一个跨平台的API。由于CryptoAPI已经应用于RSA,RSA将能够通过它的BSAFE®和所支持平台上的其它安全工具产品使用CryptoAPI。
CryptoAPI 1.0当前已可被成百万的Windows NT 4.0、Microsoft Internet Explorer 3.0和Windows 95 OSR2用户所使用。Microsoft于九月交付了一个CryptoAPI 2.0的开发人员beta版,预计将随下一版本的Internet Explorer和Windows与Windows NT的更新发布。
CryptoAPI是一个当前可用于全球的Internet Explorer、Windows 95和Windows NT的Win32 API。CryptoAPI通过将加密处理的复杂性与开发人员分离,而使得开发人员能够轻而易举地将密码处理集成到他们的应用程序之中。建立于Cryptographic Service Provider (CSP,密码服务供应器)模型顶层的CryptoAPI体系使得安全可被更新以满足商务和消费者的不断发展的需求。当输出策略改变后,开发人员能够利用可更新的CSP所允许的最强加密能力而不必更改他们的应用程序。
微软的CryptoAPI是PKI推荐使用的加密 API。其功能是为应用程序开发者提供在Win32环境下使用加密、验证等安全服务时的标准加密接口。
CryptoAPI的编程模型同Windows系统的图形设备接口 GDI比较类似,其中加密服务提供者CSP等同于图形设备驱动程序 ,加密硬件(可选)等同于图形硬件,其上层的应用程序也类似,都不需要同设备驱动程序和硬件直接打交道。
CryptoAPI共有五部分组成:简单消息函数(Simplified Message Functions)、低层消息函数(Low-level Message Functions)、基本加密函数(Base Cryptographic Functions)、证书编解码函数(Certificate Encode/Decode Functions)和证书库管理函数(Certificate Store Functions)。其中前三者可用于对敏感信息进行加密或签名处理,可保证网络传输信心的私有性;后两者通过对证书的使用,可保证网络信息交流中的认证性。
CAPICOM 可用于对数据进行数字签名、对代码签名、验证数字签名、包封保密数据、对数据进行散列处理、加密及解密数据等等。
Windows操作系统为我们提供了先进的加密体系模型CryptAPI,同时该模型也提供了丰富的函数供第三方开发使用。但使用CryptAPI完成一些通常的操作(如:加密、签名)仍然是相当复杂的。幸好MS同时提供了CAPICOM组件,封装了上述的复杂操作,使你只需要调用一两个函数,就可以完成指定的功能。
CAPICOM是一个COM模型的组件,可以在Windows环境下各种语言中使用。而且,CAPICOM中的大多数接口都是“脚本安全”的,这意味着你可以在浏览器网页脚本中安全地使用这些接口所提供的功能。
目前,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 或更高版本。
在最高级别上,Cryptography 命名空间可以分成四个主要部分。Cryptography 命名空间的主要功能是提供用来实现算法(例如加密和创建散列)的类。这些算法是使用包含两级继承的可扩展方式来实现的。抽象基类(例如 AsymmetricAlgorithm 或 HashAlgorithm)位于层次结构的顶端并表示算法类型。然后从顶级类派生出第二级抽象类,为算法提供公开的接口。例如,SHA1(安全散列算法)类是从 HashAlgorithm 派生的,其中包含 SHA1 算法特有的方法和属性。最后,从第二级抽象类派生出算法的实现,这是大部分客户端应用程序实例化并使用的算法。在这个具体级别上,这些实现可以是托管的、非托管的或两者兼具。
非托管的实现通常带有后缀“CryptoServiceProvider”(例如,SHA1CryptoServiceProvider),表示该实现实际上是由加密服务提供程序 (CSP) 提供的。CSP 安装在操作系统层,起了 Crypto API 包装程序的作用。托管的实现带有后缀“Managed”(例如 SHA1Managed),这些实现不依赖于 Crypto API,因此完全是由托管代码实现的。
关于这些算法还需要注意的是,当这些具体的类被实例化时,默认构造函数总是导入该算法的具有合理、安全值的默认参数(如果可能)。例如,依赖于公钥密码的不对称算法将生成随机密钥对,而对称算法则生成一个随机密钥和一个初始化矢量 (IV) 并自动设置诸如 Mode 和 Padding 等属性。此外,如果有可能,这些算法将使用“strong”默认值。
System.Security.Cryptography 命名空间的第二个主要类集合包括数据加密和解密进程中使用的类,以及各种 helper 类。命名空间中包含的类包括 RandomNumberGenerator 的抽象类(从中派生出 RNGCryptoServiceProvider),以及 ToBase64Transform 和 FromBase64Transform 类(用于与 base64 之间来回转换数据)。
除了提供加密算法以外,Cryptography 命名空间还包含子命名空间 X509Certificates。其中只包含三个用于表示和管理 Authenticode X.509 v.3 证书的类。
更多推荐
所有评论(0)