Rijndael CBCモードを使用している場合、なぜソルトが必要になるのかわかりません。私が理解しているのは、パスワードを知っていても、IVなしではデータを取得できないことです。したがって、私の見解では、パスワード+ IVは十分に安全なようです。
何か問題が発生しますか?
はい、これらすべてが必要です。
ソルト(および「反復回数」)は、パスワードからキーを導出するために使用されます。詳細については、PKCS#5を参照してください。鍵の導出に使用されるソルトと反復回数は秘密である必要はありません。ただし、塩は予測不可能である必要があり、ランダムに選択するのが最善です。
CBCモードには初期化ベクトルが必要です。これは、暗号化乱数ジェネレータによって各メッセージに対して生成されるランダムデータのブロックです。これは、暗号文のダミーの初期ブロックとして機能します。鍵派生ソルトと同様に、秘密にしておく必要はなく、通常は暗号文とともに送信されます。
パスワードとそれから派生したキーは秘密にしておく必要があります。攻撃者が鍵の導出と暗号化のパラメータ、および暗号文を持っている場合でも、攻撃者は鍵なしでは何もできません。
更新:
パスワードはランダムに選択されません。一部のパスワードは、他のものよりもはるかに可能性が高いです。したがって、攻撃者は、指定された長さのすべての可能なパスワードを生成する(徹底的な総当たり検索)のではなく、確率の低い順に並べられたパスワードのリストを保持します。
パスワードから暗号化キーを取得するのは比較的遅いです(キー導出アルゴリズムの反復により)。数百万のパスワードのキーを取得するには、数か月かかる場合があります。これにより、攻撃者はパスワードの可能性が最も高いリストからキーを1回取得し、結果を保存するようになります。そのようなリストを使用すると、キーを再度導出するために数か月のコンピューティング時間を費やすのではなく、リスト内の各キーを使用してすばやく復号化を試みることができます。
ただし、ソルトの各ビットにより、派生キーを格納するために必要なスペースが倍になり、考えられる各パスワードのキーを取得するのにかかる時間が2倍になります。数バイトのソルト。そのようなリストを作成して保存することはすぐに実行不可能になります。
ソルトは、計算前の攻撃を防ぐために必要です。
IV(またはカウンターモードのノンス)では、同じプレーンテキストで異なる暗号テキストが生成されます。これにより、攻撃者がプレーンテキストのパターンを悪用して、一連の暗号化されたメッセージから情報を取得するのを防ぎます。
メッセージ内のパターンを非表示にするには、初期化ベクトルが必要です。
1つはキーのセキュリティを強化する役割を果たし、もう1つはそのキーで暗号化された各メッセージのセキュリティを強化します。両方が一緒に必要です。
まず最初に、RijndaelはCBCモードで「パスワード」を持っていません。 CBCモードのRijndaelは、暗号化または復号化するためのバッファー、鍵、およびIVを受け取ります。
「塩」は通常、パスワードの暗号化に使用されます。 saltは、暗号化されて暗号化された値で保存されるパスワードに追加されます。これは、誰かがすべてのパスワードを暗号化する方法の辞書を作成するのを防ぎます---すべてのパスワードをすべてのソルトで暗号化する方法の辞書を作成する必要があります。これは、12ビットのソルトのみを使用していた古いUnixパスワード暗号化アルゴリズムで実際に可能でした。 (作業係数が4096増加しました)。 128ビットのソルトでは不可能です。
もちろん、暗号化されたパスワードを取得できれば、誰かが特定のパスワードに対してブルートフォース攻撃を仕掛けることは可能です。
ただし、IVがあります。IVは、Saltとほとんど同じことを行います。両方は必要ありません。または、むしろ、IVはあなたの塩です。
ところで、最近では「ラインダール」をAESと呼んでいます。
ハッシュアルゴリズム を使用する場合、一般的に salt が使用されます。 Rijndaelはハッシュではなく、双方向 暗号化アルゴリズム です。 Ergo、ソルトはデータの暗号化に必ずしも必要ではありません。そうは言っても、パスワードのソルトハッシュは、データを暗号化するためのキーとして使用できます。あなたが探しているものについては、あなたは hybrid cryptosystems を見たいかもしれません。
IVは暗号化されたデータとともに送信される可能性がありますが、キーは秘密であると見なされ、暗号化されたデータとともに送信されることはありません。