4バイトを変更させれば、ファイルに必要なチェックサムを持たせることができると言っていた人を覚えています(CRC-32)。
ハッシュの塩漬けについての言及を聞きました。誰かが自分のファイルを私のファイルと一致させた場合、MD5 または SHA-1 ハッシュをソルトすると結果が変わり、両方のファイルが衝突しなくなるのではないかと思っています。それとも、終了ハッシュ値のみを変更しますか?
ハッシュ値の 2 つの異なる用途を混同しています。
ランダムな (悪意のない) エラーを防ぐためのチェックサム。
パスワード、署名メッセージ、証明書を保存するための暗号化メッセージ ダイジェストを計算しています...
CRC は最初のアプリケーションには適していますが、衝突を簡単に計算できるため、2 番目のアプリケーションにはまったく適していません (数学的に言えば、CRC は線形です)。これはあなたの友人が本質的にあなたに言っていることです。
MD5 と SHA1 は、2 番目の種類のアプリケーションを対象とした暗号化ハッシュです。ただし、MD5 はクラックされており、SHA1 は最近では弱いと考えられています。それでも、MD5 を解読することはできますが、MD5 の衝突を見つけるには長い時間がかかります (数日から数週間)。
ソルトに関しては、ランダムな非秘密値を混合することにより、暗号化ハッシュの計算をローカルにします。この値はソルトと呼ばれます。これにより、ハッシュ値から可能な値 (パスワードなど) を簡単に計算できるグローバル テーブルを計算できなくなります。テーブルの計算には非常にコストがかかりますが、salt がなければ、多くのクラックされたパスワードでコストが償却されます。
使用しているハッシュが CRC-32 でない場合、(CRC-32 に対する) 攻撃は無関係です - MD5とSHA-1はその種の攻撃に対して脆弱ではありません (まだ)。
MD5 に対する現在の攻撃では、攻撃者が同じハッシュを持つ 2 つのドキュメントを作成します。
ソルトはパスワードの検証に使用されます - 攻撃者がパスワード データベースに対してオフライン攻撃を実行するのを防ぎます - 各ユーザーのパスワードには、ハッシュ前に平文にソルトが添付されています - 次に、事前に計算された平文 <-> ハッシュされたテキストのレインボー テーブル役に立たない。
ハッシュ関数にソルトを追加しても、ダイジェスト関数が侵害された場合、実際には何の役にも立ちません。なぜなら、使用するにはソルトを公開する必要があり、攻撃者はファイルを調整してこれを考慮に入れることができるからです。
この問題の解決策は、安全なハッシュ関数を使用することです。MD5 はハッシュの衝突に対して脆弱であることが示されていますが、SHA-1 はそうではないと私は信じています (今のところ)。
辞書攻撃を避けるために、ソルティングは通常、パスワード ハッシュで使用されます。Web ベースの逆ハッシュ辞書がたくさんあり、ハッシュを入力すると (例: 1a79a4d60de6718e8e5b326e338ae533)、テキスト "example" が返されます。塩を使うと、これはほぼ不可能になります。パスワードの先頭にランダムなソルトを追加すると、辞書攻撃がより困難になります。
衝突に関しては、ファイル全体が同じ md5 または sha1 ハッシュを持つことを心配する必要はないと思います。大事なことじゃない。ハッシュの重要な用途は、受け取ったファイルが、そのファイルの権威者によって承認されたファイルと同じであることを証明することです。ファイルにソルトを追加する場合は、ユーザーがハッシュを検証できるようにソルトを送信する必要があります。
これにより、攻撃者は偽のファイルとともに偽のソルトを提供できるため、実際にファイルを偽装することが容易になります。ユーザーは通常、ファイルが本来の目的を果たさなくなっているため、ファイルが偽造されているかどうかを知ることができます。しかし、ユーザーはどのようにして正しいソルトと攻撃者のソルトの違いを知ることができるのでしょうか?