1

そのため、Web アプリケーションを作成してパスワードを保存する場合は、セキュリティとパフォーマンスの両方に留意する必要があります。GPU の高速化により、ソルト化された SHA1 パスワードでさえも簡単にクラックできるという証拠を見たので、パスワードを保存するためのベスト プラクティスは何かと考えていました。

パスワードの保存にセキュリティを追加するために、ソルトに秘密を追加できると思いました。たとえば、このための Python コードは次のようになります。

import hashlib
import hmac

secret = 'XYZ'
h = hmac.new('salt' + secret, 'password')
  • これはよくあることですか?
  • これの欠点は何ですか?
  • この分野でのベストプラクティスは何ですか?

PS Web アプリケーション開発者の視点が必要なので、これをセキュリティ フォーラムに投稿しませんでした。

4

6 に答える 6

8

passlibもご覧ください:http://pypi.python.org/pypi/passlib/

于 2012-07-07T16:30:08.013 に答える
4

あなたはちょうどあなたの塩を少し長くしています...つまり、あなたの塩はsaltXYZただの代わりになりましたsalt.

私の見解では、これは通常の塩を使用することと何ら変わりがないため、最初の 2 つの質問は意味がありません。

ベストプラクティスに関する限り、最も重要なのは「自分の暗号を決して転がさない」ことです。そのようなことを処理するためによく知られているライブラリを使用してください。最近はbcryptが人気です。悪用されている可能性がありますが、訓練を受けた暗号分析者が毎日攻撃しているため、発見される可能性があります。

于 2012-07-07T13:55:23.923 に答える
3

原則として、同じ塩を何度も使用しないことです。たとえば、ユーザー名をソルトとして使用します。または、ランダムなソルトを生成して結果に追加します。

「秘密」を追加しても、実際には何も変わりません。それは単なる長いですが、まだ修正されたソルトであり、パスワードをチェックするサーバーに配布する必要があるため、実際にはそれほど秘密ではありませんよね?

于 2012-07-07T13:54:34.553 に答える
2

これは、Web アプリケーションでは非常に一般的なことです。ハッカーがデータベースを入手した場合、salt とそれが文字列のどこに配置されているかを知らなければ、好きなだけパスワードを検索できます。したがって、ハッカーが実際のパスワードを取得するには、コードとデータベース ダンプの両方が必要です。

塩を使用しない方法と比較して欠点は見られません。パフォーマンスはまったく同じですが、セキュリティは明らかに向上しています.

さらに、ソルトはエンコードするパスワードごとに異なる必要があります。十分な長さのソルトを選択する必要があります (長いほど良い)。

たとえば、ハッカーはソルトごとにパスワード テーブルを必要とします。これは、多くの計算を意味します。ソルトをデータベースに保存したとしても、ハッカーが非標準のソルトをハッキングするのは面倒です (標準のソルトは、ユーザー名に基づいたソルトにすることができます: adminroot ...)

詳細と説明については、この回答もご覧ください。

ただし、BCrypt のようなライブラリは暗号化に非常に優れており、有名なハッカーによってテストされることが多いため、信頼できると思います。

于 2012-07-07T13:53:18.873 に答える
1

シークレットを追加しても害はなく、一部のシナリオでは役立ちます。したがって、多層防御の手段として使用することをお勧めします。
しかし、パスワード ハッシュが意図されている主なシナリオでは、それは役に立ちません。サーバーが危険にさらされ、攻撃者がその秘密を知ることになります。

パスワード推測攻撃を防御するには、意図的に遅いハッシュ関数、つまり scrypt、bcrypt、および PBKDF2 のいずれかを使用する必要があります。

コードには 2 つの重要な弱点があります。

  1. あなたは塩を使っていません。ソルトはユーザーごとに異なる必要があります。標準的な方法は、64 ビット以上の乱数です。
  2. 単一反復 hmac は高速なので、前述の低速スキームのいずれかを使用してください。
于 2012-07-07T13:58:01.667 に答える
0

ベスト プラクティスについては、OWASP の Password Storage Cheat Sheetを参照してください。おそらく、他のチート シートも読みたいと思うでしょう。

于 2012-07-07T14:23:52.477 に答える