PKCS #11library表包含了一个因密钥类型而异的属性列表。它指出了在使用HSM的特定加密功能时,特定的属性是否支持某个特定的密钥类型。
属性 | 描述 | 可以在对象创建后改变吗? | 默认值 |
CKA_SIGN | 布尔类型,如果密钥支持签名,则CK_TRUE。 | 是 | FALSE |
CKA_VERIFY | 布尔类型,如果密钥支持验证,则CK_True。 | 是 | FALSE |
CKA_ENCRYPT | 布尔类型,如果密钥支持加密,则CK_TRUE。 | 是 | FALSE |
CKA_DECRYPT | 布尔类型,如果密钥支持解密,则CK_TRUE。 | 是 | FALSE |
CKA_WRAP | 布尔类型,如果密匙支持包装,则CK_TRUE。 | 是 | FALSE |
CKA_UNWRAP | 布尔类型,如果密钥支持解包,则CK_TRUE。 | 是 | FALSE |
CKA_LABEL | 对象的描述 | 是 | NA |
CKA_ID | 字节数组;键的标识符。 | 否 | NA |
CKA_CHECK_VALUE | 字节数组;密钥校验码。 | 否 | NA |
CKA_CLASS | 对象类 | 否 | NA |
CKA_LOCAL | 布尔类型,如果密匙是在本地生成的,则为真。 | 否 | True |
CKA_EXTRACTABLE | 布尔类型,如果密钥是可提取的并且可以被包装,则为TRUE。 | 否 | TRUE |
CKA_EC_PARAMS | 否 | NA | |
CKA_EC_POINT(only for create public key) | 否 | NA | |
CKA_PRIVATE_EXPONENT (only for create private object) | 私密指数d。 | 否 | NA |
CKA_SENSITIVE | 如果密钥是敏感的,则为TRUE。 | 是 | TRUE |
CKA_DERIVE |
| 是 | FALSE |
CKA_TRUSTED |
| 是 | FALSE |
CKA_NEVER_EXTRACTABLE | 返回HSM设置的值。 | 否 | TRUE for private and secret keys |
CKA_ALWAYS_SENSITIVE | 如果密钥一直有CK_SENSITIVE属性被设置为CK_TRUE,则CK_TRUE。 | 否 | TRUE |
CKA_WRAP_WITH_TRUSTED |
| 取决于初始值 | FALSE |
CKA_DESTROYABLE |
使用C_DestroyObject。注意:这个属性不适用于会话密钥。这是对规范的一种偏离。 | 是 | TRUE |
CKA_WRAP_TEMPLATE | 用于封装密钥。与任何使用该封装密钥封装的密钥匹配的属性模板。不匹配的密钥不能被封装起来。 更多信息参见CKA_WRAP_TEMPLATE。 | 是 | Not defined |
CKA_UNWRAP_TEMPLATE | 用于封装密钥。应用于任何使用此封装密钥解开的密钥属性模板。任何用户提供的模板都会在此模板之后应用,就像该对象已经被创建一样。 更多信息参见CKA_UNWRAP_TEMPLATE。 | 是 | Not defined |
属性有具体的表现,详情如下:
CKA_NEVER_EXTRACTABLE
CKA_ALWAYS_SENSITIVE
CKA_WRAP_TEMPLATE
CKA_UNWRAP_TEMPLATE
CKA_DERIVE
CKA_NEVER_EXTRACTABLE
CKA_NEVER_EXTRACTABLE属性根据密钥的历史记录来追踪 密钥的CKA_EXTRACTABLE属性的历史。它是一个只读的属性,不能由任何用户作为创建/生成模板的一部分来设置。
CKA_ALWAYS_SENSITIVE
CKA_ALWAYS_SENSITIVE属性是根据密钥的CKA_SENSITIVE属性的历史来追踪的。 CKA_SENSITIVE属性的历史,不能由用户作为导入/生成模板的一部分来设置,这是一个只读属性。
CKA_WRAP_TEMPLATE
CKA_WRAP_TEMPLATE属性只适用于封装密钥。它指定了一个属性模板,该模板必须与要封装的密钥的属性相匹配,如果不匹配,封装操作将失败。
默认是空的,避免有一个单一的封装密钥被用来封装所有的密钥。
CKA_WRAP必须为 "true "才能使用这个属性。
下表列出了作为CKA_WRAP_TEMPLATE操作的一部分所支持的子属性。 CKA_WRAP_TEMPLATE的一部分,支持操作C_GenerateKeyPair, C_GenerateKey和C_CreateObject:
支持的子属性 | HSM 接受的输入 |
CKA_CLASS | 接受私人和保密类的。 |
CKA_KEY_TYPE | 根据密钥类型接受。 |
CKA_LOCAL | 如果是TRUE或FALSE,则接受。 |
CKA_TOKEN | 如果是TRUE或FALSE,则接受。 |
CKA_PRIVATE | 如果是TRUE或FALSE,则接受。 |
CKA_ENCRYPT | 如果是TRUE或FALSE,则接受。 |
CKA_DECRYPT | 如果是TRUE或FALSE,则接受。 |
CKA_DERIVE | 如果是TRUE或FALSE,则接受。 |
CKA_DESTROYABLE | 如果是TRUE或FALSE,则接受。 |
CKA_SIGN | 如果是TRUE或FALSE,则接受。 |
CKA_VERIFY | 如果是TRUE或FALSE,则接受。 |
CKA_WRAP | 如果是TRUE或FALSE,则接受。 |
CKA_UNWRAP | 如果是TRUE或FALSE,则接受。 |
CKA_SENSITIVE | 如果是TRUE或FALSE,则接受。 |
CKA_ALWAYS_SENSITIVE | 如果是TRUE或FALSE,则接受。 |
CKA_MODULUS_BITS | 接受1024到4096之间的值。 |
CKA_VALUE_LEN | 适用于保密密钥,接受1到800之间的值。 |
CKA_WRAP_WITH_TRUSTED | 如果是TRUE或FALSE,则接受。 |
CKA_TRUSTED | 如果是TRUE或FALSE,则接受。 |
CKA_UNWRAP_TEMPLATE
CKA_UNWRAP_TEMPLATE只适用于解封装的密钥。在一个解封装操作中,一个带有CKA_UNWRAP_TEMPLATE属性的模板可以被预置到每个被解封装的密钥的模板中,只要与每个密钥没有冲突。 一个CKA_UNWRAP_TEMPLATE属性可以被预置到每个被解封装的密钥的模板上,只要与用户定义的模板没有冲突。
默认为空。
CKA_UNWRAP必须为TRUE才能使用这个属性。
下表列出了作为CKA_UNWRAP_TEMPLATE操作的一部分所支持的子属性。CKA_UNWRAP_TEMPLATE的一部分,支持操作C_GenerateKeyPair, C_GenerateKey和C_CreateObject:
支持的子属性,固件读取接受的输入值 | |
CKA_CLASS | 只接受私人和密文类。 |
CKA_KEY_TYPE | 接受基于密钥类的。 |
CKA_TOKEN | 如果是TRUE或FALSE,则接受。 |
CKA_PRIVATE | 如果是TRUE或FALSE,则接受。 |
CKA_ENCRYPT | 如果是TRUE或FALSE,则接受。 |
CKA_DECRYPT | 如果是TRUE或FALSE,则接受。 |
CKA_DERIVE | 如果是TRUE或FALSE,则接受。 |
CKA_DESTROYABLE | 如果是TRUE或FALSE,则接受。 |
CKA_SIGN | 如果是TRUE或FALSE,则接受。 |
CKA_VERIFY | 如果是TRUE或FALSE,则接受。 |
CKA_WRAP | 如果是TRUE或FALSE,则接受。 |
CKA_UNWRAP | 如果是TRUE或FALSE,则接受。 |
CKA_SENSITIVE | 如果是TRUE或FALSE,则接受。 |
CKA_EXTRACTABLE | 如果是TRUE或FALSE,则接受。 |
CKA_MODULUS_BITS | 接受1024和4096之间的值。 |
CKA_VALUE_LEN | 适用于保密密钥。接受1到800之间的值。 |
CKA_WRAP_WITH_TRUSTED | 如果是TRUE或FALSE,则接受。 |
CKA_DERIVE
CKA_DERIVE属性用于从输入的密钥中派生出另一个密钥。这个属性对所有公钥来说必须是FALSE,不能设置为TRUE。对于密文和EC私人钥匙,它可以是TRUE或FALSE。