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

智慧卡程式設計:Windows Vista 智慧卡 API 與卡模組完整實作指南

     編輯:關於C++

智慧卡(內建加密晶片的卡片)已成企業身分驗證、數位簽章、DRM 授權儲存的主流載體。Windows Vista 引入卡模組 API,取代舊有 CSP 架構,提供檔案系統風格的高階介面,讓應用程式無需知道卡片廠牌指令即可讀寫檔案、驗證 PIN、管理金鑰。本文基於 Vista 預發布版,詳細說明 PC/SC 架構、WinSCard API、卡模組 P/Invoke 封裝、事務管理、CLR 加密整合,並提供完整 C# 範例程式下載連結。

PC/SC 架構與資源管理器模型

  • 應用程式 → WinSCard DLL (winscard.dll) → 智慧卡資源管理器服務 (SCardSvr) → 讀卡機驅動 (Kernel Mode) → 智慧卡。
  • 資源管理器強制序列化存取:SCardBeginTransaction 取得讀卡機獨佔鎖,SCardEndTransaction 釋放。
  • 無自動回滾機制,開發者需自行保證邏輯原子性。

關鍵 API 對照表

層級功能代表函式
PC/SC 基礎建立上下文、列舉讀卡機、連線卡片、傳輸 APDUSCardEstablishContext, SCardListReaders, SCardConnect, SCardTransmit
UI 輔助彈出選卡對話框SCardUIDlgSelectCardW(結構體 OPENCARDNAME_EXW 複雜,建議封裝 Native Wrapper)
卡模組高階檔案建立/讀寫/刪除、PIN 驗證、金鑰產生CardAcquireContext, CardCreateFile, CardReadFile, CardWriteFile, CardAuthenticatePin, CardDeleteFile

托管封裝策略(C# P/Invoke)

  1. MgSc.dll (Native Wrapper):封裝 SCardUIDlgSelectCardW、CardAcquireContext 等複雜結構體與回呼指標,簡化 Managed 呼叫。
  2. MgScContext 類別:包裝 CARD_DATA 結構與卡模組函式指標(pfnCardReadFile 等)。
  3. 堆配置回呼:實作 PFN_CSP_ALLOC/FREE 委派,解決卡模組輸出緩衝區由呼叫端配置的問題。

事務與安全模型實作要點

  • 單一事務原則:從 GetSmartCard 取得卡片控制權後,保持鎖定直到所有卡模組操作完成,避免他行程竄改卡片狀態。
  • 加密 API 會自行開啟事務:呼叫 RSACryptoServiceProvider.Decrypt 前必須 SCardEndTransaction,否則雙重鎖定導致死結。
  • 驗證狀態隔離:CardAuthenticatePin 成功後執行權限操作,結束前呼叫 CardDeauthenticate;若卡片不支援去驗證,需 SCardDisconnect(SCARD_RESET_CARD) 強制重置。

範例應用流程:DRM 授權儲存

1. GetSmartCard() → 取得卡片控制權、ATR、卡模組 Context
2. CLR RSA (Base Smart Card Crypto Provider) 產生/載入金鑰對
3. 建立 XML 授權資料 → RSA 加密 → 簽章
4. CardDeleteFile("license") → CardCreateFile("license", size) → CardWriteFile("license", encryptedBlob)
5. CardReadFile("license") → RSA 解密 → 驗證完整性
6. CardDeauthenticate → SCardEndTransaction → SCardDisconnect → SCardReleaseContext

部署先決條件

  • Windows Vista Platform SDK (cardmod.h)
  • 支援卡模組的智慧卡 + 讀卡機
  • Base Smart Card Crypto Provider (Windows Update 選用更新安裝)
「卡模組 API 將智慧卡抽象為『可攜式安全檔案系統』,讓開發者專注於業務邏輯而非 APDU 指令細節,是 Vista 安全架構的關鍵里程碑。」

完整原始碼下載:SmartCards2006_11.exe (2.0 MB)

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved