我正在尝试用java中的Pkcs11包装器来计算AES-MAC (RFC4493)。而且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你能帮我解决这个问题吗?
谢谢!
发布于 2021-02-02 05:42:08
您的代码使用CBC-MAC的AES_MAC_GENERAL机制(请参阅here和here)。
对于AES-CMAC,您应该使用CKM_AES_CMAC/CKM_AES_CMAC_GENERAL (参见here)。
请注意,您的HSM可能不支持此机制。
祝你的项目好运!
EDIT>
我现在还不能访问IAIK wrapper,但是考虑到javadoc,你可能想尝试一下:
CK_MECHANISM mec = new CK_MECHANISM();
mec.mechanism = PKCS11Constants.CKM_AES_CMAC_GENERAL;
mec.pParameter = new MacGeneralParameters(16L).getPKCS11ParamsObject();https://stackoverflow.com/questions/65999536
复制相似问题