30

Java の暗号化とハッシュの世界を掘り下げると、およびパラメーターPBEKeySpecにさまざまな値を持つクラスのコンストラクターの例が表示されます。これらのパラメーターが何に影響を与えるか、または意味するかを説明するものはないようです。iterationCountkeyLength

keyLengthキーの長さは32ビット暗号化がキーの長さとして32の値を取ると仮定していますが、その仮定は間違っているように感じます。私の推測でiterationCountは、各文字が暗号化された回数ですが、その仮定にも愛情を感じていません。

情報または説明へのリンクを歓迎します。

4

1 に答える 1

45

反復回数は、対称キーの導出中にパスワードがハッシュされる回数です。数字が大きいほど、推測されたパスワードを検証して正しいキーを導き出すことが難しくなります。レインボーテーブルを使った攻撃を防ぐソルトと合わせて使用​​する。反復回数は、システムの速度をあまり低下させずに、できるだけ高くする必要があります。反復回数のより一般的な用語は作業係数です。

キーの長さは、派生対称キーのビット単位の長さです。DESede キーの長さは、パリティ ビットを含めて 128 ビットまたは 192 ビットのいずれかです。AES キーの長さは 128、192、または 256 ビットです。問題は、キーの長さ (ビット/バイト、パリティの有無) が意味する API によって指定されていないことです。鍵のPBEKeySpecサイズは、このセクションで示されているように、パリティ ビットを含むビットです。

鍵導出関数は通常、「十分な」ランダム ビットを出力するだけなので、必要な鍵サイズを指定できるのはそのためです。


ノート:

  • 詳細については、標準をご覧ください。PKCS 標準は比較的読みやすい傾向にあります。
  • ソルトは一意である必要があります。一般に、これは、安全な乱数ジェネレーターを使用して 64 ~ 256 ビットの完全にランダムなソルトを作成することによって実現されます (Java の場合は、 と を使用することを意味しますnew SecureRandom()) nextBytes(int amount)。ソルトは公開して、暗号文またはパスワード ハッシュと共に保存できます。
  • キー サイズにハッシュの出力サイズ (デフォルトでは SHA-1、160 ビットの出力サイズ) より大きい値を指定すると、(PBKDF1 の場合) 失敗するか、(PBKDF2 の場合) 速度がさらに低下する可能性があります。お勧めしません。アルゴリズム仕様でSHA-256、SHA-512などのハッシュ関数を使用するだけです。
  • SHA-1 (SHA-0 が使用されなかったため、単に SHA と呼ばれることもあります) やMD5 でさえ、この種の機能に対しては完全に安全ですが (衝突耐性に依存しないため)、次のようなより安全なオプションを使用する必要があります新しいプロトコルの SHA-256 または SHA-512 として。
于 2011-05-26T12:22:51.487 に答える