【问题标题】:Pkcs11Interop (C#) - Calculate HMAC Signature on Utimaco HSM SimulatorPkcs11Interop (C#) - 在 Utimaco HSM 模拟器上计算 HMAC 签名
【发布时间】:2025-11-25 08:10:02
【问题描述】:

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

【问题讨论】:

    标签: c# pkcs#11 pkcs11interop


    【解决方案1】:

    对于 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

    祝你的项目好运!

    【讨论】:

    • 谢谢!它适用于“CKK_GENERIC_SECRET”