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<?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根本不存儲密鈅對,而另一些會存儲額外的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章