加密作業 :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**>。 平台是 amd64 或 s390x,版本是標準 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。
| 種類 | 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 函數種類相關。
| 函數群組 | 支援的機制 |
|---|---|
| 加密和解密。 | 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_EncryptUpdate、C_DecryptUpdate 及 C_DigestUpdate) 的單一部分作業。
2: IBM 4768 加密卡不支援此機制,且無法用於 C_SignUpdate 及 C_VerifyUpdate 作業。
支援的屬性及索引鍵類型
PKCS #11 屬性定義物件性質,以設定如何使用及存取物件。 下表顯示支援的屬性及其與各種受支援索引鍵類型的關係。
| 屬性 | 說明 | 支援的金鑰類型 |
|---|---|---|
| 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_GenerateKey 或 C_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。
| PKCS #11 機制 | 支援的曲線類型 | 支援的曲線名稱 |
|---|---|---|
| CKM_EC_KEY_Pair_GEN | 國家標準與技術機構(NIST)曲線 |
|
| CKM_EC_KEY_Pair_GEN | 一般腦庫(BP)曲線 |
|
| CKM_EC_KEY_Pair_GEN | 扭曲大腦儲存區(BP)曲線 |
|
| CKM_EC_KEY_Pair_GEN | 有效加密法(SEC)曲線的標準 |
|
| CKM_EC_KEY_Pair_GEN | Edwards 曲線 |
|
| CKM_EC_KEY_Pair_GEN | Edwards 曲線 |
|
用於加密數位資產及產生數位簽章的受支援曲線
與數位資產及數位簽章相關的機制支援下列曲線。
| 標準或架構 | PKCS #11 機制 | 支援的曲線類型 | 支援的曲線名稱 |
|---|---|---|---|
| BIP32/BIP44 | CKM_IBM_BTC_DERIVE | 有效加密法(SEC)曲線的標準 |
|
| SLIP10 | CKM_IBM_BTC_DERIVE | 國家標準與技術機構(NIST)曲線 |
|
| SLIP10 | CKM_IBM_BTC_DERIVE | 有效加密法(SEC)曲線的標準 |
|
| SLIP10 | CKM_IBM_BTC_DERIVE | Edwards 曲線 |
|
| EdDSA | CKM_IBM_ED25519_SHA512 | Edwards 曲線 |
|
| 施諾爾 | CKM_IBM_ECDSA_OTHER | 有效加密法(SEC)曲線的標準 |
|
| 施諾爾 | CKM_IBM_ECDSA_OTHER | 國家標準與技術機構(NIST)曲線 |
|
| 施諾爾 | CKM_IBM_ECDSA_OTHER | 一般腦庫(BP)曲線 |
|
| 施諾爾 | CKM_IBM_ECDSA_OTHER | 扭曲大腦儲存區(BP)曲線 |
|
| 施諾爾 | ECSG_IBM_ECSDSA_S256 |
|
|
| 施諾爾-齊利卡 | ECCSG_IBM_ECSDSA_COMPR_MULTI |
|
標準 PKCS #11 API 參照
若要檢閱 PKCS #11 標準文件,請參閱: