加密操作 :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**>
。 平台为 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 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
进行标记。
类别 | 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 函数类别相关。
函数组 | 支持的机制 |
---|---|
加密和解密。 | 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_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")或另一个最终实体证书 ("其他实体")。 缺省值为 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_GenerateKey 或 C_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。
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 |
|
|
施诺尔-齐利卡 | ECSG_IBM_ECSDSA_COMPR_MULTI |
|
标准 PKCS #11 API 参考
要查看 PKCS #11 标准文档,请参阅: