Crypto API
簡介
- Windows CryptoAPI是Microsoft 公司提出的安全加密應用服務框架,也是PKI推薦使用的加密 API。它提供了在Win32 環境下使用認證、編碼、加密和簽名等安全服務時的標準加密介面,用於增強應用程式的安全性與可控性。應用開發者可以在不瞭解複雜的加密機制和加密演算法的情況下,簡便、快速地開發出標準、通用和易於擴充套件的安全加密應用程式。
使用方式
- Crypto API 提供的功能主要有:金鑰管理、資料加密和解密、數字簽名和驗證、證書管理、可信根證書管理、資料編碼和解碼、數字證書編碼和解碼、PKCS#7標準格式編碼和解碼等。
函式
-
CryptoAPI共有五部分組成:簡單訊息函式、低層訊息函式、基本加密函式、證書編解碼函式和證書庫管理函式。前三者可用於對敏感資訊進行加密或簽名處理,可保證網路傳輸信心的私有性;後兩者透過對證書的使用,可保證網路資訊交流中的認證性。
-
基本加密函式:為開發加密應用程式提供了足夠靈活的空間。所有CSP 的通訊都是透過這些函式。一個CSP 是實現所有加密操作的獨立模組。在每一個應用程式中至少需要提供一個CSP來完成所需的加密操作。如果使用多於一個以上的CSP,在加密函式呼叫中就要指定所需的CSP。基本加密函式包含了以下幾種:
-
服務提供者函式:應用程式使用服務提供者函式來連線和斷開一個CSP。
-
金鑰的產生和交換函式:金鑰產生函式建立、配置和銷燬加密金鑰。他們也用於和其他使用者進行交換金鑰。
-
編碼/解碼函式:用來對證書、證書撤銷列表、證書請求和證書擴充套件進行編碼和解碼。
-
資料加密/解密函式:這些函式支援資料的加密/解密操作。CryptEncrypt 和CryptDecrypt 要求在被呼叫前指定一個金鑰。這個金鑰可以由CryptGenKey、CryptDeriveKey 或CryptImportKey 產生。建立金鑰時要指定加密演算法。CryptSetKeyParam 函式可以指定額外的加密引數。
-
雜湊和數字簽名函式:這些函式在應用程式中完成計算雜湊、建立和校驗數字簽名。
-
-
證書和證書庫函式:這組函式管理、使用和取得證書、證書撤銷列表和證書信任列表。這些函式可以分成一下幾組:
-
證書庫函式:一個使用者站點可以收集許多證書。這些證書是為這個站點的使用者所使用的,證書描述了這個使用者的具體身份。對於每個人,可能有一個以上的證書。證書庫和其相關的函式提供了對庫獲得、列舉、驗證和使用證書庫裡的資訊。
-
維護函式
-
證書撤銷列表函式
-
證書信任列表函式
-
擴充套件屬性函式
-
-
證書驗證函式:證書驗證是透過CTL 和證書列表進行的。
- 證書鏈驗證函式
-
訊息函式:CryptoAPI 訊息函式包括兩組——低階訊息函式和簡化訊息函式。
-
低階訊息函式直接和PKCS#7 訊息工作。這些函式對傳輸的PKCS#7 資料進行編碼,對接收到的PKCS#7 資料進行解碼,並且對接收到的訊息進行解密和驗證。
-
簡化訊息函式是比較高階的函式,是對幾個低階訊息函式和證書函式的封裝,用來執行指定任務。這些函式在完成一個任務時,減少了函式呼叫的數量,因此簡化了CryptoAPI的使用。
-
PKCS#11
簡介
- PKCS#11(簡稱P11)是針對密碼裝置的介面指令標準。P11模型中重要的概念之一是slot,也稱為槽。一個slot為一個密碼裝置物件。某個開啟的slot會話稱之為session。Session之間存在不同的驗證許可權。而同一個slot的不同的session之間存在操作的互相影響性,同時在某些狀況下,許可權會發生同步。另外一個重要的概念是物件。P11中支援幾種重要的物件,如公鑰、私鑰、對稱金鑰,資料物件等。
使用方式
- 提供了與加密令牌(如智慧卡)互動的標準介面。
- 可以用於訪問加密令牌中的金鑰、進行加密、解密等操作。
- 在程式設計中,需要首先初始化 PKCS#11 模組,然後透過相應的函式進行金鑰管理、加密操作等。
函式
GMT 0016-2012
簡介
- GMT 0016-2012是國家規定的智慧密碼鑰匙密碼應用介面規範,規定了基於PKI密碼體制的智慧密碼鑰匙密碼應用介面,描述了密碼應用介面的函式、資料型別、引數的定義和裝置的安全要求。適用於智慧密碼鑰匙產品的研製、使用和檢測。
使用方式
函式
- 裝置管理系列函式:
- 訪問控制系列函式
- 應用管理函式
- 容器管理系列函式
- 密碼服務系列函式
GMT 0018-2012
簡介
- 本標準的目標是為公鑰密碼基礎設施應用體系框架下的服務類密碼裝置制定統一的應用介面標準,透過該介面呼叫密碼裝置,向上層提供基礎密碼服務。為該類密碼裝置的開發、使用及檢測提供標準依據和指導,有利於提高該類密碼裝置的產品化、標準化和系列化水平。
使用方式
函式
-
裝置管理類函式:
-
開啟裝置:SDF_OpenDevice
-
關閉裝置:SDF_CloseDevice
-
建立會話:SDF_OpenSession
-
關閉會話:SDF_CloseSession
-
獲取裝置資訊:SDF_GetDeviceInfo
-
產生隨機數:SDF_GenerateRandom
-
獲取私鑰使用許可權:SDF_GetPrivateKeyAccessRight
-
釋放私鑰使用許可權:SDF_ReleasePrivateKeyAccessRight
-
-
金鑰管理類函式:
-
匯出 RSA 簽名公鑰:SDF_ExportSignPublicKey_RSA
-
匯出 RSA 加密公鑰:SDF_ExportEncPublicKey_RSA
-
產生RSA非對稱金鑰對並輸出:SDF_GenerateKeyPair_RSA
-
生成會話金鑰並用內部RSA公鑰加密輸出:SDF_GenerateKeyWithIPK_RSA
-
生成會話金鑰並用外部RSA公鑰加密輸出:SDF_GenerateKeyWithEPK_RSA - 導人會話金鑰並用內部RSA私鑰解密:SDF_ImportKeyWithISK_RSA
-
基於 RSA 演算法的數宇倍封轉換:SDF_ExchangeDigitEnvelopeBaseOnRSA
-
匯出 ECC 簽名公鑰:SDF_ExportSignPublicKey_ECC
-
匯出 ECC 加密公鑰:SDF_ExportEncPublicKey_ECC
-
產生ECC非對稱金鑰對並輸出:SDF_GenerateKeyPair_ECC
-
生成會話金鑰並用內部ECC公鑰加密輸岀:SDF_GenerateKeyWithIPK_ECC - 生成會話金鑰並用外部ECC公鑰加密輸出:SDF_GenerateKeyWithEPK_ECC
-
匯入會話金鑰並用內部ECC私鑰解密:SDFJmportKeyWithlSKJECC
-
生成金鑰協商引數並輸出:SDF_GenerateAgreementDataWithECC
-
計算會話金鑰:SDF_GenerateKey WithECC
-
產生協商資料並計算會話金鑰:SDF—GenerateAgreementDataAndKeyWithECC
-
基於 ECC演算法的數字信封轉換:SDF_ExchangeDigitEnvelopeBaseOnECC
-
生成會話金鑰並用金鑰加密金鑰加密輸出: SDF_GenerateKeyWithKEK
-
匯入會話金鑰並用金鑰加密金鑰解密:SDF_ImportKeyWithKEK
-
銷燬會話金鑰:SDF_DestroyKey
-
-
非對稱演算法運算類函式
-
內部公鑰 RSA 運算:SDF_ExternalPublicKeyOperation_RSA
-
內部公鑰 RSA 運算:SDF_InternalPublicKeyOperation_RSA
-
內部私鑰 RSA 運算:SDF_InternalPrivateKeyOperation_RSA
-
外部金鑰 ECC 驗證:SDF_ExternalVerify_ECC
-
內部金鑰 ECC 簽名:SDF_InternalSign_ECC
-
內部金鑰 ECC 驗證:SDF_InternalVerify_ECC
-
外部金鑰 ECC 加密:SDF_ExternalEncrypt_ECC
-
-
對稱演算法運算類函式
-
對稱加密:SDF_Encrypt
-
對稱解密:SDF_Decrypt
-
計算MAC:SDF_CalculateMAC
-
-
雜湊運算類函式
-
雜湊運算初始化:SDF_HashInit
-
多包雜湊運算:SDF_HashUpdate
-
雜湊運算結束:SDF_HashFinal
-
異同
-
異同點:
-
Crypto API 和 PKCS#11 是通用的加密標準,提供了加密、解密、簽名、驗證等功能,而 GMT 0016-2012 和 GMT 0018-2012 則是針對具體演算法的標準,分別定義了 ECDSA 數字簽名和橢圓曲線加密的規範。
-
PKCS#11 主要用於與加密令牌互動,而 Crypto API 則是用於通用的加密操作。
-
GMT 0016-2012 和 GMT 0018-2012 都是基於橢圓曲線密碼學的標準,但一個用於數字簽名,一個用於加密。
-