我想知道是否可以使用 AES_CMAC 机制进行密钥派生。
我有一个 AES 主密钥(密钥),我想生成一个 AES 密钥:key2 = AES_CMAC(key, data)。当然,我只想获得 key2 持有者,而不是价值。
当我这样做时:
public long derive_key(long key, byte[] data, String label) {
long p_key = -1L;
CK_MECHANISM mec = new CK_MECHANISM();
mec.mechanism = PKCS11Constants.CKM_AES_CMAC;
SecretKey keyTemplate = new AESSecretKey();
fill(keyTemplate, label);
((AESSecretKey) keyTemplate).getValueLen().setLongValue(16L);
((AESSecretKey) keyTemplate).getValue().setByteArrayValue(data);
CK_ATTRIBUTE[] attr = iaik.pkcs.pkcs11.objects.Object.getSetAttributes(keyTemplate);
return cryptoki.C_DeriveKey(ckiSession, mec, key, attr, true);
我收到 CKR_MECHANISM_INVALID 错误。
而且我不能使用 cryptoki.C_Sign(...) 因为它输出密钥值。
谢谢!