我在 HSM 中创建了一个 AES 密钥,我想获取密钥值,我尝试了 C_FindObjects 但它只返回密钥 hundel。
public long Find_AES_Key(String label) {
long hkey = -1L;
try {
AESSecretKey keyTemplate = new AESSecretKey();
keyTemplate.getLabel().setCharArrayValue(label.toCharArray());
CK_ATTRIBUTE[] attributes = iaik.pkcs.pkcs11.objects.Object.getSetAttributes(keyTemplate);
cryptoki.C_FindObjectsInit(ckiSession, attributes, false);
long[] found = cryptoki.C_FindObjects(ckiSession, 1L);
cryptoki.C_FindObjectsFinal(ckiSession);
hkey = found[0];
// cryptoki.C_GetAttributeValue(ckiSession, hkey, attributes, true);
}catch(Exception e) {
e.printStackTrace();
}
return hkey;
}
谢谢您的帮助。
这取决于您的 HSM,但在大多数情况下,如果密钥生成在 HSM 内部,则它们也不“可读”。
如果可能,您可以
Wrap
并使用 C_DeriveKey
/C_WrapKey
调用将其导出。
检查您密钥的
CKA_WRAP
属性。
大多数 HSM 使用 PKCS11 标准。当您创建 AES 密钥时,如果 CKA_SENSITIVE 为 FALSE,您可以使用 pkcs11admin 等开源工具或使用检索密钥值的小脚本来查看密钥的值。