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

原创 2004年02月07日 22:51:00

 

The Cryptography API, or How to Keep a Secret

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

Robert Coleridge
Microsoft Developer Network Technology Group<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

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图解了密鈅容器中的内容:

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />CSDN_Dev_Image_2004-2-61625520.gif

1  密鈅容器的内容

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

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

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

密鈅

会话密鈅

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

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

公鈅、私鈅对

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

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

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

几个加密API函数[编者注:下面缩进部分的文件引用自MSDN Library, Platform, SDK, 及 DDK 文档。]初始化CSP:CryptAcquireContext, CryptRe...
  • MSVCer
  • MSVCer
  • 2004年02月07日 22:53
  • 1252

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

CRYPTOAPI 例程概述随本文提供的CRYPTOAPI 例程是一个“完整”的加密/解密工具。程序能够向默认的CSP中添加与移除用户,使用或不使用密码进行加密与解密文件,签署与验证签名,显示默认CS...
  • MSVCer
  • MSVCer
  • 2004年02月07日 22:53
  • 898

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

生成密鈅:CryptDeriveKey, CryptGenKey, CryptDestroyKey这三个函数用来产生密鈅句柄: CryptDeriveKey 函数从一个指定的密码(password)产...
  • MSVCer
  • MSVCer
  • 2004年02月07日 22:53
  • 1017

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

加密当进行数据加密时,明文消息(plain-text message)在被编码后会看起来象完全随机的二进制数据,以至于没有密鈅就很难将其转化为原来的消息。本文中使用如下定义:消息(Message):指...
  • MSVCer
  • MSVCer
  • 2004年02月07日 22:51
  • 1462

Java ™ Cryptography Architecture (JCA) Reference Guide

Cryptographic Functionality Available With JSSE Cryptographic Algorithm * Cryptographi...
  • liuyaoyue
  • liuyaoyue
  • 2014年04月24日 11:43
  • 1663

使用google authenticator为你提供一次一密的ssh登录(by quqi99)

作者:张华  发表于:2014-11-03版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明( http://blog.csdn.net/quqi99 )...
  • quqi99
  • quqi99
  • 2014年11月03日 14:22
  • 2949

总结之知识图谱前沿技术课程

本文的内容主要基于2017年12月2日在苏州大学举办的知识图谱前沿技术课程(感谢各位老师的talk,受益良多)以及本人在之前阅读的有关paper。...
  • MrPhD
  • MrPhD
  • 2017年12月03日 17:37
  • 358

How to Keep Your Skills Up-to-Date in the New Year(如何提升测试技能)

原文链接:http://www.joecolantonio.com/2014/01/14/test-automation-trends-for-2014-how-to-keep-your-skills...
  • xiaoguanyusb
  • xiaoguanyusb
  • 2015年12月05日 20:39
  • 133

HDU-balloons-求颜色最多的气球的颜色

问题及代码: /* *Copyright (c)2014,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:HDU.cpp *作 者:单昕昕...
  • MIKASA3
  • MIKASA3
  • 2015年01月19日 14:26
  • 1028

App Key 和 App Secret 有什么用?

App key简称API接口验证序号,是用于验证API接入合法性的。接入哪个网站的API接口,就需要这个网站允许才能够接入,如果简单比喻的话:可以理解成是登陆网站的用户名  App Secret简称...
  • qq_24656927
  • qq_24656927
  • 2017年02月07日 15:55
  • 780
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:The Cryptography API, or How to Keep a Secret (一)
举报原因:
原因补充:

(最多只允许输入30个字)