2014-01-15 6 views
5

Rfc2898DeriveBytesクラスのIterationCountプロパティの目的は何ですか。 MSDNはあまりにも多くの光を出すことはありませんが、推奨される最小値は1,000と言います。Rfc2898DeriveBytes IterationCountの目的とベストプラクティス

私が1,000に設定しようとすれば、なぜ1,000,000または1,000,000,000にならないのですか? 1,000の推奨の背後には理由がありますが、各ユースケースにどのような価値があるかを判断するためのベストプラクティスがありますか?

答えて

9

Rfc2898DeriveBytesは、PBKDF2を実装しています。このアルゴリズムでは、saltとkey stretchingを使用して、パスワードから比較的安全なキーを作成します(通常のパスワードはそれほど安全ではありません)。強制パスワードを強制するのを難しくするために、反復回数(鍵を作成するために追加された線形コストです)を使用します。コストは合法ユーザーと攻撃者の両方で同じですが、攻撃者はすべての可能なパスワードを反復処理する必要があります。

標準化された金額はありません。基本的には、CPUのパフォーマンスに関して許容できる値に設定します。 1000が推奨値であるが、その基準は数年前からある。現在では、最低約10Kから始める必要があります。+上記のようにすると、攻撃者は同じ「鍵」を生成するパスワードを見つけるのが難しくなります。

+ [EDIT] 反復の現在の推奨数を検索してください。ムーアの法則はまだ有効であり、PBKDF2自体はではないことを覚えておいてください。では反復回数に指数スケールを使用しています。他のパスワード処理ルーチンも安全であることを確認してください(パスワード強度フィードバック、最大再試行回数など)。

明らかに、より重要な鍵をよりよく保護する必要があります。本当に安全なパスワードを生成することは反復を追加するよりも影響が大きいことに注意してください - 良いパスワードと高い反復回数の両方を使用することはもちろん最善です。

+0

私はそれが膨大なテーマ(軽く置くこと)であり、おそらくこのフォーラムの範囲外であると理解していますが、反復中に何が起こったのか簡単に説明できますか?例えば。 「各反復中に「X」が発生し、結果として得られる鍵がそれよりずっと強くなります。 –

+3

@roryap簡略化するために、HASH(x)は1回の反復であり、HASH(HASH(HASH(x)))は3回の反復である。 PBKDF2はそれほど単純ではありませんが、基本的な考え方があります。 – ntoskrnl

+0

@ntoskrnl - ありがとう、私が探していたものです。あなたの答えをお寄せいただきありがとうございます。 –