Развертывание зашифрованного RSA-ключа AES с использованием Safenet HSM и Java приводит к утечке развернутого ключа - PullRequest
0 голосов
/ 07 сентября 2018

Я использую 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, но они не смогли ответить, почему это происходит. Поэтому, после долгих попыток поиска в Интернете, я задал этот вопрос здесь.

1 Ответ

0 голосов
/ 20 октября 2018

Если вы развернете ключ ... вы вернете ключ. т. е. распаковка ключа обнажает ключ. Если вы просите HSM развернуть ключ, он делает то, что вы ему сказали.

Возможно, вы захотите импортировать ключ вместо этого, если HSM поддерживает эту операцию. Предположение об импорте ключей заключается в том, что HSM понимает формат, в котором ключ был упакован для безопасности / защиты / транспорта.

Затем он сделает развертывание за вас и сохранит развернутый ключ в своей базе данных. Может быть, тогда он вернет вам ключ как дескриптор , или как ключ с другой оболочкой (т. Е. Обернутый с использованием своего внутреннего главного ключа).

Перемещение ключа между сопоставимыми модулями HSM - это экспорт / импорт или резервное копирование / восстановление, в зависимости от устройства и понимания устройствами этих глаголов.

Перемещение ключа между модулями HSM разных поставщиков или различными криптосистемами, без раскрытия секретов - интересное упражнение.

...