さて、ハッシュの全体的な問題は、ユーザーが15文字を超えるパスワードを入力しないことです。ほとんどの場合、4〜8文字しか使用しないため、攻撃者はレインボーテーブルで簡単にクラックできます。
解決策として、ユーザーソルトを使用してハッシュ入力をより複雑にし、50文字を超えて、テーブルを生成できないようにします(そのサイズの文字列では大きくなります)。さらに、ユーザーごとに新しいテーブルを作成する必要があります。問題:彼らがデータベースをダウンロードした場合、彼らはユーザーソルトを取得するので、彼らが十分に気にかけているなら、あなたは正方形に戻ります。
解決策として、サイト「pepper」とユーザーソルトを使用します。そうすれば、DBを取得したとしても、構成ファイルを知っている必要があります。問題:彼らがあなたのDBに侵入する可能性がある場合、彼らはあなたのファイルシステムに侵入し、あなたのサイトのコショウを発見するかもしれません。
したがって、これらすべてがわかっているので、攻撃者がサイトに侵入し、すべてを取得したと仮定しましょう。それで、あなたは今何をしますか?
議論のこの時点で、ほとんどの人は「この時点で誰が気にしますか?」と答えます。しかし、それは「次に何をすべきかわからないので、それほど重要ではない」という簡単な言い方です。悲しいことに、他のどこでも私は答えであるこの質問をしました。これは、ほとんどのプログラマーが非常に重要な点を見逃していることを示しています。
あなたのサイトが他の95%のサイトと同じであり、ユーザーデータ(または完全なサーバーアクセスさえも)はしゃがむ価値がないことを想像してみましょう。攻撃者は、ユーザーの1人である「Bob」を追いかけています。これは、「Bob」が銀行のサイトで使用しているのと同じパスワードをサイトで使用していることを知っているためです。彼はまた、ボブがそこに彼の命の節約を持っていることを知っています。さて、攻撃者が私たちのサイトのハッシュをクラックすることができれば、残りは簡単なものになります。
だからここに私の質問があります-追跡可能なパスなしでパスワードの長さをどのように延長しますか?または、ハッシュプロセスを複雑にして、タイムリーに複製する方法を教えてください。私が思いついた唯一のことは、ハッシュを数千回再ハッシュして、最終的なレインボーテーブルを作成するのにかかる時間を1,000倍に増やすことができるということです。これは、攻撃者がテーブルを作成するときに同じパスをたどる必要があるためです。
他のアイデアはありますか?