密碼引擎API的主要標准和規范包括:
- 微軟的Crypto API
- RSA公司的PKCS#11標准
- 中國商用密碼標准:GM/T 0016-2012 智能密碼鑰匙密碼應用接口規范,GM/T 0018-2012密碼設備應用接口規范等
一、Crypto API
Crypto API作為一部分 Microsoft Windows 提供的應用程序編程接口(API) ,提供了一組允許應用程序在對用戶的敏感私鑰數據提供保護時,以靈活的方式對數據進行加密或數字簽名的函數,而實際的加密操作是由稱為加密服務提供程序 (CSP) 的獨立模塊執行。
Crypto API函數使用“加密服務提供者”(CSP) 完成數據加密、解密以及密鑰的存儲管理、所有的CSP都是相互獨立的模塊。CSP與應用程序之間的關系類似於Windows GDI模型,CSP就類似於圖形硬件驅動程序。
Crypto API使用兩種密鑰:會話密鑰與公共/私人密鑰對。會話密鑰使用相同的加密和解密密鑰,這種算法較快,但必須保證密鑰的安全傳遞。公共/私人密鑰對使用一個公共密鑰和一個私人密鑰,私人密鑰只有專人才能使用,公共密鑰可以廣泛傳播。如果密鑰對中的一個用於加密,另一個一定用於解密。公共/私人密鑰對算法很慢,一般只用於加密小批數據,例如用於加密會話密鑰。
Crypto API支持兩種基本的編碼方法:流式編碼和塊編碼。流式編碼在明碼文本的每一位上創建編碼位,速度較快,但安全性較低。塊編碼在一個完整的塊上(一般為64位)工作,需要使用填充的方法對要編碼的數據進行舍入,以組成多個完整的塊。這種算法速度較慢,但更安全。
Crypto API運行的環境。
首先需要Crypt32.lib,將它加到project->setting->link下面,當然你也可以在程序中用#pragma comment (lib, "crypt32.lib")加入。
在程序開頭,你要加入兩個頭文件 windows.h 和 Wincrypt.h,和一個#define MY_ENCODING_TYPE (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING)
Crypto API函數
基本加密函數
PROV_RSA_FULL |
RSA |
RSA |
RC2 |
MD5 |
PROV_RSA_SIG |
none |
RSA |
none |
MD5 |
PROV_RSA_SCHANNEL |
RSA |
RSA |
RC4 |
MD5 |
PROV_DSS |
DSS |
none |
DSS |
MD5 |
PROV_DSS_DH |
DH |
DSS |
CYLINK_MEK |
MD5 |
PROV_DH_SCHANNEL |
DH |
DSS |
DES |
MD5 |
PROV_FORTEZZA |
KEA |
DSS |
Skipjack |
SHA |
PROV_MS_EXCHANGE |
RSA |
RSA |
CAST |
MD5 |
PROV_SSL |
|
|
|
|
服務提供者函數:
CryptAcquireContext |
獲得指定CSP 的密鑰容器的句柄 |
CryptContextAddRef |
對HCRYPTPROV 句柄增加一個應用計數 |
CryptEnumProviders |
枚舉當前計算機中的CSP |
CryptEnumProviderTypes |
枚舉CSP 的類型 |
CryptGetDefaultProvider |
對於指定CSP 類型的卻省CSP |
CryptGetProvParam |
得到一個CSP 的屬性 |
CryptInstallDefaultContext |
安裝先前得到的HCRYPTPROV 上下文作為當前卻省的上下文 |
CryptReleaseContext |
釋放由CryptAcquireContext 得到的句柄 |
CryptSetProvider 和 CryptSetProviderEx |
為指定CSP 類型指定一個卻省的CSP |
CryptSetProvParam |
指定一個CSP 的屬性 |
CryptUninstallDefaultContext |
刪除先前由CryptInstallDefaultContext 安裝的卻省上下文 |
密鑰的產生和交換函數:
CryptAcquireCertificatePrivateKey |
對於指定證書上下文得到一個HCRYPTPROV 句柄和dwKeySpec |
CryptDeriveKey |
從一個密碼中派生一個密鑰 |
CryptDestoryKey |
銷毀密鑰 |
CryptDuplicateKey |
制作一個密鑰和密鑰狀態的精確復制 |
CryptExportKey |
把CSP 的密鑰做成BLOB 傳送到應用程序的內存空間中 |
CryptGenKey |
創建一個隨機密鑰 |
CryptGenRandom |
產生一個隨機數 |
CryptGetKeyParam |
得到密鑰的參數 |
CryptGetUserKey |
得到一個密鑰交換或簽名密鑰的句柄 |
CryptImportKey |
把一個密鑰BLOB 傳送到CSP中 |
CryptSetKeyParam |
指定一個密鑰的參數 |
編碼/解碼函數:
CryptDecodeObject |
對lpszStructType 結構進行解碼 |
CryptDecodeObjectEx |
對lpszStructType 結構進行解碼,此函數支持內存分配選項 |
CryptEncodeObject |
對lpszStructType 結構進行編碼 |
CyptEncodeObjectEx |
對lpszStructType 結構進行編碼,此函數支持內存分配選項 |
數據加密/解密函數:
CryptDecrypt |
使用指定加密密鑰來解密一段密文 |
CryptEncrypt |
使用指定加密密鑰來加密一段明文 |
CryptProtectData |
執行對DATA_BLOB 結構的加密 |
CryptUnprotectData |
執行對DATA_BLOB 結構的完整性驗證和解密 |
哈希和數字簽名函數:
CryptCreateHash |
創建一個空哈希對象 |
CryptDestoryHash |
銷毀一個哈希對象 |
CryptDuplicateHash |
復制一個哈希對象 |
CryptGetHashParam |
得到一個哈希對象參數 |
CryptHashData |
對一塊數據進行哈希,把它加到指定的哈希對象中 |
CryptHashSessionKey |
對一個會話密鑰進行哈希,把它加到指定的哈希對象中 |
CryptSetHashParam |
設置一個哈希對象的參數 |
CryptSignHash |
對一個哈希對象進行簽名 |
CryptVerifySignature |
校驗一個數字簽名 |
證書和證書庫函數:
CertAddStoreToCollection |
在證書庫中增加一個證書 |
CertCloseStore |
關閉一個證書庫句柄 |
CertControlStore |
如果證書緩沖區和證書本身內容不相符時,允許給應用程序發一個通知 |
CertDuplicateStore |
通過增加引用計數來復制證書庫句柄 |
CertEnumPhysicalStore |
對於指定系統庫枚舉物理庫 |
CertEnumSystemStore |
枚舉所有可用的系統庫 |
CertEnumSystemStoreLocation |
枚舉可用系統庫的所有位置 |
CertGetStoreProperty |
得到一個庫的屬性 |
CertOpenStore |
使用指定庫類型來打開證書庫 |
CertOpenSystemStore |
打開一個系統證書庫 |
CertRegisterPhysicalStore |
在一個注冊系統庫里增加一個物理庫 |
CertRegisterSystemStore |
注冊一個系統庫 |
CertRemoveStoreFromCollection |
從一個庫集合里刪除證書庫 |
CertSaveStore |
保存證書庫 |
CertSetStoreProperty |
設置證書屬性 |
CertUnregisterPhysicalStore |
從系統庫中刪除一個物理庫 |
CertUnregisterSystemStore |
反注冊一個指定系統庫 |
維護函數:
CertAddSerializeElementToStore |
在庫中增加一系列證書或CRL |
CertCreateContext |
從編碼字節中創建指定上下文 |
CertEnumSubjectInSortedCTL |
在CTL 庫中枚舉信任主題 |
CertFindSubjectInCTL |
在CTL 中尋找指定主題 |
CertFindSubjectInSortedCTL |
在分類CTL 中尋找指定主題 |
證書函數:
CertAddCertificateContextToStore |
在證書庫里增加一個證書上下文 |
CertAddCertificateLinkToStore |
在證書庫里增加一個對不同庫里的證書上下文的鏈接 |
CertAddEncodedCertificateToStore |
把編碼證書轉換成證書上下文並且把它加到證書庫里 |
CertCreateCertificateContext |
從編碼證書中創建一個證書上下文。但這個上下文並不放到證書庫里 |
CertCreateSelfSignCertificate |
創建一個自簽名證書 |
CertDeleteCertificateFromStore |
從證書庫里刪除一個證書 |
CertDuplicateCertificate |
通過增加引用計數來復制證書上下文 |
CertEnumCertificateInStore |
在證書庫里枚舉證書上下文 |
CertFindCertificateInStore |
在證書庫里尋找證書上下文 |
CertFreeCertificateContext |
釋放一個證書上下文 |
CertGetIssuerCertificateFromStore |
在證書庫里得到指定主題證書的發行者 |
CertGetSubjectCertificateFromStore |
獲得主題證書的上下文 |
CertGetValidUsages |
返回所有證書的用法 |
CertSerializeCertificateStoreElement |
串行化編碼證書的證書上下文 |
CertVerifySubjectCertificateContext |
使用發行者來驗證主題證書 |
CryptUIDlgViewContext |
顯示證書、CRL 或CTL |
CryptUIDlgSelectCertificateFromStore |
從指定庫中顯示對話框,可以從中選擇證書 |
證書撤銷列表函數:
CertAddCRLContextToStore |
在證書庫里增加一個CRL 上下文 |
CertAddCRLLinkToStore |
在不同的庫里增加一個CRL 上下文鏈接 |
CertAddEncodedCRLToStore |
把編碼CRL 轉化成CRL 上下文然后把它加入到證書庫中 |
CertCreateCRLContext |
從編碼CRL 中創建CRL 句柄,但不把它加到庫中 |
CertDeleteCRLFromStore |
從證書庫里刪除一個CRL |
CertDuplicateCRLContext |
通過增加引用計數來復制CRL 上下文 |
CertEnumCRLsInStore |
枚舉庫里的CRL 句柄 |
CertFindCertificateInCRL |
從指定證書里尋找CRL 列表 |
CertFindCRLInStore |
在庫里尋找CRL 上下文 |
CertFreeCRLContext |
釋放CRL 上下文 |
CertGetCRLFromStore |
從庫里得到CRL 上下文句柄 |
CertSerializeCRLStoreElement |
串行化CRL 上下文的編碼CRL 和它的屬性 |
證書信任列表函數:
CertAddCTLContextToStore |
把一個CTL 上下文加入到證書庫里 |
CertAddCTLLinkToStore |
給不同庫里的CRL 上下文添加鏈接 |
CertAddEncodedCTLToStore |
把編碼CTL 轉化成CTL 上下文並且把它加到證書庫里 |
CertCreateCTLContext |
從編碼CTL 中創建CTL 上下文 |
CertDeleteCTLFromStore |
從證書庫里刪除CTL |
CertDuplicateCTLContext |
通過增加引用計數來復制CTL 上下文 |
CertEnumCTLsInStore |
在證書庫里枚舉CTL 上下文 |
CertFindCTLInStore |
在證書庫里查找CTL 上下文 |
CertFreeCTLContext |
釋放CTL 上下文 |
CertSerializeCTLStoreElement |
串行化CTL 上下文的編碼CTL 和屬性 |
擴展屬性函數:
CertEnumCertificateContextProperties |
枚舉指定證書上下文的屬性 |
CertEnumCRLContextProperties |
枚舉指定CRL 上下文的屬性 |
CertEnumCTLContextProperties |
枚舉指定CTL 上下文的屬性 |
CertGetCertificateContextProperty |
得到證書屬性 |
CertGetCRLContextProperty |
得到CRL 屬性 |
CertGetCTLContextProperty |
得到CTL 屬性 |
CertSetCertificateContextProperty |
設置證書屬性 |
CertSetCRLContextProperty |
設置CRL 屬性 |
CertSetCTLContextProperty |
設置CTL 屬性 |
3、證書驗證函數
證書驗證是通過CTL 和證書列表進行的。
使用CTL 的函數:
CertVerifyCTLUsage |
驗證CTL 用法 |
CryptMsgEncodeAndSignCTL |
編碼和驗證CTL |
CryptMsgGetAndVerifySigner |
從一個消息中獲得和驗證CTL |
CryptMsgSignCTL |
對包含CTL 的消息進行簽名 |
證書鏈驗證函數:
CertCreateCertificateChainEngine |
為應用程序創建一個新的非卻省的鏈引擎 |
CertCreateCTLEntryFromCertificateContextProperties |
創建一個CTL 入口 |
CertDuplicateCertificateChain |
通過增加引用計數來復制證書鏈 |
CertFindChainInStore |
在證書庫里查找證書鏈 |
CertFreeCertificateChain |
釋放證書鏈 |
CertFreeCertificateChainEngine |
釋放證書鏈引擎 |
CertGetCertificateChain |
從最后一個證書建立一個上下文鏈表 |
CertSetCertificateContextPropertiesFromCTLEntry |
通過CTL 入口屬性來設置證書上下文的屬性 |
CertIsValidCRLForCertificate |
通過檢查CRL 來確定CRL 是否包括指定被撤銷的證書 |
CertVerifyCertificateChainPolicy |
通過檢查證書鏈來確定它的完整性 |
4、消息函數
CryptoAPI 消息函數包括兩組:低級消息函數和簡化消息函數。
低級消息函數直接和PKCS#7 消息工作。這些函數對傳輸的PKCS#7 數據進行編碼,對接收到的PKCS#7 數據進行解碼,並且對接收到的消息進行解密和驗證。
簡化消息函數是比較高級的函數,是對幾個低級消息函數和證書函數的封裝,用來執行指定任務。這些函數在完成一個任務時,減少了函數調用的數量,因此簡化了CryptoAPI的使用。
低級消息函數:
CryptMsgCalculateEncodedLength |
計算加密消息的長度 |
CryptMsgClose |
關閉加密消息的句柄 |
CryptMsgControl |
執行指定的控制函數 |
CryptMsgCountersign |
標記消息中已存在的簽名 |
CryptMsgCountersignEncoded |
標記已存在的簽名 |
CryptMsgDuplicate |
通過增加引用計數來復制加密消息句柄 |
CryptMsgGetParam |
對加密消息進行編碼或者解碼后得到的參數 |
CryptMsgOpenToDecode |
打開加密消息進行解碼 |
CryptMsgOpenToEncode |
打開加密消息進行編碼 |
CryptMsgUpdate |
更新加密消息的內容 |
CryptMsgVerifyCountersignatureEncoded |
驗證SignerInfo 結構中標記時間 |
CryptMsgVerifyCountersignatureEncodedEx |
驗證SignerInfo 結構中標記時間簽名者可以是CERT_PUBLIC_KEY_INFO 結構 |
簡化消息函數:
CryptDecodeMessage |
對加密消息進行解碼 |
CryptDecryptAndVerifyMessageSignature |
對指定消息進行解密並且驗證簽名者 |
CryptDecryptMessage |
解密指定消息 |
CryptEncryptMessage |
加密指定消息 |
CryptGetMessageCertificates |
返回包含消息的證書和CRL 的證書庫 |
CryptGetMessageSignatureCount |
返回簽名消息的簽名者數量 |
CryptHashMessage |
創建消息的哈希 |
CryptSignAndEncryptMessage |
對消息進行簽名並且加密 |
CryptSignMessage |
對消息進行簽名 |
CryptVerifyDetachedMessageHash |
驗證包含已解邦定哈希的哈希消息 |
CryptVerifyDetachedMessageSignature |
驗證包含已解邦定簽名的簽名消息 |
CryptVerifyMessageHash |
驗證一個哈希消息 |
CryptVerifyMessageSignature |
驗證一個簽名消息 |
5、輔助函數
數據管理函數
CertCompareCertificate |
比較兩個證書是否相同 |
CertCompareCertificateName |
通過比較兩個證書名稱來決定他們是否相同 |
CertCompareIntegerBlob |
比較兩個整數BLOB |
CertComparePublicKeyInfo |
通過比較兩個證書公鑰來決定他們是否相同 |
CertFindAttribute |
通過OID 來查找屬性 |
CertFindExtension |
通過OID 來查找擴展 |
CertFindRDNAttr |
通過OID 來查找RDN 屬性 |
CertGetIntendedKeyUsage |
從證書中取得相關密鑰用法 |
CertGetPublicKeyLength |
從公鑰BLOB 中取得公鑰/私鑰長度 |
CertIsRDNAttrsInCertificateName |
通過指定RDN 數組屬性比較證書名稱屬性來決定證書是否已包含了所有屬性 |
CertVerifyCRLRevocation |
驗證主題證書是否在CRL 中 |
CertVerifyCRLTimeValidity |
驗證CRL 的有效時間 |
CertVerifyRevocation |
驗證主題證書是否在CRL 中 |
CertVerifyTimeValidity |
驗證CRL 的有效時間 |
CertVerifyValidityNesting |
驗證主題時間的有效性是否在發行者有效時間內 |
CryptExportPublicKeyInfo |
導出公鑰信息 |
CryptExportPublicKeyInfoEx |
導出公鑰信息(用戶可以指定算法) |
CryptFindCertificateKeyProvInfo |
枚舉CSP 和它的密鑰容器來查找對應於公鑰的相應私鑰 |
CryptFindLocalizedName |
查找指定名字的局部化名稱 |
CryptHashCertificate |
哈希證書內容 |
CryptHashPublicKeyInfo |
計算公鑰信息的哈希 |
CryptHashToBeSigned |
計算簽名內容的信息哈希值 |
CryptImportPublicKeyInfo |
把公鑰信息導入CSP 並且返回它的句柄 |
CryptImportPublicKeyInfoEx |
把公鑰信息導入CSP 並且返回它的句柄 |
CryptMemAlloc |
分配內存 |
CryptMemFree |
釋放內存 |
CryptMemRealloc |
重新分配內存 |
CryptQueryObject |
得到BLOB 或文件的內容信息 |
CryptSignAndEncodeCertificate |
對信息進行簽名並且編碼 |
CryptSignCertificate |
對證書進行簽名 |
CryptVerifyCertificateSignature |
使用公鑰信息對主題證書或CRL 的簽名進行驗證 |
CryptVerifyCertificateSignatureEx |
使用公鑰信息對主題證書或CRL 的簽名進行驗證 |
數據轉換函數
CertAlgIdToOID |
把CSP 算法標示符轉換成OID |
CertGetNameString |
得到證書的主題或頒發者名稱並且把它轉換成字符串 |
CertNameToStr |
把證書名稱BLOB 轉換成字符串 |
CertOIDToAlgId |
把OID 轉換成CSP 算法表示符 |
CertRDNValueToStr |
把名稱值轉換成字符串
|
CertStrToName |
把字符串轉換成編碼證書名稱 |
CryptBinaryToString |
把二進制序列轉換成字符串 |
CryptFormatObject |
格式化編碼數據,返回Unicode 字符串 |
CryptStringToBinary |
把格式化的字符串轉換成二進制序列 |
增強密鑰用法函數
CertAddEnhancedKeyUsageIdentifier |
在證書EKU 屬性中增加一個用法標示符 |
CertGetEnhancedKeyUsage |
獲得證書的EKU 擴展或屬性信息 |
CertRemoveEnhancedKeyUsageIdentifier |
從證書EKU 擴展屬性中刪除用法標示符OID |
CertSetEnhancedKeyUsage |
設置證書的EKU 屬性 |
密鑰標示函數
CryptCreateKeyIdentifierFromCSP |
創建CSP 公鑰的密鑰標示符 |
CryptEnumKeyIdentifierProperties |
枚舉標示符和其屬性 |
CryptGetKeyIdentifierProperty |
從指定密鑰標示符中獲得指定屬性 |
CryptSetKeyIdentifierProperty |
設置指定密鑰標示符的屬性 |
證書庫回調函數
CertDllOpenStoreProv |
定義庫提供者打開函數 |
CertStoreProvCloseCallback |
決定當證書庫引用計數為0 時將發生的動作 |
CertStoreProvDeleteCertCallback |
決定當從證書庫中刪除一個證書之前的動作 |
CertStoreProvDeleteCRLCallback |
決定當從證書庫中刪除一個CRL 之前的動作 |
CertStoreProvReadCertCallback |
保留 |
CertStoreProvReadCRLCallback |
保留 |
CertStoreProvSetCertPropertyCallback |
決定在CertSetCertificateContextProperty 和CertGetCertificateContext 調用之前的動作 |
CertStoreProvSetCRLPropertyCallback |
決定在CertSetCRLContextProperty 和CertGetCRLContextProperty 調用之前的動作 |
CertStoreProvWriteCertCallback |
決定在證書庫中加入一個證書前的動作 |
CertStoreProvWriteCRLCallback |
決定在證書庫中加入一個CRL 前的動作 |
CertStoreProvReadCTL |
讀CSP 的CTL 上下文 |
CertStoreProvWriteCTL |
決定CTL 是否可被加入到證書庫中 |
CertStoreProvDeleteCTL |
決定CTL 是否可被刪除 |
CertStoreProvSetCTLProperty |
決定是否可以設置CTL 的屬性 |
CertStoreProvControl |
當緩沖庫和存儲庫不同時,通知應用程序 |
CertStoreProvFindCert |
在證書庫中查找下一個證書 |
CertStoreProvFreeFindCert |
釋放前一個找到的證書上下文 |
CertStoreProvGetCertProperty |
得到指定的證書屬性 |
CertStoreProvFindCRL |
查找第一個或下一個匹配的CRL |
CertStoreProvFreeFindCRL |
釋放前一個找到的CRL 上下文 |
CertStoreProvGetCRLProperty |
得到指定CRL 屬性 |
CertStoreProvFindCTL |
查找第一個或下一個匹配的CTL |
CertStoreProvFreeFindCTL |
釋放前一個找到的CTL 上下文 |
CertStoreProvGetCTLProperty |
得到指定CTL 屬性 |
OID支持函數
CryptEnumOIDFuction |
枚舉由編碼類型、函數名和OID 指定注冊的OID 函數 |
CryptEnumOIDInfo |
枚舉注冊的OID 信息 |
CryptEnumOIDInfo |
使用指定的密鑰和組查找OID 信息 |
CryptFreeOIDFuctionAddress |
釋放OID 函數地址句柄 |
CryptGetDefaultOIDDllList |
對於指定的函數結合和類型獲得卻省注冊的DLL 入口 |
CryptGetDefaultOIDFuctionAddress |
獲得已安裝的第一次或下一個卻省函數或者加載包含卻省函數的DLL |
CryptGetOIDFuctionAddress |
搜索匹配指定編碼類型和OID 函數列表,如果沒有找到,就查找注冊表 |
CryptGetOIDFuctionValue |
獲得指定編碼類型、函數名稱和OID 的值 |
CryptInitOIDFuctionSet |
初始化OID 函數集合的句柄 |
CryptInstallOIDFuctionAddress |
安裝可調用的OID 函數地址集合 |
CryptRegisterDefaultOIDFuction |
注冊包含卻省函數的DLL |
CryptRegisterOIDFuction |
注冊包含指定函數的DLL |
CryptRegisterOIDInfo |
注冊由CRYPT_OID_INFO 指定的OID 信息 |
CryptSetOIDFuctionValue |
設置編碼類型、函數名稱等的值 |
CryptUnregisterDefaultOIDFunction |
卸載包含卻省函數的DLL |
CryptUnregisterOIDFuction |
卸載包含函數的DLL |
CryptUnregisterOIDInfo |
卸載指定OID 的信息 |
遠程對象恢復函數
CryptGetObjectUrl |
從證書、CTL 或CRL 中取得遠程對象的URL |
CryptRetrieveObjectByUrl |
由URL 指定位置恢復PKI 對象 |
PFX 函數
PFXExportCertStore |
從證書庫中導出證書或證書和私鑰 |
PFXExportCertStoreEx |
從證書庫中導出證書或證書和私鑰 |
PFXImportCertStore |
從PFX BLOB 導入到指定證書庫 |
PFXIsPFXBlob |
把外層BLOB 像pfx 包那樣解碼 |
PFXVerifyPassword |
把外層BLOB 像pfx 包那樣解碼,並且用指定口令解密 |
二、PKCS# 11
PKCS# 11標准定義了與密碼令牌(如硬件安全模塊(HSM)和智能卡)的獨立於平台的API,API定義了最常用的加密對像類型(RSA密鑰,X.509證書,DES / 三重DES密鑰等)以及使用,創建/生成,修改和刪除這些對象所需的所有功能。
PKCS# 11只提供了接口的定義, 不包括接口的實現,一般接口的實現是由設備提供商提供的。
插入Usbkey,使用11這個端口,只能導出公鑰和證書,在加密解密,簽名驗證的過程,都是在usbkey內部進行操作,然后將結果導出到外部。
PKCS#11函數類:
CKF_ENCRYPT:加密類
CKF_DECRYPT:解密類
CKF_DIGEST:摘要類
CKF_SIGN:簽名類
CKF_SIGN_RECOVER:可恢復簽名類
CKF_VERIFY:驗證類
CKF_VERIFY_RECOVER:可恢復驗證類
CKF_GENERATE:密鑰產生
CKF_GENERATE_KEY_PAIR:密鑰對產生
CKF_WRAP:密鑰封裝
CKF_UNWRAP:密鑰解封
CKF_DERIVE:密鑰派生
各類函數
三、GM/T 0016-2012 智能密碼鑰匙密碼應用接口規范
本標准規定了基於PKI密碼體制的智能密碼鑰匙密碼應用接口,描述了密碼應用接口的函數數據類型、參數的定義和設備的安全要求。
本標准適用於智能密碼鑰匙產品的研制、使用和檢測。
智能密碼鑰匙密碼應用接口位於智能密碼鑰匙應用程序與設備之間,如下圖所示。
設備管理系列函數:
應用管理系列函數:
容器管理系列函數:
密碼服務系列函數:
四、GM/T 0018-2012密碼設備應用接口規范
本標准規定了公鑰密碼基礎設施應用技術體系下服務類密碼設備的應用接口標准。
本標准適用於服務類密碼設備的研制、使用,以及基於該類密碼設備的應用開發,也可用於指導該類密碼設備的檢測。
設備管理類函數:
密鑰管理類函數:
非對稱算法運算類函數
對稱算法運算類函數
雜湊運算類函數
用戶文件操作類函數
差異:Crypto API與PKCS#11
CryptoAPI是通過容器來組織密鑰。一個容器可以存放兩個RSA密鑰對,一個用於簽名驗證,一個用於加解密。此外每個用戶在加密對話其間還會隨機產生許多會話密鑰。
PKCS#11沒有容器概念,它對密鑰數據的保存和組織主要通過對象。p11定義了三種對象類型:數據對象,證書對象和密鑰對象。
在CryptoAPI中的證書和證書庫函數對應着PKCS#11中槽和令牌管理函數,其中CryptoAPI中多了證書庫回調函數,可以進行返回操作。
同的地方:
肯定要有最基本的加解密函數,以及簽名和驗證函數,以及證書的管理函數、密鑰管理函數、信息處理函數。