2009-05-02 7 views
-2

ハッシュの問題はすべてユーザーが15文字以上のパスワードを入力しないことです。ほとんどの場合、4〜8文字しか使用しないため、攻撃者が虹のテーブルで簡単にクラックすることがあります。アルティメットハッシュの保護 - 概念の考察

解決策は、ユーザー塩を使用してハッシュ入力を複雑にし、50chars以上にすることで決してテーブルを生成できないようにします。さらに、ユーザーごとに新しいテーブルを作成する必要があります。問題:データベースをダウンロードすると、ユーザーの塩が得られますので、十分注意が必要な場合は、正方形に戻ります。

解決策は、サイト "pepper"とユーザー塩を使用してください。それでもDBを取得しても、configファイルを知っている必要があります。問題:DBに入る可能性がある場合は、ファイルシステムに入り、サイトのペッパーを発見する可能性があります。

だから、これはすべて既知のものです。攻撃者があなたのサイトに入れて、すべてをすべて取得すると仮定することができます。では今何をしていますか?

この時点での議論では、ほとんどの人が「誰がこの点を気にしていますか?」と答えています。しかし、それはちょうど「私は次に何をするべきかわからないので、それほど重要ではない」という安価な方法です。悲しいことに、どこにいても私はこの質問に答えています。これは、ほとんどのプログラマーが非常に重要な点を見逃していることを示しています。

あなたのサイトは他の95%のサイトと同じように見えますが、ユーザーデータ(または完全に切断されたアクセス権)はスクワットに値するものではありません。攻撃者は、 "Bob"が銀行サイトで行っているのと同じパスワードをサイトで使用していることを知っているため、ユーザー "Bob"の後にいることがあります。彼はまたボブがそこに彼の人生の節約をしていることを知っている。さて、攻撃者がサイトのハッシュを解読できるのであれば、残りの部分はケーキになります。

ここに私の質問です - どのように追跡可能なパスなしでパスワードの長さを延長しますか?または、どのようにしてハッシュプロセスを複雑にして、適時に複製するのですか?私が思いついた唯一のことは、ハッシュを数千回再ハッシュして、最後のレインボーテーブルを1,000倍作成するのにかかる時間を増やすことができることです。これは、テーブルを作成するときに攻撃者が同じパスをたどる必要があるためです。

他のアイデアはありますか?

+1

これはすでに何度も議論されています。パスワードsaltに関する他のスレッドを参照してください。 –

+2

簡単な解決策:より長いパスワードが必要です。 – jalf

+0

必要なパスワードの長さが長すぎてユーザーに尋ねることができません。異なる記号などで15文字以上必要です。ほとんどのサイトは強力な8文字のパスワードを取得する運が良いです。 – Xeoncross

答えて

2

「私が思いついた唯一のことは、ハッシュを数千回再ハッシュして、最終レインボーテーブルを1,000倍作成するのにかかる時間を増やすことができることです。

これはBlowfishベースのBCryptハッシュについての正確なものではありませんか? brute force cracking(とrainbow tableの作成)が取り消し可能になるようにハッシュを計算するのにかかる時間が増えますか?

の詳細を適応コストのハッシュアルゴリズム "我々は適応コスト(...)との2つのアルゴリズムを提示":http://www.usenix.org/events/usenix99/provos.html

+0

送信したBCryptリンクは、ハッシュではなくファイル暗号化のためのものです。ただし、BCryptメソッドはハッシュアルゴリズムでも利用できます。問題は、MD5と同じくらい簡単にBcryptを使用してレインボーテーブルを生成できることです。あなたが言及しているのは、真実であるBCryptアルゴリズムをクラックするのは難しいという事実ですが、それを解こうとしているわけではありません。 – Xeoncross

+1

Blowfishには高価なキー設定があり、BCryptの基本ビルディングブロックとして使用されます。 BCyptは、計算コストがかかる設計です。したがって、ハッシュテーブルを構築するのには、たとえばMD5ハッシュテーブルを構築するよりもはるかに時間がかかります。 – Jacco

+0

はい、私はあなたが既にBCryptが複雑なアルゴリズムであることを知っていたと仮定していました。ちょうどSHA512の方がBCryptよりも時間がかかります。しかし、これらのアルゴリズムはすべて信じられないほど速く、PCは毎分数千から数十万のハッシュを作成することができます。つまり、どちらを選択したかによって、虹のテーブルを作成することは大したことではありませんパスワード。 – Xeoncross

1

どのように "唐辛子" のアイデアを取り、実装についてこれはパスワードをハッシュする専用のサーバー上にあり、可能性のあるこのシンプルで安全なサービスを除いてロックされています。このサーバへのアクセス権を取得するか、ペッパー、カスタムRNGおよびクリアテキスト拡張アルゴリズムをリバースエンジニアリングするかのいずれかを達成するために、攻撃者にもう1つの障害を与えます。もちろん

彼らはしばらくの間、彼らはちょうどevesdropユーザの活動上のことができるすべてへのアクセス権を持っている場合...

+0

これは実際には素晴らしいアイデアです。 +1 – Zifre

+0

はい、これは以前にも言及されています。しかし、私はほとんどの人にとってこの実装の実現可能性についてはわかりません。私は教えて、ボード全体の多くの人々が使用できるコンセプトを探しています。 また、あなたは正しいです。彼らがすべてにアクセスできる場合、サーバーに送信されたPOSTデータを監視して平文のパスワードを得ることもできます。 – Xeoncross

+0

システムにレイヤを追加することで、間違いの修正や新しいセキュリティホールの開きが増えます。 – Jacco

1

オーケー... uhmm、この上の私の感想:

  • あなたがすることはできません元のパスワードをハッシュから戻す。私はあなたのハッシュを持っている、私はそのハッシュに合うパスワードを見つけるかもしれないが、私は彼らがすべて塩漬けを使用すると仮定して、このパスワードを使用する他のサイトにログインすることはできません。実際の問題はここにはありません。
  • あなたの設定を取得するためにあなたのDBやサイトを取得した場合、あなたはとにかく戸惑いました。
  • 管理者アカウントやその他のスーパーアカウントでは、2番目の認証手段、特定のIP範囲へのログインを制限する、クライアント側SSL証明書などを使用してください。
  • 通常のユーザーの場合、あなたが自分のパスワードを使って行うことは、何らかの設定やデータベースに保存する必要があります。サイトを持っていれば、魔法のヘビ油もあります。
  • 強力なパスワードの制限が常に機能するとは限りません。いくつかのサイトでは、パスワードに数字が必要です。その結果、ほとんどのユーザーは通常のパスワードに1を追加します。

ここで達成したいことは完全にはわかりません。ユーザーのパスワードの前に塩を追加し、第二の認証手段で管理者アカウントを保護することは、ユーザーが適切なパスワードを選択しないことと、強制できないことを考えると、最良の方法です。

+0

あなたのポイントを最初からカバーしています。まず、パスワードを使用してログインできないという考え方にどのようになったのかよく分かりません。私はあなたがそれをもっと考え直さなければならないと思う。もう一度、私は自分のサイトがゴミ箱になっているのを心配していません。それは私が保護しようとしているユーザーです。第3に、これらの予防措置はユーザーのログインに関連しています。これは私たちが議論していることではありません。私たちはあなたのハッシュ、塩、胡椒を手に入れた攻撃者について話しています。次にBank of Americaを訪問し、最初の試行でBobと同じパスワードハッシュでログインします。第4に、このトピックのポイント - より良い方法を見つけることです。 – Xeoncross

+0

第5に、15人の英数字+記号パスワードより短く簡単なパスワードを入力する人が問題になります。 – Xeoncross

+0

私は人々があなたのサイトにログインできないと言っているわけではありません - 私はすでにそれが重要ではないということを言っています。また、バンク・オブ・アメリカは、重要な行為(通常は別の場所にある資金を移転するための第2の秘密番号)に対して適切な第2の認証手段を持つことを期待しています。私はあなたのサイトとデータベースの完全な盗難に耐えなければならず、塩漬けのハッシュよりもデータの安全性を維持しなければならないとは思えません。 –

6

ソリューションは、ハッシュ 入力をより複雑にするために、ユーザの塩を使用し、50chars上そう 彼らは が( 文字列サイズに大きなへの道)のテーブルを生成することができないだろうという。さらに、 のユーザーごとに新しいテーブルを作成する必要があります。問題:db をダウンロードした場合、彼らはユーザーの塩を取得するので、 がケアすれば正方形に戻って に戻ります。

この推論は誤りです。

レインボーテーブル(一般的な辞書攻撃の特定の実装です)は、時間のためにスペースを交換します。しかし、辞書(虹など)を生成するには多くの時間がかかります。それは複数のハッシュに対して使用できるときだけ価値があります。塩がこれを防ぐ。塩は秘密にする必要はなく、特定のパスワードに対しては予測できないようにする必要があります。これにより、攻撃者がその特定の塩のために生成された辞書を持つ可能性は無視できるほど小さい。

+0

も参照してください:http://stackoverflow.com/questions/348109/is-double-hashing-a-password-less-secure-than-just-hashing-it-once/348140#348140 – erickson

+0

私は恐れています間違っている。私はユーザーの塩を持っている場合は、0から12の値の虹のテーブルを生成する1日かそこらを費やすだけで、それぞれのユーザーの塩を追加する必要があります。ユーザーのハッシュがクラックしました。 – Xeoncross

+1

推測する必要はありません。なぜそれを証明しないのですか? saltとして "erickson"を使用し、パスワードを追加して、SHA-1の1回の繰り返しを使用します。たとえば、パスワードがABCDEFGHIJKLの場合、次のコマンドを使用できます。 'echo -n 'ericksonABCDEFGHIJKL' | openssl sha1'を実行してハッシュ "9c1121a99b6b5afeaa02684093f4c766f94212d2"を生成します。私は秘密のパスワードを選択しました。これは、salt "erickson"と共にSHA-1ハッシュ "0c67c6eb301bb6df94af524f98305cb2648d25eb"を生成します。 72時間以内に上記のアウトラインとして正しいハッシュを生成するパスワードを見つけることができれば、あなたの投稿を1週間アップアップします。 – erickson

-1

私は誰かが解決策を持っていることを望んでいましたが、悲しいことに私が最初に質問を投稿したときにそれほどうまくいきません。何もできることはないが、無駄なテーブルを生成する(またはブルートフォースする)ハッシュを生成するプロセス全体を遅くするために、時間のかかるアルゴリズムや1000を再ハッシュすることを見つけることはできないようだ。