塩は秘密ではないことを忘れないでください。暗号化されたデータに追加するだけです。塩のポイントは、暗号化されたファイルを「解読」する方法として、誰かが一般的なパスワードで暗号化された一般的なデータの事前に計算された辞書を使用するのを防ぐことです。
ソルトがランダムであることを確認し、それをパスワードと組み合わせることで、ハッカーが「ソルト+パスワード」で事前に暗号化されたデータのデータベースを持つ可能性が(事実上)ないため、辞書攻撃の可能性を排除します。(最初に、パスワードベースの暗号化のソルトについて、私のチュートリアルの1つからこのページを参照してください。)
また、(効果的に)衝突の問題を排除します。2つのファイルで同じパスワードを使用すると、両方のファイルで発生する同じデータブロックが暗号化されたバージョンで同じように見える場合、攻撃者にコンテンツの手がかりを与える可能性があります。
ただし、通常のパスワードには通常多くのエントロピーが含まれていないため、通常は他の予防策を講じる必要があります。。たとえば、8つの完全にランダムな小文字は、約40ビットのエントロピーを生成します。英語の典型的なパターンに従う8つの小文字は、約20ビットのエントロピーを生成します。言い換えると、2 ^ 256の可能なキーのうち、実際には、一般的なユーザーは2 ^ 20-2^40の範囲の小さな部分から選択します。精通したユーザーの場合、状況は少し良くなりますが、256ビットのエントロピーに近づく可能性はほとんどありません。(「パスフレーズ」では、1文字あたり約2.5〜3ビットのエントロピーがあることを考慮してください。したがって、30文字のパスフレーズでは約75ビットのエントロピーが得られます。正直なところ、何人の人が何かを使用していますか。 30文字のパスワードのように?;印刷可能なASCIIの「フル」範囲を使用する8つの完全にランダムな文字は、64ビット弱になります。)
この状況を少し緩和する1つの方法は、計算が複雑な一方向性関数を使用してパスワードを変換し(ソルトを追加)、ハッカーが推測したい各キーを試すのに少し時間がかかるようにすることです。繰り返しになりますが、詳細についてはこのページを参照してください。
パスワードベースのファイル暗号化の落とし穴の大まかなアイデアを提供するために、数年前に作成したArcmexerライブラリを確認することもできます。このライブラリにはisProbablyCorrectPassword()という名前のメソッドが含まれています。候補パスワードを生成するための辞書/アルゴリズムと組み合わせて、上記の方法の有効性を評価するために使用できます(ZIPファイルの暗号化はこれらの手法の組み合わせを使用するため)。