Pkcs11Interop (C#) - 在 Utimaco HSM 模拟器上计算 HMAC 签名

问题描述

我必须在 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_SECRETCKK_SHA256_HMAC

祝你的项目好运!