【问题标题】:pkcs11 cmac calculation in javajava中的pkcs11 cmac计算
【发布时间】:2021-02-01 20:16:27
【问题描述】:

我正在尝试在 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

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

谢谢!

【问题讨论】:

    标签: java wrapper pkcs#11 hsm iaik-jce


    【解决方案1】:

    您的代码使用 AES_MAC_GENERAL 机制,它是一个 CBC-MAC(请参阅 herehere)。

    对于 AES-CMAC,您应该使用 CKM_AES_CMAC/CKM_AES_CMAC_GENERAL(请参阅 here)。

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

    祝你的项目好运!

    编辑>

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

    CK_MECHANISM mec = new CK_MECHANISM();
    mec.mechanism = PKCS11Constants.CKM_AES_CMAC_GENERAL;
    mec.pParameter = new MacGeneralParameters(16L).getPKCS11ParamsObject();
    

    【讨论】:

    • 谢谢,事实上。我认为 hsm(或 iaik 包装器)不支持 CMAC。我没有在 Mechanism 属性列表中找到 AES-CMAC。
    • @zero 查看我的更新答案以设置CKM_AES_CMAC_GENERAL 机制(CKM_AES_CMAC 不带参数也值得尝试)。 HSM 对特定机制的支持在供应商提供的文档中,可以使用C_GetMechanismList 进行查询。可能需要固件更新。
    • 非常感谢!!有用 !! (使用 CKM_AES_CMAC):D:D
    • 如果您不介意,我还有一个问题。您知道是否可以使用 PKCS11 使用同一 hsm 中的另一个密钥 k2 加密 hsm 中的密钥 k1 吗?
    • @zero 查看C_WrapKey 调用(here 是 IAIK 包装器 javadoc)。我很高兴它有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多