Как преобразовать iaik.pkcs.pkcs11.objects.GenericSecretKey в ключ java.security - PullRequest
0 голосов
/ 17 мая 2019

Я хочу преобразовать iaik.pkcs.pkcs11.objects.GenericSecretKey (AES) в ключ java.security.

1 Ответ

0 голосов
/ 18 мая 2019

Это, вероятно, невозможно, но давайте рассмотрим некоторые возможности, тем не менее.

Обратите внимание, что это зависит от типа токена и программного обеспечения / провайдера, если эти возможности поддерживаются вообще, но вы можете попробовать.


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


Объекты PKCS # 11, включая ключи, обычно хранятся в HSM или другом токене безопасности. Секретные ключи обычно не могут быть легко извлечены.

Вы также можете иногда извлекать ключи, устанавливая атрибут CKA_EXTRACTABLE в true (и CKA_SENSITIVE в false во время генерации. Это, конечно, также негативно повлияет на безопасность ключа. Если вы можете получить это сработает (в зависимости от реализации токена PKCS # 11), тогда вы сможете скопировать значение ключа в память.

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

Должно быть просто вызвать конструктор SecretKeySpec со значением, как только вы сможете его получить, чтобы преобразовать его в SecretKey.


Как правило, проще генерировать ключи локально (используя генератор случайных чисел токена HSM, где это требуется и доступно). Затем вы можете импортировать их и установить CKA_SENSITIVE на true впоследствии. Конечно, CKA_ALWAYS_SENSITIVE останется установленным на falseCKA_NEVER_EXTRACTABLE останется установленным на true), если вы сделаете это.


Безусловно, самый простой и безопасный способ сделать это - сгенерировать ключ, используя предоставленный провайдером KeyGenerator, исключая метод GenericSecretKey в вопросе, где он доступен. Тем не менее, это побочный вопрос.

...