IBM Cloud Docs
加密操作 :PKCS #11 API

加密操作 :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 是一种标准,用于为保存加密信息并执行加密功能的设备指定名为 Cryptoki的应用程序编程接口 (API)。

有关 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 Runtime Downloads 页面上将 Architecture 过滤器字段更改为 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 属性的内容) 以及密钥对象的任何唯一标识。 然后,可以使用单独存储的校验和来验证密钥是否被篡改。

要验证密钥,请使用要验证的密钥对单个空 (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 初始化 Cryptoki。
一般用途 C_Finalize 清除与 Cryptoki 关联的各种资源。
一般用途 C_GetInfo 获取有关 Cryptoki 的常规信息。
一般用途 C_GetFunctionList 获取 Cryptoki 库函数的入口点。
插槽和令牌管理 C_GetSlotList 获取系统中槽的列表。
插槽和令牌管理 C_GetSlotInfo 获取有关特定槽的信息。
插槽和令牌管理 C_GetTokenInfo 获取有关特定令牌的信息。
插槽和令牌管理 C_WaitForSlotEvent 等待发生槽事件 (令牌插入,除去等)。
插槽和令牌管理 C_GetMechanism列表 获取令牌支持的机制列表。
插槽和令牌管理 C_GetMechanism信息 获取有关特定机制的信息。
插槽和令牌管理 C_InitToken 初始化令牌。
插槽和令牌管理 C_InitPIN 初始化标准用户的 PIN。
插槽和令牌管理 C_SetPIN 修改当前用户的 PIN。
会话管理 C_OpenSession 打开应用程序与特定令牌之间的连接,或设置应用程序回调以插入令牌。
会话管理 C_CloseSession 关闭会话。
会话管理 C_CloseAllSessions 使用令牌关闭所有会话。
会话管理 C_GetSessionInfo 获取有关会话的信息。
会话管理 C_GetOperationState 获取会话的加密操作状态。
会话管理 C_SetOperationState 设置会话的加密操作状态。
会话管理 C_Login 登录到令牌。
会话管理 C_Logout 从令牌注销。
对象管理 C_CreateObject 1 创建对象。
对象管理 C_CopyObject 创建对象的副本。
对象管理 C_DestroyObject 销毁对象。
对象管理 C_GetObjectSize 获取对象的大小(以字节为单位)。
对象管理 C_GetAttribute值 获取对象的属性值。
对象管理 C_SetAttribute值 修改对象的属性值。 只能修改布尔属性。
对象管理 C_FindObjectsInit 初始化对象搜索操作。
对象管理 C_FindObjects 持续执行对象搜索操作。
对象管理 C_FindObjectsFinal 完成对象搜索操作。
加密 C_EncryptInit 初始化加密操作。
加密 加密 (c_Encrypt) 加密单部分数据。
加密 C_EncryptUpdate 持续执行多部分加密操作。
加密 C_EncryptFinal 完成多部分加密操作。
解密 C_DecryptInit 初始化解密操作。
解密 解密 (c_Decrypt) 解密单部分加密数据。
解密 C_DecryptUpdate 持续执行多部分解密操作。
解密 C_DecryptFinal 完成多部分解密操作。
消息摘要 C_DigestInit 初始化消息摘要操作。
消息摘要 C_Digest 对单部分数据进行摘要。 输入数据的长度不能为零,指向输入数据位置的指针不能为 NULL。
消息摘要 C_DigestUpdate 持续执行多部分摘要操作。 输入数据的长度不能为零,指向输入数据位置的指针不能为 NULL。
消息摘要 C_DigestKey 对密钥进行摘要。
消息摘要 C_DigestFinal 完成多部分摘要操作。
签名和 MACing C_SignInit 初始化签名操作。
签名和 MACing C_Sign 对单部分数据签名。
签名和 MACing C_SignUpdate 持续执行多部分签名操作。
签名和 MACing C_SignFinal 完成多部分签名操作。
签名和 MACing C_SignRecoverInit 初始化签名操作,其中数据从签名中恢复。
签名和 MACing C_SignRecover 对单部分数据进行签名,其中数据是从签名中恢复的。
验证签名和 MAC C_VerifyInit 初始化验证操作。
验证签名和 MAC 验证 验证单部分数据上的签名。
验证签名和 MAC C_VerifyUpdate 持续执行多部分验证操作。
验证签名和 MAC C_VerifyFinal 完成多部分验证操作。
验证签名和 MAC C_VerifyRecoverInit 初始化验证操作,其中数据是从签名恢复。
验证签名和 MAC C_VerifyRecover 验证单部分数据上的签名,其中数据是从签名恢复的。
两用加密函数 C_DigestEncryptUpdate 持续同时执行多部分摘要和加密操作。
两用加密函数 C_DecryptDigestUpdate 持续同时执行多部分解密和摘要操作。
两用加密函数 C_SignEncryptUpdate 持续同时执行多部分签名和加密操作。
两用加密函数 C_DecryptVerifyUpdate 持续同时执行多部分解密和验证操作。
密钥管理 C_GenerateKey 生成密钥。
密钥管理 C_GenerateKey对 生成公用或专用密钥对。
密钥管理 C_WrapKey 打包(加密)密钥。
密钥管理 C_UnwrapKey 解包(解密)密钥。
密钥管理 C_DeriveKey 从基本密钥派生密钥。
随机数生成 C_SeedRandom 将种子材料添加到随机数字生成器。
随机数生成 C_GenerateRandom 生成随机数据。 随机数据的长度不能为零,指向随机数据位置的指针不能为 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_DILITHIUM2
摘要。 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,M_AES_GEN
打包并解包。 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 Cryptotoki 函数 (例如 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")或另一个最终实体证书 ("其他实体")。 缺省值为 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_系数 用于 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_EXTRACTABLE 如果密钥可抽取且可封装,那么值为 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 mod p。 RSA 专用密钥
CKA_HASH_OF_ISSUER_PUBLIC_KEY 证书的签发者公用密钥的散列。 缺省值为空。 不适用
CKA_HASH_OF_SUBJECT_PUBLIC_KEY 证书的主题公用密钥的散列。 缺省值为空。 不适用
CKA_IBM_PQC_PARAMS 支持量子后密码机制的参数。 对于 Dilithium 机制 CKM_IBM_DILITHIUM,它提供了表示要使用的 Dilithium 算法强度的编组对象标识 (OID)。 目前,仅支持 Dilithium 4 round 2 的强度。 Dilithium 键
CKA_IBM_USE_AS_DATA 当 CK_TRUE 时,对象用于散列或密钥派生操作 EC 专用密钥,EC 公用密钥
CKA_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 密钥,通用密钥
可修改的 如果可以修改对象,请设置为 CK_TRUE。 EC 专用密钥,EC 公用密钥,RSA 专用密钥,RSA 公用密钥,DH 专用密钥,DH 公用密钥,DSA 专用密钥,DSA 公用密钥,AES 密钥,DES 密钥,通用密钥
CKA_模数 模数 n。 RSA 专用密钥
CKA_MODULUS_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_SUBJECT 证书或密钥主体名称的 DER 编码。 EC 专用密钥,EC 公用密钥,RSA 专用密钥,RSA 公用密钥,DH 专用密钥,DH 公用密钥,DSA 专用密钥,DSA 公用密钥
次贷 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 用于指示数据对象类型的对象标识的 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 与证书中包含的属性类型对应的对象标识值序列的 BER 编码。 存在此字段时,应用程序可以在不访存和解析证书本身的情况下搜索特定属性证书。(缺省值为空) 不适用

支持的曲线

对于某些机制,PKCS #11 库支持有限类型的曲线。 下表列出了不同机制的受支持曲线名称。 曲线名称中的数字表示受支持的主位计数。

用于生成椭圆曲线 (EC) 键的受支持曲线

当您调用 C_GenerateKeyPair 函数以生成椭圆曲线 (EC) 键时,支持机制 CKM_EC_KEY_PAIR_GEN。 必须使用 CKA_EC_PARAMS 将曲线名称参数指定为对象标识 (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
施诺尔-齐利卡 ECSG_IBM_ECSDSA_COMPR_MULTI
  • secp256r1
  • secp256k1
  • BP-256R,也称为 brainpoolP256r1
  • BP-256T,也称为 brainpoolP256t1

标准 PKCS #11 API 参考

要查看 PKCS #11 标准文档,请参阅: