Как получить ключ с помощью JCA/JCE и с помощью HSM

У меня есть главный ключ в HSM, и я хочу получить его с заданным диверсификатором. Я новичок в JCA/JCE, и немного потерян с KeyGenerator, SecretKeyFactory, ... тем более, что все параметры являются строками. Я хочу использовать AES или HmacSha1. Кажется, мне нужно использовать SecretKeyFactory и предоставить KeySpecs. Но какой тип KeySpecs?

(Я видел пост на эту тему, но мне кажется, что HSM не использовался.)

Благодарю.

1 ответ

Вы можете получить ключ, используя:

Чтобы использовать HSM из API-интерфейсов JCA/JCE, необходимо добавить соответствующего поставщика в API-интерфейсы JCA/JCE, а затем указать provider параметр, чтобы запросить для этой конкретной реализации провайдера.

Например:

int slot = 0;
Provider provider = new au.com.safenet.crypto.provider.SAFENETProvider(slot);
Security.addProvider(provider);
final String PROVIDER = provider.getName(); // "SAFENET", "SAFENET.1", ...

KeyGenerator keyGen = KeyGenerator.getInstance("DESede", PROVIDER);
Key baseKey = keyGen.generateKey();

Cipher desCipher = Cipher.getInstance("DESede/CBC/PKCS5Padding", PROVIDER);
desCipher.init(Cipher.ENCRYPT_MODE, baseKey);

byte[] derived = desCipher.doFinal("diversification data".getBytes());

Обратите внимание, что если вам нужно делать вывод ключей очень часто, вы можете использовать оболочку PCKS#11 вашего провайдера для Java (например, jcprov от SafeNet) или других API, чтобы вы могли быть более понятными в отношении управления сессиями и более эффективно использовать ресурсы.

Другие вопросы по тегам