首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

Microsoft CryptoAPI 加密技術入門(一):架構、加密模式與 CSP 核心概念

     編輯:VC 教學

前言

資訊爆炸時代,資料安全至關重要。Microsoft CryptoAPI 為 Win32 應用程式提供標準加密介面,支援對稱/非對稱加密、雜湊、數位簽章、憑證管理。本文建立核心概念,為深入實作奠基。

一、四大加密模式對比

模式金鑰特性優點缺點典型用途
公開金鑰加密公鑰/私鑰對金鑰分發簡單、支援簽章速度極慢 (對稱的 1/1000)金鑰交換、數位簽章、小資料加密
對稱加密單一共享金鑰速度極快、適合大量資料金鑰分發困難、無不可否認性檔案/通訊加密、資料庫欄位加密
混合加密對稱加密資料 + 公開金鑰加密對稱金鑰兼具速度與金鑰管理優勢實作複雜度較高SSL/TLS、S/MIME、PGP、大多數實務系統
數位簽章/鑑別私鑰簽章 + 公鑰驗證確保完整性、來源認證、不可否認需 PKI 基礎設施程式碼簽署、文件簽署、交易不可否認

二、CryptoAPI 架構模型

類似 GDI (圖形裝置介面) 分層設計:

應用程式層
    ↓ 呼叫標準 API
CryptoAPI (加密服務介面)
    ↓ 統一介面
CSP (Cryptographic Service Provider) ← 可替換模組
    ↓ (可選)
加密硬體 (智慧卡、HSM、TPM)
  • 應用程式:完全不接觸 CSP 細節,僅呼叫 CryptoAPI
  • CryptoAPI:提供五大功能群
    1. 簡易訊息函數
    2. 低層訊息函數
    3. 基礎加密函數 (核心)
    4. 憑證編碼/解碼函數
    5. 憑證存儲管理函數
  • CSP:實作具體演算法 (RSA, AES, SHA 等),由廠商提供 (Microsoft Base/Enhanced/Strong CSP 等)
  • 加密硬體:金鑰產生/儲存於安全元件,私鑰永不離開硬體

三、核心物件與控制代碼

四、基本初始化流程

HCRYPTPROV hProv = 0;

// 1. 取得預設 CSP 語境 (Microsoft Base Cryptographic Provider v1.0)
if (!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, 0)) {
    DWORD err = GetLastError();
    if (err == NTE_BAD_KEYSET) {
        // 容器不存在,建立新容器
        if (!CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_FULL, CRYPT_NEWKEYSET)) {
            // 失敗處理
        }
    } else {
        // 其他錯誤
    }
}

// 後續使用 hProv 建立金鑰、雜湊、加解密...

// 結束時釋放
CryptReleaseContext(hProv, 0);

五、CSP 類型與選擇

控制代碼代表生命週期
HCRYPTPROVCSP 內容提供者語境進程級,通常一個進程一個
HCRYPTKEY金鑰 (對稱/非對稱/Session)依需求建立/銷毀
HCRYPTHASH雜湊物件計算期間持有

六、關鍵資料結構:金鑰 Blob

金鑰在記憶體/檔案中以 Blob 形式儲存:

  • PUBLICKEYBLOB:公開金鑰 (可安全傳輸)
  • PRIVATEKEYBLOB:私有金鑰 (需加密保護)
  • SIMPLEBLOB:用公開金鑰加密的對稱金鑰 (金鑰交換)
  • OPAQUEKEYBLOB:硬體金鑰參考 (不含實際金鑰材料)

七、現代化提醒

CryptoAPI 為 Legacy API。Windows Vista+ 引入 CNG (Cryptography Next Generation),提供:
  • 現代演算法:AES-GCM, ChaCha20-Poly1305, ECDSA (P-256/P-384), Ed25519, SHA-3
  • 更佳效能:硬體加速 (AES-NI, SHA-NI)、非同步操作
  • 彈性金鑰儲存:KSP (Key Storage Provider) 支援 TPM、VBS、雲端 HSM
  • 更安全的預設值:常數時間實作、抗側邊通道攻擊
新專案請直接使用 BCrypt*/NCrypt* API。

結語

CryptoAPI 以 CSP 抽象層統一加密服務,核心在於 HCRYPTPROV 語境管理、金鑰 Blob 序列化與五大功能群協作。掌握架構模型與初始化流程,是進入 Windows 密碼學開發的必經之路。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
CSP 名稱類型支援演算法用途
Microsoft Base Cryptographic Provider v1.0PROV_RSA_FULLRSA (512-1024), RC2, RC4, DES, SHA1, MD5一般相容性
Microsoft Enhanced Cryptographic Provider v1.0PROV_RSA_FULLBase + RSA (1024-16384), 3DES, AES (128/192/256)強加密需求
Microsoft Strong Cryptographic ProviderPROV_RSA_FULLEnhanced + 更長金鑰高安全環境
Microsoft AES Cryptographic ProviderPROV_RSA_AESAES 專用純 AES 應用
Microsoft Smart Card Key Storage ProviderPROV_RSA_SCHANNEL硬體金鑰儲存智慧卡/TPM