我必须在Utimaco HSM模拟器上使用AES-256密钥生成HMAC(SHA256)签名。我使用pkcs# 11库"Pkcs11Interop"(c#)。我的源代码函数:
public static byte[] GetSignatureHmacSha256(IObjectHandle secretKeyHandle, byte[] message)
{
ICkMacGeneralParams macParams = Settings.Factories.MechanismParamsFactory.CreateCkMacGeneralParams(32);
IMechanism mechanism = session.Factories.MechanismFactory.Create(CKM.CKM_SHA256_HMAC_GENERAL, macParams);
byte[] signature = session.Sign(mechanism, secretKeyHandle, message);
return signature;
}
我得到这个错误消息。谁能帮帮我,我哪里做错了?
方法C_SignInit返回ckr_mechanism_invalidate
Utimaco Log:"机制CKM_SHA256_HMAC_GENERAL不适合key t.">
对于HMAC,您需要使用:
-
通用秘密密钥(
CKK_GENERIC_SECRET
) -
指定HMAC-SHA256密钥(
CKK_SHA256_HMAC
)
AES密钥(CKK_AES
)不能使用——引用pkcs# 11标准中的HMAC机制:
HMAC密钥应对应于PKCS11通用密钥类型或机制特定密钥类型(参见机制定义)。对于HMAC操作,可以使用C_CreateObject或C_GenerateKey创建这样的键。
只需生成或导入您的HMAC密钥为CKK_GENERIC_SECRET
或CKK_SHA256_HMAC
。
祝你项目顺利!