6

HSM にマスター キーがあり、特定の多様化子を使用してそれを導出したいと考えています。私は JCA/JCE の初心者であり、KeyGenerator、SecretKeyFactory などで少し迷っています。特にすべてのパラメータが文字列であるためです。AES または HmacSha1 を使用したい。SecretKeyFactory を使用し、KeySpecs を提供する必要があるようです。しかし、どのタイプの KeySpec でしょうか?

(そのトピックに関する投稿を見たことがありますが、HSM が使用されているようには見えませんでした。)

ありがとう。

4

1 に答える 1

3

以下を使用してキーを導出できます。

JCA/JCE API から HSM を使用するには、対応するプロバイダーを JCA/JCE API に追加し、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());

鍵の導出を頻繁に行う必要がある場合は、プロバイダの Java 用 PCKS#11 ラッパー (SafeNet など) またはその他の API を使用して、セッション管理をより明確にし、リソースをより効率的に使用することを検討してくださいjcprov。利用方法。

于 2015-08-20T01:45:29.837 に答える