1

適度なセキュリティ要件を持つWebサービスを設計していたとします。ほとんどの場合、脅威モデルは退屈な大学生に関するものであり、スパイ小説でこれまでに見つけたものに関するものではありません。次のパスワードストレージスキームを使用することで、実際に何か問題がありますか?

塩|| ハッシュ(サイト||パスワード||ソルト)

ここで、siteはサイトの一意の識別子、passwordはユーザーパスワード、saltはユーザー固有のランダムソルト、hashはSHA-1などの汎用暗号化ハッシュ関数です。|| 連結を示します。

私はこのスキームを思い付く特定の問題を認識しています。

  • ハッシュは(高速に設計されて)評価が速く、1回の反復では、特定の弱いパスワードが推測可能になります。

  • 連結だけでは、ハッシュへの入力全体に「しゃれ」が発生する可能性があります。

現在、インターネット上に特定のセキュリティ専門家がいて、これが十分に優れたパスワードハッシュスキームの私の考えである場合、私はおそらく雇用に値することはできず、必死に学校に戻る必要があると信じさせます。彼らは、セキュリティの観点からはるかに優れたプロパティを持つよく知られたパスワードハッシュスキームがあることを指摘しています。彼らは私がもっと良いものに切り替えることを要求します。

しかし、本当に、私はすべきですか?ここに少し反論があります。

  • これはおそらく私のサービスの中で最も弱いリンクにはならないでしょう。本当に侵入しようと決心した人には他にもたくさんの道​​があります。私は自分の時間を優先して弱い道を確保する必要があります。

  • 私のサイトに本質的な価値がほとんどない場合、費用便益はすでに攻撃者の利益に反しています。大規模なクラスター/ボットネットが1日/週で弱いパスワードを回復する可能性があることは実際的な懸念のどれくらいですか?確かに、その日/週に行うことには、より価値のあることがあります。

  • トロイの木馬、キーロガー、ソーシャルエンジニアリング攻撃などが原因で、アカウントが侵害される可能性が高くなります。テクノロジーは、このセキュリティの制限要因ではありません。

  • 私のスキームが複雑になるほど、別のプラットフォームに移動/拡張するのが難しくなる可能性があります。私がbcryptを(仮に)使用した場合、bcryptラッパーを作成して組み込む必要がある可能性があります。

私はこのスキームが本当に好きです。とても簡単です。実装を間違えるのは難しいです。そして私は、平均的なサイトに関するすべての意図と目的のために、それは問題ないはずだと主張します。より良いハッシュスキームを導入するように私に頼むことは、チェーンソーに対してすでに非常に脆弱であるドアに大きなロックをインストールするように私に頼むように聞こえます。

私がここで何か間違ったことをしているとしたら、特に実際的で現実の世界に当てはまる懸念の観点から、誰かがそれを指摘してくれることを非常にありがたいです。

ありがとう。

4

2 に答える 2

2

データベースにアクセスできる場合のソルトとハッシュのポイントは何ですか?を参照してください。

ソルトは(一部の)レインボーテーブル攻撃を防ぎますが、辞書やブルートフォース攻撃を防ぎません。

代わりにScryptまたはbcryptを使用してください。Scryptははるかに強力ですが、どちらもプルーフオブワークシステムを使用して、パスワードの解読をはるかに困難にします。OWASPパスワードストレージのチートシートを参照してください

于 2011-08-20T22:01:32.100 に答える
0

純粋なハッシュの観点から、私があなたの質問を間違って読んでいない限り、あなたは通常のアプローチであるユーザー固有のランダムソルトと連結されたパスワードのハッシュを作成することを提案しています。十分な長さの暗号的にランダムな強力なソルトがすでにある場合、連結に含まれる追加のデータはそれほど大きな違いにはなりません。

次に、どのハッシュアルゴリズムが最も安全であるかについての古い議論があります。もちろん、bcryptは、適応型のネイティブであり、ブルートフォース攻撃を防ぐためにハッシュプロセス期間を延長できるため、SHA(特にMD5)のようなものよりも優先されます。

ただし、ほとんどの汎用Webサイトの場合、SHA1以上で十分であると実際的に主張することができます。最近見た違反を見ると、パスワードの開示は通常、プレーンテキストで保存されている場合(明らかに非常に脆弱)、またはソルトなしでハッシュされている場合(レインボーテーブルに対して簡単に脆弱)に発生しています。確かに、SHA派生物は(特に単一のハッシュの場合)処理が速くなりますが、暗号論的乱数ソルトと組み合わせると、簡単な作業ではありません。

適切な例:MicrosoftのASP.NETメンバーシッププロバイダーはSHA1を使用しており、非常に広く使用されています。ネイティブのbcryptサポートはありません(サードパーティのライブラリは利用可能ですが)。これはおそらく、Microsoftが問題をどのように見ているかについて何かを教えてくれるはずです。

最後に、パスワード強度の問題もあります。長く強力な要件を設定すると、多くのブルートフォース手法に対するハッシュの強度に明らかに貢献します。もちろん、使いやすさのトレードオフはありますが、それは別の問題です。

于 2011-08-21T01:27:42.750 に答える