単語を少しずつ分解してみましょう。
PBKDF2--WithHmac--SHA512
部分的に見ていきましょう
PBKDF2
PBKDF1 の後継である Password-based-Key-Derivative-Function の略で、入力パスワードまたはパスフレーズに暗号化ハッシュ、暗号、または HMAC などの疑似ランダム関数をソルト値とともに実装するために使用され、プロセスを繰り返します。その後の操作で暗号化キーとして使用できる派生キーを生成します。
HMAC
Keyed-Hash Message Authentication Code (HMAC) の略で、秘密の暗号化キーと組み合わせた暗号化ハッシュ関数を含むメッセージ認証コード (MAC) を計算するための特定の構造です。HMAC の計算には、任意の暗号化ハッシュ関数を使用できます。結果として得られる MAC アルゴリズムは、それに応じて HMAC-MD5 または HMAC-SHA1 と呼ばれます。
SHA512
まあ、あなたはそれについて知っています.. :P
さて、あなたの質問に戻って、コード行:
SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
アルゴリズムを使用する keyFactory を指定しますPDBKDF2WithHmacSHA1
。次のようなことをするとき:
SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA512");
ファクトリにアルゴリズムを使用するように指示しますPBDKF2WithHmacSHA512
。
PBKDF2WithHmacSHA1
基本的にとの主な違いPBKDF2WithHmacSHA512
は次のとおりです。
- は160 ビットのハッシュ長を生成し
PBKDF2WithHmacSHA1
ます。
- は512 ビットのハッシュ長を生成し
PBKDF2WithHmacSHA512
ます。
したがって、後者の方が安全です。しかし、どちらが暗号化に十分かについては、双方に議論があります。議論はありません。ただ言って。
2 つのアルゴリズムに関する追加情報:
HMACSHA1
HMACSHA1 は、SHA1 ハッシュ関数から構築され、HMAC またはハッシュベースのメッセージ認証コードとして使用されるキー付きハッシュ アルゴリズムの一種です。HMAC プロセスは、秘密鍵をメッセージ データと混合し、ハッシュ関数を使用して結果をハッシュし、そのハッシュ値を秘密鍵と再度混合してから、ハッシュ関数をもう一度適用します。出力ハッシュの長さは 160 ビットです。
HMACSHA512
HMACSHA512 は、SHA-512 ハッシュ関数から構築され、ハッシュベースのメッセージ認証コード (HMAC) として使用されるキー付きハッシュ アルゴリズムの一種です。HMAC プロセスは、秘密鍵をメッセージ データと混合し、結果をハッシュします。ハッシュ値は再び秘密鍵と混合され、2 回目のハッシュが行われます。出力ハッシュの長さは 512 ビットです。
主な利点は、HmacWith512
よりも安全であることですHmacWith256
。例えば
HMAC_SHA1("key","The quick brown fox jumps over the lazy dog") = 0xde7c9b85b8b78aa6bc8a7a36f70a90701c9db4d9
HMAC_SHA512("key","The quick brown fox jumps over the lazy dog") = 0xb42af09057bac1e2d41708e48a902e09b5ff7f12ab428a4fe86653c73dd248fb82f948a549f7b791a5b41915ee4d1ec3935357e4e2317250d0372afa2ebeeb3a
違いはかなり大きいです(ご覧のとおり)。それが役に立てば幸い。:)
編集: OPが言及しているように
PBEKeySpec(char[] password, byte[] salt, int iterationCount, int keyLength)
このパラメーターkeyLength
は、可変鍵サイズ暗号の鍵の長さの設定を示すために使用されます。実際のキー サイズは、各プロバイダーの実装によって異なります。したがって、次のようなことを言う
PBEKeySpec(password, salt, int 100, 512)
SHA1 を使用して 512 の keyLength を生成するという意味ではありません。単にそれを意味します。SHA1 は最大 160 ビットまでサポートします。それを超えることはできません。
2 番目の質問については、HMAC-SHA1 をご覧ください。SHA256
長いハッシュの場合、次のようなアルゴリズムは非常に優れていると言う多くのステートメントがあります。
また、NSAによると:
NSA は、「FIPS-186-2 および SHA-256 で指定されている 256 ビット素数モジュラス楕円曲線を使用する楕円曲線公開鍵暗号方式は、機密情報を SECRET レベルまで保護するのに適している」と指定しています。384 ビット素数の使用TOP SECRET情報の保護には、モジュラス楕円曲線とSHA-384が必要です。
SHA512 と組み合わせて HMAC 関数を使用すると、非常に安全だと思います。