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