加密作業 :PKCS #11 API

IBM Cloud® Hyper Protect Crypto Services 提供一組在雲端中 硬體安全模組(HSM)A physical appliance that provides on-demand encryption, key management, and key storage as a managed service. 中執行的加密法函數。 您可以透過存取寫入 PKCS #11 標準的 PKCS #11 程式庫來執行加密作業。 PKCS #11 是一種標準,可針對保留加密資訊及執行加密功能的裝置指定應用程式設計介面 (API),稱為 Cryptoki

如需 PKCS #11的相關資訊,請參閱 PKCS 簡介 #11

安裝及配置 PKCS #11 程式庫

若要執行 PKCS #11 API 呼叫,您需要先 安裝 PKCS #11 程式庫,然後 設定 PKCS #11 使用者類型

程式庫檔案名稱使用命名慣例: pkcs11-grep11-<**platform**>.so.<**version**>。 平台是 amd64s390x,版本是標準 major.minor.build 語法。 下載檔案庫之後,請將檔案庫移至應用程式可存取的資料夾。 例如,如果您在 Linux®上執行應用程式,則可以將程式庫移至 /usr/local/lib/usr/local/lib64/usr/lib

若要存取 PKCS #11 API,請在 grep11client.yaml 配置檔中設定 API 端點及 API 金鑰,以配置 PKCS #11 程式庫。 然後,起始設定磁帶庫。 如需詳細指示,請參閱 使用 PKCS #11 API 執行加密作業

如果您在 IBM Z (s390x) 平台上使用 SunPKCS11 提供者執行 Java PKCS #11 應用程式,請確定您使用最新的 IBM Semeru JVM,並在啟動應用程式時指定 -Xjit:noResumableTrapHandler Java 選項。 您可以在 IBM Semeru 執行時期下載頁面」上,將 架構 過濾器欄位變更為 s390x,以下載 IBM Semeru JVM 的最新 s390x 版本。

錯誤處理

Hyper Protect Crypto Services 的 PKCS #11 API 遵循 PKCS #11 加密記號介面 的標準方法進行錯誤處理。

驗證金鑰是否受加密單位保護

PKCS #11 API 會使用產生的金鑰物件,這些金鑰物件可以儲存、更新及擷取自 IBM Cloud上的遠端金鑰儲存庫。 作為新增的保護層次,也可以檢查儲存在 IBM Cloud 中的金鑰物件,以確保不會發生竄改。

每一個產生、衍生或未包裝的對稱金鑰都包含一個數位指紋,儲存在稱為 CKA_CHECK_VALUE 的金鑰屬性中。 此屬性是金鑰物件本身的 3 位元組總和檢查。

產生、衍生或解除包裝金鑰物件之後,建議您分別儲存起始總和檢查值 (CKA_CHECK_VALUE 屬性的內容) 以及金鑰物件的任何唯一 ID。 然後可以使用個別儲存的總和檢查來驗證金鑰是否遭到竄改。

若要驗證金鑰,請使用要驗證的金鑰來執行單一空值區塊 (0x00) 位元組的電子碼本 (ECB) 加密作業。 如果產生的密碼的前 3 個位元組與針對相同金鑰儲存在本端的 CKA_CHECK_VALUE 金鑰屬性值相同,則表示金鑰物件未遭竄改。 無法使用 CKA_CHECK_VALUE 索引鍵屬性來取得索引鍵值的任何部分。

如需如何擷取 AES、DES2及 DES3 金鑰的總和檢查值以及金鑰總和檢查驗證的範例,請參閱 這裡

PKCS #11 函數清單

PKCS #11 標準定義稱為 Cryptoki的 API。 下表列出 PKCS #11 Cryptoki API 函數及說明。

並非所有 PKCS #11 函數都由 Hyper Protect Crypto Services實作。 在表格中,實作的函數會標示 Yes

表 1. 說明服務後端所實作的 PKCS #11 函數
種類 PKCS #11 函數 已實作? (是或否) 說明
一般用途 C_Initialize True 起始設定 Cryptoki。
一般用途 C_Finalize True 清除其他 Cryptoki 相關聯的資源。
一般用途 C_GetInfo True 取得 Cryptoki 的一般資訊。
一般用途 C_GetFunctionList True 取得 Cryptoki 程式庫函數的進入點。
插槽和記號管理 C_GetSlotList True 取得系統中的空位清單。
插槽和記號管理 C_GetSlotInfo True 取得特定空位的相關資訊。
插槽和記號管理 C_GetTokenInfo True 取得特定記號的相關資訊。
插槽和記號管理 C_WaitForSlotEvent 等待空位事件 (記號插入、移除等) 發生。
插槽和記號管理 C_GetMechanism清單 True 取得記號支援的機制清單。
插槽和記號管理 C_GetMechanism資訊 True 取得特定機制的相關資訊。
插槽和記號管理 C_InitToken True 起始設定記號。
插槽和記號管理 C_InitPIN True 起始設定標準使用者的 PIN。
插槽和記號管理 C_SetPIN True 修改現行使用者的 PIN。
階段作業管理 C_OpenSession True 開啟應用程式與特定記號之間的連線,或設定應用程式回呼以插入記號。
階段作業管理 C_CloseSession True 關閉階段作業。
階段作業管理 C_CloseAllSessions True 關閉具有記號的所有階段作業。
階段作業管理 C_GetSessionInfo True 取得階段作業的相關資訊。
階段作業管理 C_GetOperationState True 取得階段作業的加密作業狀態。
階段作業管理 C_SetOperationState True 設定階段作業的加密作業狀態。
階段作業管理 C_Login True 登入記號。
階段作業管理 C_Logout True 從記號登出。
物件管理 C_CreateObject 1 建立物件。
物件管理 C_CopyObject True 建立物件的副本。
物件管理 C_DestroyObject True 破壞物件。
物件管理 C_GetObjectSize True 取得物件的大小(以位元組為單位)。
物件管理 C_GetAttribute值 True 取得物件的屬性值。
物件管理 C_SetAttribute值 True 修改物件的屬性值。 只能修改布林屬性。
物件管理 C_FindObjectsInit True 起始設定物件搜尋作業。
物件管理 C_FindObjects True 繼續物件搜尋作業。
物件管理 C_FindObjectsFinal True 完成物件搜尋作業。
加密 C_EncryptInit True 起始設定加密作業。
加密 加密 (_Encrypt) True 加密單一部分資料。
加密 C_EncryptUpdate True 繼續多部分加密作業。
加密 C_EncryptFinal True 完成多部分加密作業。
解密 C_DecryptInit True 起始設定解密作業。
解密 拒絕 (_D) True 解密單一部分加密資料。
解密 C_DecryptUpdate True 繼續多部分解密作業。
解密 C_DecryptFinal True 完成多部分解密作業。
訊息摘要 C_DigestInit True 起始設定訊息摘要作業。
訊息摘要 摘要 (_摘要) True 對單一部分資料進行摘要。 輸入資料的長度不能為零,且指向輸入資料位置的指標不能為 NULL。
訊息摘要 C_DigestUpdate True 繼續多部分摘要作業。 輸入資料的長度不能為零,且指向輸入資料位置的指標不能為 NULL。
訊息摘要 C_DigestKey 對金鑰進行摘要。
訊息摘要 C_DigestFinal True 完成多部分摘要作業。
簽署及 MACing C_SignInit True 起始設定簽章作業。
簽署及 MACing 簽署 (_Sign) True 簽署單一部分資料。
簽署及 MACing C_SignUpdate True 繼續多部分簽章作業。
簽署及 MACing C_SignFinal True 完成多部分簽章作業。
簽署及 MACing C_SignRecoverInit 起始設定簽章作業,其中會從簽章回復資料。
簽署及 MACing C_SignRecover 簽署單一部分資料,其中會從簽章回復資料。
驗證簽章及 MAC C_VerifyInit True 起始設定驗證作業。
驗證簽章及 MAC 驗證 (_V) True 驗證單一部分資料上的簽章。
驗證簽章及 MAC C_VerifyUpdate True 繼續多部分驗證作業。
驗證簽章及 MAC C_VerifyFinal True 完成多部分驗證作業。
驗證簽章及 MAC C_VerifyRecoverInit 起始設定驗證作業,其中可以從簽章回復資料。
驗證簽章及 MAC C_VerifyRecover 驗證單一部分資料上的簽章,其中可以從簽章回復資料。
雙重用途加密函數 C_DigestEncryptUpdate True 同時繼續多部分摘要和加密作業。
雙重用途加密函數 C_DecryptDigestUpdate True 同時繼續多部分解密和摘要作業。
雙重用途加密函數 C_SignEncryptUpdate True 同時繼續多部分簽章和加密作業。
雙重用途加密函數 C_DecryptVerifyUpdate True 同時繼續多部分解密和驗證作業。
金鑰管理 C_GenerateKey True 產生秘密金鑰。
金鑰管理 C_GenerateKey對組 True 產生公開或私密金鑰組。
金鑰管理 C_WrapKey True 包裝(加密)金鑰。
金鑰管理 C_UnwrapKey True 解除包裝(解密)金鑰。
金鑰管理 C_DeriveKey True 從基本金鑰衍生金鑰。
產生亂數 C_SeedRandom 將種子資料新增至亂數產生器。
產生亂數 C_GenerateRandom True 產生隨機資料。 隨機資料的長度不能為零,且指向隨機資料位置的指標不能為 NULL。
平行函數管理 C_GetFunctionStatus 一律傳回 CKR_FUNCTION_NOT_PARALLEL 的舊式函數。
平行函數管理 C_CancelFunction 一律傳回 CKR_FUNCTION_NOT_PARALLEL 的舊式函數。

1:C_CreateObject 函數的現行實作支援秘密金鑰物件、私密金鑰物件、公開金鑰物件、資料物件、X.509 公開金鑰憑證物件、WTLS 公開金鑰憑證物件及 X.509 屬性憑證物件。

支援的機制

機制稱為實作加密作業的程序。 視加密卡中韌體的層次而定,它可能有所不同。 下表顯示支援的機制,以及它們如何與一般 Cryptoki 函數種類相關。

表 2. 說明支援的 PKCS #11 機制
函數群組 支援的機制
加密和解密。 CKM_RSA_PKCS1、CKM_RSA_PKCS_OAEP1、CKM_AES_ECB、CKM_AES_CBC、CKM_AES_CBC_PAD、CKM_DES3_ECB、CKM_DES3_CBC、CKM_DES3_CBC_PAD
簽署並驗證。 CKM_RSA_PKCS1、CKM_RSA_PKCS_PSS1、CKM_RSA_X9_311、CKM_SHA1_RSA_PKCS、CKM_SHA256_RSA_PKCS、CKM_SHA224_RSA_PKCS、CKM_SHA384_RSA_PKCS、CKM_SHA512_RSA_PKCS、CKM_SHA1_RSA_PKCS_PSS、CKM_SHA224_RSA_PKCS_PSS、CKM_SHA256_RSA_PKCS_PSS、CKM_SHA384_RSA_PKCS_PSS、CKM_SHA512_RSA_PKCS_PSS、CKM_SHA1_RSA_X9_31、CKM_DSA1、CKM_DSA_SHA1、CKM_ECDSA1、CKM_ECDSA_SHA1、CKM_ECDSA_SHA224、CKM_ECDSA_SHA256、CKM_ECDSA_SHA384、CKM_ECDSA_SHA512、CKM_SHA1_HMAC、CKM_SHA256_HMAC、CKM_SHA384_HMAC、CKM_SHA512_HMAC、CKM_SHA512_224_HMAC、CKM_SHA512_256_HMAC、CKM_IBM_ED25519_SHA512、CKM_IBM_ED448_SHA3、CKM_IBM_DIILITHIUM2
摘要。 CKM_SHA_1, CKM_SHA224, CKM_SHA256, CKM_SHA384, CKM_SHA512, CKM_SHA512_224, CKM_SHA512_256
產生金鑰或產生金鑰組。 CKM_RSA_PKCS_KEY_PAIR_GEN、CKM_RSA_X9_31_KEY_PAIR_GEN、CKM_DSA_KEY_PAIR_GEN、CKM_DSA_PARAMETER_GEN、CKM_EC_KEY_PAIR_GEN (CKM_ECDSA_KEY_PAIR_GEN)、ckm_dh_pkcs_key_pair_gen、ckm_dh_pkcs_parameter_gen、ckm_generic_secret_key_gen、ckm_aes_key_gen CKM_DES2_KEY_GEN、CKM_DES3_KEY_GEN、CKM_IBM_DILITHIUM
包裝並解除包裝。 CKM_RSA_PKCS、CKM_RSA_PKCS_OAEP、CKM_AES_ECB、CKM_AES_CBC、CKM_AES_CBC_PAD、CKM_DES3_ECB、CKM_DES3_CBC、CKM_DES3_CBC_PAD
衍生。 CKM_ECDH1_DERIVE、CKM_DH_PKCS_DERIVE、CKM_DES3_ECB_ENCRYPT_DATA、CKM_SHA1_KEY_DERIVATION、CKM_SHA224_KEY_DERIVATION、CKM_SHA256_KEY_DERIVATION、CKM_SHA384_KEY_DERIVATION、CKM_SHA512_KEY_DERIVATION、CKM_IBM_BTC_DERIVE

1: 此機制僅支援無法利用任何 Update Cryptoki 函數 (例如 C_EncryptUpdateC_DecryptUpdateC_DigestUpdate) 的單一部分作業。

2: IBM 4768 加密卡不支援此機制,且無法用於 C_SignUpdateC_VerifyUpdate 作業。

支援的屬性及索引鍵類型

PKCS #11 屬性定義物件性質,以設定如何使用及存取物件。 下表顯示支援的屬性及其與各種受支援索引鍵類型的關係。

表 3. 支援的屬性及金鑰類型
屬性 說明 支援的金鑰類型
CKA_BASE DSA 網域參數,用於 C_CreateObject。 基數 g。 DSA 私密金鑰,DSA 公開金鑰
CKA_CERTIFICATE_CATEGORY 用來指出儲存的憑證是否為使用者憑證,其對應的私密金鑰可在記號 ("token user")、CA 憑證 ("authority") 上使用,或另一個終端實體憑證 ("other entity")。 預設值為 CK_CERTIFICATE_CATEGORY_UNSPECIFIED。 不適用
CKA_CERTIFICATE_TYPE 使用 C_CreateObject建立憑證物件時必須指定。 憑證類型為 X.509 公開金鑰、WTLS 公開金鑰憑證及 X.509 屬性憑證。 不適用
CKA_CHECK_VALUE 金鑰或憑證的總和檢查。 AES 金鑰,DES 金鑰
CKA_CLASS 所有物件的物件類別(類型)是通用的。 EC 私密金鑰,EC 公開金鑰,RSA 私密金鑰,RSA 公開金鑰,DH 私密金鑰,DH 公開金鑰,DSA 私密金鑰,DSA 公開金鑰,AES 金鑰,DES 金鑰,通用金鑰
CKA_Coefficient 用於 C_CreatObject。 RSA 私密金鑰
CKA_COPYABLE 如果設為 CKA_TRUE,則可以使用 C_CopyObject來複製物件。 EC 私密金鑰,EC 公開金鑰,RSA 私密金鑰,RSA 公開金鑰,DH 私密金鑰,DH 公開金鑰,DSA 私密金鑰,DSA 公開金鑰,AES 金鑰,DES 金鑰,通用金鑰
CKA_DECRYPT 如果金鑰支援解密,則為 CK_TRUE。 EC 私密金鑰,RSA 私密金鑰,DH 私密金鑰,DSA 私密金鑰,AES 金鑰,DES 金鑰,通用金鑰
CKA_DERIVE 如果金鑰支援金鑰衍生 (其他金鑰可以從此金鑰衍生),則為 CK_TRUE。 預設值為 CK_FALSE。 EC 私密金鑰,EC 公開金鑰,RSA 私密金鑰,RSA 公開金鑰,DH 私密金鑰,DH 公開金鑰,DSA 私密金鑰,DSA 公開金鑰,AES 金鑰,DES 金鑰,通用金鑰
CKA_EC_PARAMS (CKA_ECDSA_PARAMS) ANSI X9.62 參數值的 DER 編碼。 EC 私密金鑰,EC 公開金鑰
CKA_EC_POINT ANSI X9.62 ECPoint 值 Q 的 DER 編碼。 EC 公開金鑰
CKA_ENCRYPT 如果金鑰支援加密,則為 CK_TRUE。 EC 公開金鑰、RSA 公開金鑰、DH 公開金鑰、DSA 公開金鑰、AES 金鑰、DES 金鑰、通用金鑰
CKA_END_DATE 憑證或金鑰的結束日期。 預設值是空的。 EC 私密金鑰,EC 公開金鑰,RSA 私密金鑰,RSA 公開金鑰,DH 私密金鑰,DH 公開金鑰,DSA 私密金鑰,DSA 公開金鑰,AES 金鑰,DES 金鑰,通用金鑰
CKA_EXTRACTTABLE 如果金鑰可擷取且可以包裝,則為 CK_TRUE。 EC 私密金鑰,RSA 私密金鑰,DH 私密金鑰,DSA 私密金鑰,AES 金鑰,DES 金鑰,通用金鑰
CKA_EXPONENT_1 用於 C_CreateObject。 專用指數 d 模數 q-1。 RSA 私密金鑰
CKA_EXPONENT_2 用於 C_CreateObject。 CRT 係數 q-1 模數 p。 RSA 私密金鑰
CKA_HASH_OF_ISSUER_PUBLIC_KEY 憑證的發證者公開金鑰雜湊。 預設值是空的。 不適用
CKA_HASH_OF_SUBJECT_PUBLIC_KEY 憑證的主體公開金鑰雜湊。 預設值是空的。 不適用
CKA_IBM_PQC_PARAMS 支援量子後加密法機制的參數。 在 Dilithium 機制 CKM_IBM_DILITHIUM 的情況下,它會提供一個配置物件 ID (OID),代表要使用的 Dilithium 演算法強度。 目前僅支援 Dilithium 4 第 2 輪 的強度。 Dilithium 金鑰
CKA_IBM_USE_AS_DATA 當 CK_TRUE 時,物件用於雜湊或金鑰衍生作業 EC 私密金鑰,EC 公開金鑰
CKA_ID 公開或私密金鑰組或金鑰的金鑰 ID。 預設值是空的。 EC 私密金鑰,EC 公開金鑰,RSA 私密金鑰,RSA 公開金鑰,DH 私密金鑰,DH 公開金鑰,DSA 私密金鑰,DSA 公開金鑰,AES 金鑰,DES 金鑰,通用金鑰
CKA_Issuer 憑證發證者名稱的 DER 編碼。 預設值是空的。 不適用
CKA_JAVA_MIDP_SECURITY_DOMAIN 憑證的 Java MIDP 安全網域。 預設值為 CK_SECURITY_DOMAIN_UNSPECIFIED。 不適用
CKA_KEY_TYPE 金鑰的類型。 EC 私密金鑰,EC 公開金鑰,RSA 私密金鑰,RSA 公開金鑰,DH 私密金鑰,DH 公開金鑰,DSA 私密金鑰,DSA 公開金鑰,AES 金鑰,DES 金鑰,通用金鑰
CKA_LABEL 物件的說明。 預設值是空的。 EC 私密金鑰,EC 公開金鑰,RSA 私密金鑰,RSA 公開金鑰,DH 私密金鑰,DH 公開金鑰,DSA 私密金鑰,DSA 公開金鑰,AES 金鑰,DES 金鑰,通用金鑰
本端 CKA_LOCAL 只有在使用 C_GenerateKeyC_GenerateKeyPair 呼叫在本端產生金鑰 (在記號上),或使用 C_CopyObject 呼叫作為將 CKA_LOCAL 屬性設為 CK_TRUE 的金鑰副本來建立金鑰時,才為 CK_TRUE。 EC 私密金鑰,EC 公開金鑰,RSA 私密金鑰,RSA 公開金鑰,DH 私密金鑰,DH 公開金鑰,DSA 私密金鑰,DSA 公開金鑰,AES 金鑰,DES 金鑰,通用金鑰
可修改的 CKA_MODIFIABLE 如果可以修改物件,則設為 CK_TRUE。 EC 私密金鑰,EC 公開金鑰,RSA 私密金鑰,RSA 公開金鑰,DH 私密金鑰,DH 公開金鑰,DSA 私密金鑰,DSA 公開金鑰,AES 金鑰,DES 金鑰,通用金鑰
CKA_MODULUS 模數 n。 RSA 私密金鑰
CKA_MODUUS_BITS 模數 n 的長度(位元)。 RSA 公開金鑰
CKA_NAME_HASH_ALGORITHM 定義用來計算憑證之「主旨」及「發證者」公開金鑰的雜湊的機制。 預設值為 SHA-1。 不適用
CKA_PRIME DSA 網域參數,用於 C_CreateObject。 質數 p (步驟 64 位元中的 512 到 2048 位元)。 DSA 私密金鑰,DSA 公開金鑰
CKA_PRIME_1 用於 C_CreateObject。 質數 q。 RSA 私密金鑰
CKA_PRIME_2 用於 C_CreateObject。 專用指數 d 模數 p-1。 RSA 私密金鑰
CKA_PRIVATE 如果物件是專用物件,則為 CK_TRUE;如果物件為公用物件,則為 CK_FALSE。 預設值是記號特有的,且可能取決於物件其他屬性的值。 EC 私密金鑰,EC 公開金鑰,RSA 私密金鑰,RSA 公開金鑰,DH 私密金鑰,DH 公開金鑰,DSA 私密金鑰,DSA 公開金鑰,AES 金鑰,DES 金鑰,通用金鑰
CKA_PRIVATE_EXPONENT 用於 C_CreateObject。 質數 p。 RSA 私密金鑰
CKA_PUBLIC_EXPONENT 公用指數 e。 RSA 私密金鑰,RSA 公開金鑰
CKA_PUBLIC_KEY_INFO 公開金鑰的 SubjectPublicKeyInfo 的 DER 編碼。 此值衍生自基礎公開金鑰資料,依預設是空的。 RSA 公開金鑰、EC 公開金鑰、Dilithium 公開金鑰
CKA_SENSITIVE 如果金鑰為機密,則為 CK_TRUE。 EC 私密金鑰,RSA 私密金鑰,DH 私密金鑰,DSA 私密金鑰,AES 金鑰,DES 金鑰,通用金鑰
CKA_SERIAL_NUMBER 憑證序號的 DER 編碼。 預設值是空的。 不適用
CKA_SIGN 如果金鑰支援簽章是資料附錄的簽章,則為 CK_TRUE。 EC 私密金鑰,RSA 私密金鑰,DH 私密金鑰,DSA 私密金鑰,AES 金鑰,DES 金鑰,通用金鑰
CKA_START_DATE 憑證或金鑰的開始日期。 預設值是空的。 EC 私密金鑰,EC 公開金鑰,RSA 私密金鑰,RSA 公開金鑰,DH 私密金鑰,DH 公開金鑰,DSA 私密金鑰,DSA 公開金鑰,AES 金鑰,DES 金鑰,通用金鑰
CKA_主旨 憑證或金鑰主體名稱的 DER 編碼。 EC 私密金鑰、EC 公開金鑰、RSA 私密金鑰、RSA 公開金鑰、DH 私密金鑰、DH 公開金鑰、DSA 私密金鑰、DSA 公開金鑰
CKA_次級 DSA 網域參數,用於 C_CreateObject。 Subprime q (160 bits for p <= 1024 bits, 224 bits, or 256 bits for p > 1024 bits). DSA 私密金鑰,DSA 公開金鑰
CKA_TOKEN 如果物件是記號物件,則為 CK_TRUE;如果物件為階段作業物件,則為 CK_FALSE。 EC 私密金鑰,EC 公開金鑰,RSA 私密金鑰,RSA 公開金鑰,DH 私密金鑰,DH 公開金鑰,DSA 私密金鑰,DSA 公開金鑰,AES 金鑰,DES 金鑰,通用金鑰
CKA_TRUSTED 憑證或金鑰所建立的應用程式可以信任該憑證或金鑰。 EC 公開金鑰、RSA 公開金鑰、DH 公開金鑰、DSA 公開金鑰、AES 金鑰、DES 金鑰、通用金鑰
CKA_UNWRAP 如果金鑰支援解除包裝 (可用來解除包裝其他金鑰),則為 CK_TRUE。 EC 私密金鑰,RSA 私密金鑰,DH 私密金鑰,DSA 私密金鑰,AES 金鑰,DES 金鑰,通用金鑰
CKA_URL 可在其中取得完整憑證的 URL。 預設值是空的。 不適用
CKA_VALUE 使用 C_CreateObject時已編碼憑證位元組或金鑰位元組。 EC 私密金鑰、DSA 公開金鑰、DSA 私密金鑰、ED25519 私密金鑰、ED448 私密金鑰、AES 金鑰、DES 金鑰
CKA_VALUE_LEN 金鑰值的長度(以位元組為單位)。 AES 金鑰
CKA_Verify 如果金鑰支援簽章是資料附錄的驗證,則為 CK_TRUE。 EC 公開金鑰、RSA 公開金鑰、DH 公開金鑰、DSA 公開金鑰、AES 金鑰、DES 金鑰、通用金鑰
CKA_WRAP 如果金鑰支援包裝 (可用來包裝其他金鑰),則為 CK_TRUE。 EC 公開金鑰、RSA 公開金鑰、DH 公開金鑰、DSA 公開金鑰、AES 金鑰、DES 金鑰、通用金鑰
CKA_WRAP_WITH_TRUSTED 如果金鑰只能使用將 CKA_TRUSTED 設為 CK_TRUE 的包裝金鑰包裝,則為 CK_TRUE。 預設值為 CK_FALSE。 EC 私密金鑰,RSA 私密金鑰,DH 私密金鑰,DSA 私密金鑰,AES 金鑰,DES 金鑰,通用金鑰
CKA_APPLICATION 管理物件之應用程式的說明 (預設值為空白) 不適用
CKA_OBJECT_ID 指出資料物件類型之物件 ID 的 DER 編碼 (預設值為空白) 不適用
CKA_OWNER 屬性憑證主體欄位的 DER 編碼。 這與 CKC_X_509 憑證中所包含的 CKA_SUBJECT 屬性不同,因為 ASN.1 語法和編碼是不同的。 不適用
CKA_AC_Issuer 屬性憑證發證者欄位的 DER 編碼。 這與 CKC_X_509 憑證中包含的 CKA_ISSUER 屬性不同,因為 ASN.1 語法和編碼不同。(預設值為空白) 不適用
CKA_ATTR_TYPES 對應於憑證中所含屬性類型之一系列物件 ID 值的 BER 編碼。 當此欄位存在時,可讓應用程式在不提取及剖析憑證本身的情況下搜尋特定屬性憑證。(預設值為空白) 不適用

支援的曲線

PKCS #11 程式庫支援特定機制的有限類型曲線。 下表列出不同機制支援的曲線名稱。 曲線名稱中的數字表示支援的主要位元計數。

用於產生橢圓曲線 (EC) 索引鍵的受支援曲線

當您呼叫 C_GenerateKeyPair 函數以產生「橢圓曲線 (EC)」索引鍵時,支援機制 CKM_EC_KEY_PAIR_GEN。 曲線名稱參數必須使用 CKA_EC_PARAMS 指定為物件 ID (OID)。 您可以透過在 OID 儲存庫中搜尋曲線名稱來取得 OID。

表 4. 產生 EC 索引鍵的受支援曲線類型
PKCS #11 機制 支援的曲線類型 支援的曲線名稱
CKM_EC_KEY_Pair_GEN 國家標準與技術機構(NIST)曲線
  • P-192,也稱為 secp192r1 及 prime192v1。
  • P-224,也稱為 secp224r1。
  • P-256,也稱為 secp256r1 及 prime256v1。
  • P-384,也稱為 secp384r1。
  • P-521,也稱為 secp521r。
CKM_EC_KEY_Pair_GEN 一般腦庫(BP)曲線
  • BP-160R,也稱為 brainpoolP160r1。
  • BP-192R,也稱為 brainpoolP192r1。
  • BP-224R,也稱為 brainpoolP224r1。
  • BP-256R,也稱為 brainpoolP256r1。
  • BP-320R,也稱為 brainpoolP320r1。
  • BP-384R,也稱為 brainpoolP384r1。
  • BP-512R,也稱為 brainpoolP512r1。
CKM_EC_KEY_Pair_GEN 扭曲大腦儲存區(BP)曲線
  • BP-160T,也稱為 brainpoolP160t1。
  • BP-192T,也稱為 brainpoolP192t1。
  • BP-224T,也稱為 brainpoolP224t1。
  • BP-256T,也稱為 brainpoolP256t1。
  • BP-320T,也稱為 brainpoolP320t1。
  • BP-384T,也稱為 brainpoolP384t1。
  • BP-512T,也稱為 brainpoolP512t1。
CKM_EC_KEY_Pair_GEN 有效加密法(SEC)曲線的標準
  • secp256k1
CKM_EC_KEY_Pair_GEN Edwards 曲線
  • Ed25519
CKM_EC_KEY_Pair_GEN Edwards 曲線
  • Ed448

用於加密數位資產及產生數位簽章的受支援曲線

與數位資產及數位簽章相關的機制支援下列曲線。

表 5. 用於加密數位資產及簽章的受支援曲線類型
標準或架構 PKCS #11 機制 支援的曲線類型 支援的曲線名稱
BIP32/BIP44 CKM_IBM_BTC_DERIVE 有效加密法(SEC)曲線的標準
  • secp256k1
SLIP10 CKM_IBM_BTC_DERIVE 國家標準與技術機構(NIST)曲線
  • P-256,也稱為 secp256r1 及 prime256v1
SLIP10 CKM_IBM_BTC_DERIVE 有效加密法(SEC)曲線的標準
  • secp256k1
SLIP10 CKM_IBM_BTC_DERIVE Edwards 曲線
  • Ed25519
EdDSA CKM_IBM_ED25519_SHA512 Edwards 曲線
  • Ed25519
施諾爾 CKM_IBM_ECDSA_OTHER 有效加密法(SEC)曲線的標準
  • secp256k1
施諾爾 CKM_IBM_ECDSA_OTHER 國家標準與技術機構(NIST)曲線
  • P-256,也稱為 secp256r1 及 prime256v1
施諾爾 CKM_IBM_ECDSA_OTHER 一般腦庫(BP)曲線
  • BP-256R,也稱為 brainpoolP256r1
施諾爾 CKM_IBM_ECDSA_OTHER 扭曲大腦儲存區(BP)曲線
  • BP-256T,也稱為 brainpoolP256t1
施諾爾 ECSG_IBM_ECSDSA_S256
  • secp256r1
  • secp256k1
  • BP-256R,也稱為 brainpoolP256r1
  • BP-256T,也稱為 brainpoolP256t1
施諾爾-齊利卡 ECCSG_IBM_ECSDSA_COMPR_MULTI
  • secp256r1
  • secp256k1
  • BP-256R,也稱為 brainpoolP256r1
  • BP-256T,也稱為 brainpoolP256t1

標準 PKCS #11 API 參照

若要檢閱 PKCS #11 標準文件,請參閱: