0

我正在尝试在 java 中使用 Pkcs11 包装器计算 AES-MAC (RFC 4493)。并且似乎 hsm 发送了最后一个 AES-CBC 块,这不是预期的结果。这是我发送 PKCS11 请求的方式:

            CK_MECHANISM mec = new CK_MECHANISM();
                        
            mec.mechanism = Mechanism.AES_MAC_GENERAL.getMechanismCode();
            mec.pParameter = new MacGeneralParameters(16L).getPKCS11ParamsObject();
            
            cryptoki.C_SignInit(ckiSession, mec, key, true);
            Mac = cryptoki.C_Sign(ckiSession, data);

结果如下:

key                   = 00000000000000000000000000000000
data                  = 00000000000000000000000000000000
AES_CBC(key, data)    = 66E94BD4EF8A2C3B884CFA59CA342B2E
cmac(key, data)       = 66E94BD4EF8A2C3B884CFA59CA342B2E
expected cmac         = 763CBCDE81DF9131BF897712C088EDAD

你能帮忙解决这个问题吗?

谢谢!

4

1 回答 1

2

您的代码使用的AES_MAC_GENERAL是 CBC-MAC 机制(请参见此处此处)。

对于 AES-CMAC,您应该使用CKM_AES_CMAC/ CKM_AES_CMAC_GENERAL(请参见此处)。

请注意,您的 HSM 可能不支持此机制。

祝你的项目好运!

编辑>

我现在无权访问 IAIK 包装器,但是鉴于javadoc,您可能想尝试以下操作:

CK_MECHANISM mec = new CK_MECHANISM();
mec.mechanism = PKCS11Constants.CKM_AES_CMAC_GENERAL;
mec.pParameter = new MacGeneralParameters(16L).getPKCS11ParamsObject();
于 2021-02-01T21:42:07.917 回答