密碼引擎-API研究


密碼引擎API的主要標准和規范包括:

  1. 微軟的Crypto API

  2. RAS公司的PKCS#11標准

  3. 中國商用密碼標准:GMT 0016-2012 智能密碼鑰匙密碼應用接口規范,GMT 0018-2012密碼設備應用接口規范等

1 Crypto API

微軟的CryptoAPI是Win32平台下為應用程序開發者提供的數據加密和安全的編碼接口。CryptoAPI函數集包含了基本的ASN.1的編碼、解碼,散列,數據加密和解密,數字證書管理等重要的密碼學應用功能。數據的加密、解密支持對稱和非對稱兩類算法。CryptoAPI是所有微軟的Win32的應用程序以及第三方廠商應有程序使用的數據加密接口,諸如Internet Explorer、OutLook、Adobe等應用都是基於CryptoAPI開發的。

1.1 Crypto API在編程中的使用方式

CryptoAPI本身不實現密碼運算相關操作,而是操作系統通過調用CryptoSPI函數接口相應的加密服務提供者函數(CSP)來實現。CryptoAPI函數使用“加密服務提供者”(CSP)完成數據加密、解密以及密鑰的存儲管理、所有的CSP都是相互獨立的模塊。理論上,CSP應該獨立於特定的應用程序,也就是說所有的應用程序可以使用任何一個CSP。但是,實際上有些應用程序只能與特定的CSP協作。CSP與應用程序之間的關系類似於Windows GDI模型。CSP就類似於圖形硬件驅動程序。

1.2 Crypto API包含的函數

CryptoAPI體系主要由以下幾部分組成:

基本加密函數、證書編碼與解碼函數、證書存儲函數、簡化信息處理函數、底層信息處理函數。

1.2.1 基本加密函數

服務提供者函數

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

校驗一個數字簽名

1.2.2 證書和證書庫函數

這組函數是管理、使用和取得證書、證書撤銷列表和證書信任列表。

證書庫函數:一個用戶站點可以收集許多證書。這些證書是為這個站點的用戶所使用的,證書描述了這個用戶的具體身份。對於每個人,可能有一個以上的證書。證書庫和其相關的函數提供了對庫獲得、枚舉、驗證和使用證書庫里的信息。

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 屬性

1.2.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

通過檢查證書鏈來確定它的完整性

1.2.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

驗證一個簽名消息

1.2.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 包那樣解碼,並且用指定口令解密

2 PKCS#11

加密令牌接口標准PKCS#11由RSA Security制定,定義了加密令牌的本機編程接口,例如硬件加密加速器和智能卡。使用JCA和JCE API的現有應用程序可以使用PKCS#11提供程序訪問本機PKCS#11令牌。無需修改應用程序。唯一的要求是正確配置提供程序。

2.1 PKCS#11在編程中的使用方式

在密碼系統中,PKCS#11是公鑰加密標准(PKCS, Public-Key Cryptography Standards)中的一份子 ,由RSA實驗室(RSA Laboratories)發布,它為加密令牌定義了一組平台無關的API ,如硬件安全模塊和智能卡。 PKCS#11稱為Cyptoki,定義了一套獨立於技術的程序設計接口,USBKey安全應用需要實現的接口。 由於沒有一個真正的標准加密令牌,這個API已經發展成為一個通用的加密令牌的抽象層。 PKCS#11 API定義最常用的加密對象類型( RSA密鑰,X.509證書,DES /三重DES密鑰等)和所有需要使用的功能,創建/生成,修改和刪除這些對象。注意:pkcs#11只提供了接口的定義, 不包括接口的實現,一般接口的實現是由設備提供商提供的,如usbkey的生產廠商會提供 符合PKCS#11接口標准的API的實現。這樣你只要通過接口調用API函數即可實現其功能。

2.2 PKCS#11包含的函數

2.2.1 通用函數

C_Initialize Cryptoki初始化函數
C_Finalize 結束Cryptoki的操作
C_GetInfo 獲取C_Finalize的信息
C_GetFunctionList

獲取函數列表指針

2.2.2 Slot/Token 管理函數

C_GetSlotList 獲取Slot的列表
C_GetSlotInfo 獲取Slot的信息
C_GetTokenInfo 獲取TOKEN的信息
C_WaitForSlotEvent 等待Slot的事件發生
C_GetMechanismList 獲取機制列表
C_GetMechanismInfo 獲取機制信息
C_InitToken 初始化Token
C_SetPIN 設定PIN
C_InitPIN 初始化PIN

2.2.3 會話管理函數

C_OpenSession 打開會話
C_CloseSession 關閉會話
C_CloseAllSessions 關閉所有會話
C_GetSessionInfo 獲取會話信息
C_GetOperationState 獲取操作狀態
C_SetOperationState 設定操作狀態
C_Login 登錄
C_Logout 退出登錄

2.2.4 對象管理函數

C_CreateObject 創建對象
C_CopyObject 拷貝對象
C_DestroyObject 刪除對象
C_GetObjectSize 獲取對象大小
C_GetAttributeValue 獲取屬性值
C_SetAttributeValue 設定屬性值
C_FindObjectInit 查看對象的初始化操作
C_FindObjects 查找對象
C_FindObjectsFinal 結束查找對象的操作

2.2.5 加密函數

C_EncryptInit 加密初始化
C_Encrypt 加密操作
C_EncryptUpdate 加密操作
C_EncryptFinal 結束加密的操作

2.2.6 解密函數 

C_DecryptInit 初始化
C_Decrypt 解密操作
C_DecryptUpdate 解密操作
C_DecryptFinal 結束加密的操作

2.2.7 摘要函數

C_DigestInit 摘要初始化
C_Digest 摘要
C_DigestUpdate 摘要
C_DigestKey 對KEY進行摘要
C_DigestFinal 結束摘要操作

2.2.8 簽名函數

C_SignInit 簽名初始化
C_Sign 簽名
C_SignUpdate 簽名
C_SignFinal 結束簽名操作
C_SignRecoverInit 可恢復簽名的初始化
C_SignRecover 可恢復簽名的操作

2.2.9 校驗函數

C_VerifyInit 校驗初始化
C_Verify 校驗
C_VerifyUpdate 校驗
C_VerifyFinal 結束校驗操作
C_VerifyRecoverInit 可恢復校驗操作初始化
C_VerifyRecover 可恢復校驗

2.2.10 KEY管理函數

C_GenerateKey 生成KEY
C_GenerateKeyPair 生成公私鑰對
C_WrapKey 對KEY進行打包
C_UnwrapKey 對KEY進行解包

C_DeriveKey

派生KEY

2.2.11 隨機數產生函數

C_SeedRandom 設定隨機種子
C_GenerateRandom 生成隨機數

2.2.12 雙效加密函數

C_DigestEncryptUpdate

繼續類似的多部分摘要和加密操作

C_DecryptDigestUpdate

繼續類似的多部分解密和摘要操作

C_SignEncryptUpdate

繼續類似的多部分簽名和加密操作

C_DecryptVerifyUpdate

繼續類似的多部分解密和鑒定操作

2.2.13 並行功能管理函數

C_GetFunctionStatus

已廢棄函數,返回CKR_FUNCTION_NOT_PARALLEL

C_CancelFunction

已廢棄函數,返回CKR_FUNCTION_NOT_PARALLEL

 

3 GMT 0016-2012 智能密碼鑰匙密碼應用接口規范

規定了公鑰密碼基礎設施應用技術體系下服務類密碼設備的應用接口標准。
適用於服務類密碼設備的研制、使用,以及基於該類密碼設備的應用開發,也可用於指導該類密碼設備的檢測。

3.1 GMT 0016-2012在編程中的使用方式

 調用頭文件以及接口進行使用

3.2 GMT 0016-2012包含的函數

3.2.1 設備管理類函數

SDF_OpenDevice 打開設備
SDF_CloseDevice 關閉設備
SDF_OpenSession 創建會話
SDF_CloseSession 關閉會話
SDF_GetDeviceInfo 獲取設備信息
 SDF_GenerateRandom 產生隨機數 
 SDF_GetPrivateKeyAccessRight 獲取私鑰使用權限
 SDF_ReleasePrivateKeyAccessRight 釋放私鑰獲取權限 

3.2.2 密鑰管理類函數

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_ExchangeDigitEnvelopeIaseOnRSAH 基於RSA算法的數字信封轉換
SDF_ExportSignPublicKey_ECC 導出ECC簽名公鑰
SDF_ExportEncPublicKey_ECC 導出ECC加密公鑰
SDF_GenerateKeyPair_ECC 產生ECC非對稱密鑰對並輸出
SDF_GenerateKeyWithIPK_ECC 生成會話密鑰並用內部ECC公鑰加密輸出
SDF_GenerateKeyWithEPK_ECC 生成會話密鑰並用外部ECC公鑰加密輸出
SDF_ImportKeyWithISKECC 導入會話密鑰並用內部 ECC私鑰解密
SDF_GenerateAgreementDataWithECC 生成密鑰協商參數並輸出
SDF_GenerateKeyWihECC 計算會話密鑰
SDF_GenerateAgreermentDataAndKeyWithECC 產生協商數據並計算會話密鑰
SDF_ExchangeDigitEnvelopeBaseOnECC 基於ECC算法的數字信封轉換
SDF_GenerateKeyWithKEK 生成會話密鑰並用密鑰加密密鑰加密輸出
SDF_ImportKeyWithKEK SDF_GenerateKey WitlKEK導入會話密鑰並用密鑰加密密鑰解密
SDF_DestroyKey 銷毀會話密鑰

3.2.3 非對稱算法運算類函數

SDF_ExternalPublicKeyOperation_RSA 外部公鑰RSA運算
SDF_InternalPublicKeyOperation_RSA 內部公鑰RSA運算
SDF_InternalPrivateKeyOperation_RSA 內部私鑰RSA運算
SDF_ExternalVerify_ECC 外部密鑰ECC驗證
SDF_InternalSign_ECC 內部密鑰ECC簽名
SDF_InternalVerify_ECC 內部密鑰ECC驗證
SDFExternalEncrypt_ECC 外部密鑰EC加密

3.2.4 對稱算法運算類函數

SDF_ Encrypt 對稱加密
SDF_Dccrypt 對稱解密
SDF_CalculateMAC 計算MAC

3.2.5 雜湊運算類函數

SDF HashInit 雜湊運算初始化
SDF HashUpdate 多包雜湊運算
SDF_HashFinal 雜湊運算結束

3.2.6 用戶文件操作類函數

SDF_CreateFile 創建文件
SDF_ReadFile 讀取文件
SDF_WriteFile 寫文件
SDF_DeleteFile 刪除文件

4.以龍脈GM3000Key為例,寫出調用不同接口的代碼

4.1 調用Crypto API

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM