プレーンテキスト ファイルに保存されたユーザー パスワードの機密性を確保する必要がある Java プロジェクトに取り組んでいます。
そのために、パスワードのハッシュのみをファイルに書き込みます。より具体的には、レインボー テーブルとルックアップ テーブルの使用を避けるために、パスワードのハッシュとランダム ソルト、およびランダム ソルト自体を作成することを意図しています。また、PBKDF2 でキーストレッチングを使用して、ハッシュの計算を計算コストの高いものにしたいと考えています。最後に、保護の最終層として鍵付きハッシュ アルゴリズム HMAC を使用したいと思います。
私は自分の考えを Java コードに実装しようとしていますが、上に示した操作の例をいくつか見つけました。
private static byte[] pbkdf2(char[] password, byte[] salt, int iterations, int bytes)
throws NoSuchAlgorithmException, InvalidKeySpecException
{
PBEKeySpec spec = new PBEKeySpec(password, salt, iterations, bytes * 8);
SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
return skf.generateSecret(spec).getEncoded();
}
私が本当に理解できないのは、関数への入力ではないように見えるため、HMAC アルゴリズムで使用されるキーとして秘密キーを入力する方法です。Java のドキュメントに目を通しましたが、質問に対する解決策が見つかりません。