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

  • 如果密钥支持密钥派生,则CK_TRUE。

  • 这个属性用于从输入的密钥中导出另一个密钥。对于所有公钥来说,这个属性必须是FALSE,不能设置为TRUE。

  • 对于密文和EC私钥,可以是TRUE或FALSE。更多细节见CKA_DERIVE。

FALSE

CKA_TRUSTED

  • 只能由CO设置为TRUE或FALSE。

  • 对于创建的应用程序来说,该密钥可以被信任。

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设置为TRUE,但设置为TRUE后不能改变。

  • 如果该密钥只能被设置为CK_TRUE的封装密钥所封装,则CK_TRUE。

取决于初始值

FALSE

CKA_DESTROYABLE

  • 可以设置为TRUE或FALSE。

  • 如果该对象可以被销毁,则CK_TRUE。

使用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。