2011-01-04 3 views
4

.NETのRijndael/AES暗号化プロバイダを使用して暗号化機能を実装しました。アルゴリズムの私の「理解」は、KeyとIVが損なわれない限り、データは安全であることを示唆しています。しかし、私は塩漬けパスワードがベストプラクティスであるいくつかのサイトを読んだ。私にとっての混乱は、ハッシュ関数に基づく暗号化でのみ塩析が必要であるように見える場合に起こります。 RijndaelまたはAESを使用する際のベストプラクティスと、どの値を塩漬け(クリアテキスト、Key、IV)する必要がありますか?RijndaelまたはAES暗号化では塩分値は必須の良い練習ですか?

答えて

5

同じキーと同じIVを持つ異なるデータセットを暗号化する場合、同じクリアテキストは常に同じ暗号化テキストになります。複数のユーザーが同じパスワードを持っている場合、同じ暗号化されたパスワードを持ち、暗号化されたデータからはパスワードが同じであることが明らかになります。

すべての暗号化の前にクリアテキストに塩を追加すると、(通常)それぞれ異なる塩が使用されるため、同じパスワードで異なる暗号化文字列が生成されます。

したがって、すべてのパスワード暗号化に同じキーとIVを使用する場合、シナリオはハッシュ関数を使用する場合と同じで、塩を使用するのと同じ利点があります。暗号化ごとに異なるキーまたはIVを使用すると、同じパスワードで異なる暗号化テキストが生成され、これらの問題は発生しません。この場合、塩漬けは何も改善しません。

3

塩はハッシュにのみ意味があります。あらかじめ計算された辞書は使用できません。

暗号化に塩を使用する価値はありません。

+0

パスワードベースの暗号化(PBE)に暗号化を使用している場合、 –

3

IV は、の塩である。ネットワーク上で暗号文を送信するときや、暗号文をディスクに保存するときには、IVを暗号文の前に置くことは完全に安全です。メッセージが暗号化された強力な疑似乱数ジェネレータによって生成されることを確認します。

強い暗号化では、の秘密はのキーです。 IVは秘密ではなく、どちらも暗号文ではありません。

あなたは同じキーのために複数の暗号化(「セッションIV」)と同じ IV を使用している場合は、その後、あなたが鍵を保護するのと同じようにIVを保護する必要があります。

1

IVは一般の方には安全です。通常、暗号化操作ごとに新しいIVを生成する必要があります。毎回同じものを使用した場合、同じ暗号化された値に対して同じ暗号文を生成します。これは、WEP暗号化がややこしくなったやり方です。 (http://en.wikipedia.org/wiki/Initialization_vector)

暗号化しようとしている値をハッシュすることは、あまり役に立ちません。 IVはすでに暗号文にランダム化係数を導入しており、解読された値から塩を解析する必要はありません。

SLakが言及しているように、塩析はハッシュにのみ役立ちます。さらにこれを行うには、別のハッシュと比較してハッシュ関数に入れた値が同じ値であるかどうかを調べるハッシュにとって便利です。この塩は、人が行っていくつかの入力のハッシュ値をあらかじめ計算しておいた辞書攻撃(別名Rainbowテーブル)を防ぎます。塩とは、計算された表がすべての塩価に対して生成されなければならないことを意味する。

塩分の値はもっとありますが、これは一例です。

2

キーがパスワードから派生している場合、キー導出アルゴリズムには塩が含まれている必要があります。メインストリームのアルゴリズム(PBKDF2など)はそうです。

暗号化部分については、確立された操作モードにはいずれも、それ自体が塩に似ているIVが含まれています。暗号化する前にデータをさらにランダム化する必要はありません。

関連する問題