The Cryptography API, or How to Keep a Secret (一)

 

The Cryptography API, or How to Keep a Secret

译注:因本文发布时间较早,文中所阐述某些内容已发生变化,发生变化处译者已标出。

Robert Coleridge
Microsoft Developer Network Technology Group

August 19, 1996

 

摘要

本文描述已在新的Windows NT 4.0版本和即将在Windows 95之后版本中发布的微软加密应用程序接口 (Microsoft Cryptography application programming interface) 本文检验了为安装并使用这些新的 API需要具备的条件。 为了完成例程的编译,你需要 Microsoft Visual C++ 4.2或以后版本及Windows NT 4.0或以后版本.

  部分加密算法 API处在美国政府出口限制下。(译注:美国政府对强加密产品的出口限制已撤消)

 下载例程http://download.microsoft.com/download/win95/api-samp/1.0/WIN98MeXP/EN-US/5003.exe

简介

加密 API在企业计算模型(Enterprise Computing Model)中有着重要的应用。企业计算化程度意味着人的接触更全球化,例如国际商品贸易,州际库存管理等等。在这些领域中经常要通过不安全渠道传输敏感信息例如电传合同,通过电子邮件收发订单,及种种其它情况。使用加密APICryptography API),你就能够保证信息的安全性。

本文使用CRYPTOAPI例程来演示如何加密、解密数据(decrypt or encrypt data),对文件签名、验证签名(sign and verify files),及增加、删除用户(add and remove users)。

加密API总览

加密服务提供者模块(Cryptography Service Provider――CSP)

[编者注:文章中部分内容直接取材于平台SDKPlatform SDK)的CryptoAPI文章。这些部分的段落已缩进(所有段落左对齐) 但没以数字、项目符号或注意:引导,因此你应该能容易的辨认出来]

当对用户的私有敏感数据提供保护时,加密API中的函数允许应用程序以一种灵活的方式来加密或者电子签名数据。所有加密操作都由独立的模块来实施,这些模块叫作加密服务提供者(cryptographic service provider)。操作系统中已经包含了一个CSP,名叫“Microsoft RSA Base Provider”

每个CSP都对加密API层提供一个不同的实现。一些提供强加密算法,而另一些会包含如智能卡(smartcards智能卡是一张嵌有包含用户安全信息芯片的塑料卡片)之类的硬件部件。另外,一些CSP可能会直接与用户交互,如使用用户的签名私鈅进行数据签名时。

应用程序不要使用依赖于特定CSP的属性。例如,“Microsoft RSA Base Provider”目前使用40位的会话密鈅(session keys512位的公鈅(public keys (参阅 "Symmetric Versus Public-Key Encryption," MSDN Library, Platform, SDK, DDK 文档)。当程序维护这些的时候,要小心的不要假定需要使用多大的内存去存储它们。另外,当用户在系统中安装一个不同的CSP后,程序很可能出错。你要努力使写出的程序尽可能的well-behaved and flexible(行为良好且易扩展)。

密鈅库

每个CSP都有一个密鈅库(key database),里面存储着由CSP保存的算法密鈅。每个密鈅库都包含一个或多个密鈅容器(key container), 每个容器都包含所有属于特定用户(或使用加密API的客户端程序)的密鈅对。每个密鈅容器都被赋与一个唯一的名字,这个名字是程序要获得此容器句柄时传给函数CryptAcquireContext的参数。图1图解了密鈅容器中的内容:

1  密鈅容器的内容

CSP在两次会话之间保存所有密鈅容器,包括所有属于它的公/私鈅对(public/private key pairs)。但会话密鈅在两次会话之间(session keys)不被保存。

尽管在计算机中可以找出这些密鈅来,但这些密鈅是以一种加密的安全格式保存的。

通常,会为每个用户创建一个默认的密鈅容器。这个密鈅容器是以用户的登录名来命名的,之后任何程序都可以使用它。应用程序自己也可以创建自己的密鈅容器和密鈅对,应用可以自己起名。

密鈅

会话密鈅

会话密鈅被用在加密和解密数据时。应用使用 CryptGenKey 或者CryptDeriveKey 函数来创建它。CSP将密鈅安全的保存在内部。

与密鈅对不同,会话密鈅是可变的。应用可以将密鈅保存下来以备后用或者用CryptExportKey函数以加密的密鈅二进制大对象或密鈅blobkey binary large object or key blob)形式将密鈅导出到应用中,然后传输给其它人。

公鈅、私鈅对

每个用户通常都有两对公鈅/私鈅对。一对用于加密会话密鈅,另一对用于创建数字签名。它们分别叫做密鈅交换( key exchange )密鈅对与签名(signature)密鈅对。

注意,尽管大多数CSP创建的密鈅容器会包含两对密鈅对,但这不是必须的。一些CSP根本不存储密鈅对,而另一些会存储额外的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值