根据最新的 PKCS#11 规范,RSA 私钥的典型属性结构如下:
CK_ATTRIBUTE template[] = {
{CKA_CLASS, &class, sizeof(class)},
{CKA_KEY_TYPE, &keyType, sizeof(keyType)},
{CKA_TOKEN, &true, 1},
{CKA_LABEL, label, sizeof(label)},
{CKA_SUBJECT, subject, sizeof(subject)},
{CKA_ID, id, sizeof(id)},
{CKA_SENSITIVE, &true, 1},
{CKA_DECRYPT, &true, 1},
{CKA_SIGN, &true, 1},
{CKA_MODULUS, modulus, sizeof(modulus)},
{CKA_PUBLIC_EXPONENT, publicExponent, sizeof(publicExponent)},
{CKA_PRIVATE_EXPONENT, privateExponent, sizeof(privateExponent)},
{CKA_PRIME_1, prime1, sizeof(prime1)},
{CKA_PRIME_2, prime2, sizeof(prime2)},
{CKA_EXPONENT_1, exponent1, sizeof(exponent1)},
{CKA_EXPONENT_2, exponent2, sizeof(exponent2)},
{CKA_COEFFICIENT, coefficient, sizeof(coefficient)}
};
但是,还有另一个属性CK_VALUE
只能用于创建 pkcs“数据对象”而不是“关键对象”。当我使用此字段CK_VALUE
创建关键对象时,PKCS 会抛出一个无效属性错误。我想在其中使用一个类似的字段,其中包含一个字符串格式的值,该值可以保存与密钥相关的元数据信息(如用于包装 RSA 密钥的 IV、密钥的生成日期等)。有没有办法将这些信息存储在现有的 pkcs11 模板中,而无需在实现中修改属性数据结构?我正在使用 OpenDNSSec 社区的 SoftHSM n2.0 包来实现 pkcs。
任何建议,将不胜感激。