Я использую Safenet HSM (аппаратный модуль безопасности) для хранения своих криптографических ключей и пытаюсь развернуть секретный ключ (AES / DES), зашифрованный с помощью RSA, с использованием API-интерфейсов Java и SunPKCS11. Я хотел бы сделать это безопасно, так чтобы развернутый ключ AES / DES не мог быть извлечен из HSM (например, значение закрытого ключа RSA невидимо). Однако после развертывания значение развернутого ключа отображается в объекте ключа вне HSM.
Вот мой код:
Key privateKey = keyStore.getKey("MyKeyId", keyStorePassword);
Cipher cipher = Cipher.getInstance("RSA", "SunPKCS11-Safenet");
cipher.init(Cipher.UNWRAP_MODE, privateKey);
Key unwrappedKey = cipher.unwrap(wrappedKey, "AES", Cipher.SECRET_KEY);
// At this point the unwrapped key is visible in the unwrappedKey object!
Как я могу сказать коду, чтобы он не показывал развернутый ключ? Нужно ли что-то добавлять в конфигурационный файл PKCS11? Я попытался добавить следующие параметры в файл конфигурации, но, похоже, это не помогло:
attributes(*,CKO_SECRET_KEY,*) = {
CKA_SENSITIVE=true
}
Я не уверен, ожидается ли раскрытие ключей во время развертывания от API. Если да, как я могу безопасно импортировать такие ключи в HSM, чтобы их нельзя было извлечь из него?
Я пытался обратиться в службу поддержки Safenet, но они не смогли ответить, почему это происходит. Поэтому, после долгих попыток поиска в Интернете, я задал этот вопрос здесь.