[轉載]Microsoft CryptoAPI使用心得

轉載自此git

 

最近研究了一下MS CryptoAPI的用法,略有心得.若是須要使用非對稱加密方案,MS CryptoAPI卻是一個不錯的選擇.
l         每一個用戶均可以在獲取CSP(CryptAcquireContext)時經過指定Container的名稱來建立本身的Key Container;也能夠使用NULL參數獲取缺省的Key Containner;經過Key Container用戶能夠建立或獲取本身的公私鑰對.
l         當用戶首次使用本身的Key Container時須要建立本身的公私鑰對(CryptGenKey).注意:一旦建立了公私鑰對,操做系統就會自動保存下來.
l         CRYPTAPI提供兩種公私鑰對:「交換公私鑰對」和「數字簽名公私鑰對」.
Exchange Public/Private Key Pair
思想:
2        發送者使用接收者的Public Key對Session Key進行加密,這樣只有指定的接收者可以得到正確的Session Key;接收者須要預先將本身的Public Key交給發送者;
2        只對Session Key進行非對稱加密,而整個消息使用session key進行對稱加密;
2        使用Exchang public/private key pair能夠確保消息只能被指定的接收者讀取;
發送者步驟:
1.      獲取或建立指定的CSP(CryptAcquireContext).
2.      獲取或建立本身的Key Container(CryptGetUserKey或CryptGenKey).
3.      建立一個hash對象(CryptCreateHash).
4.      根據原始消息生成Hash值(CryptHashData).
5.      從上述Hash值派生出session key(CryptDeriveKey).
6.      導入接收者的public key(CryptImportKey).
7.      使用session key對消息進行加密同時使用接收者的public key對session key進行加密.
接收者步驟:
1.      獲取或建立指定的CSP(CryptAcquireContext).
2.      獲取或建立本身的Key Container(CryptGetUserKey或CryptGenKey).
3.      使用本身的private key對session key進行解密,而後使用session key對消息進行解密(CryptDecrypt).
Digital Signature Key Pair
思想:
2        發送者首先產生消息的摘要(注意消息自己並不加密),而後用本身的private key對此摘要進行加密.
2        加密後的摘要做爲數字簽名,與原始消息一塊兒傳遞給接收者.
2        接收者使用發送者的public Key的對摘要進行解密並計算收到消息的摘要,而後經過比較確認簽名是否正確.
2        使用Digital Signature Key Pair能夠確保消息來自指定的發送者,而不是別的冒充者;但它並不保護消息內容不被泄漏
發送者步驟:
1.      獲取或建立指定的CSP(CryptAcquireContext).
2.      獲取或建立本身的Key Container(CryptGetUserKey或CryptGenKey).
3.      導出本身的public key給接收端(CryptExportKey).
4.      建立一個HASH對象(CryptCreateHash).
5.      計算原始的消息的Hash值(CryptHashData).
6.      使用本身的private key對Hash值進行加密(CryptSignHash).
7.      將原始消息和簽名後的Hash值發送給接收端.
接收者步驟:
1.       獲取或建立指定的CSP(CryptAcquireContext).
2.       導入發送者的public key(CryptImportKey).
3.       建立一個HASH對象(CryptCreateHash).
4.       計算原始的消息的Hash值(CryptHashData).
5.       驗證簽名是否屬於指定的發送者(CryptVerifySignature).
總結:
使用MS CryptoAPI的非對稱加密方案時,應根據實際狀況選擇正確的Key Pair.
l         Exchange Public/Private Key Pair適用於向特定接收者傳輸數據的情形,前提是發送者須要預知接收者的public key;
l         Digital Signature Key Pair適用於須要驗證發送者身份的情形,前提是接收者須要預知發送者的public key
相關文章
相關標籤/搜索