问题描述
我必须在 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_INVALID”
Utimaco 日志:“机制 CKM_SHA256_HMAC_GENERAL 不适合密钥 t。”
解决方法
对于 HMAC,您需要使用以下之一:
-
通用密钥 (
CKK_GENERIC_SECRET
) -
指定的 HMAC-SHA256 密钥 (
CKK_SHA256_HMAC
)
无法使用 AES 密钥 (CKK_AES
) -- 引用 PKCS#11 标准中的 HMAC mechanisms 部分:
HMAC 密钥应对应于 PKCS11 通用密钥类型或机制特定的密钥类型(参见机制定义)。可以使用 C_CreateObject 或 C_GenerateKey 创建此类用于 HMAC 操作的密钥。
只需将您的 HMAC 密钥生成或导入为 CKK_GENERIC_SECRET
或 CKK_SHA256_HMAC
。
祝你的项目好运!