5

読んで調査した後の私の理解では、ソルトを使用する目的は、保存されるパスワードごとに異なるソルトであると想定されています。

すべてのパスワードの保存に同じソルトが使用されている場合、ソルトを定数のプライベート変数に保存して使用するだけでよいため、これを実装する方法を理解できます。しかし、そうではありません。

すべての新しいパスワードを新しい異なるソルトで保存することは完全に理にかなっていますが、どのユーザーのパスワードがどのソルトに関連付けられているかをどのように知ることができるでしょうか? 私が考えた簡単な解決策は、おそらく「ソルト」と呼ばれるユーザーのテーブルプロパティとともにソルトを保存することでしたが、ソルトを見つけるのが簡単すぎる場合、最初からソルトを保持するという目的も失われます。データベース。

誰でもこれについてアドバイスできますか?

注: Python 組み込みライブラリ ( hashlib ) または Bycrypt ( CryptacularまたはPasslib )のいずれかを使用しています。

4

3 に答える 3

7

私が考えた簡単な解決策は、ソルトをユーザーのテーブルプロパティとともに保存することでした

それはまさにあなたがすることです。塩を知っていても、その利点が損なわれることはありません。

  • データベース内の同一のパスワードは、異なるハッシュを持ちます。
  • レインボー テーブルは機能しません。
  • 任意のハッシュと照合しようとするブルート フォース攻撃の速度が低下します。
于 2012-06-16T16:54:17.637 に答える
1

を使用している場合はcryptacular.bcrypt.BCRYPTPasswordManager、塩について心配する必要はありません。ハッシュを使用してソルトを生成および保存します。

同じパスワードに対してハッシュ文字列が異なることが以下でわかります。塩が使われたことを意味します。

例:

>>> import cryptacular.bcrypt
>>> crypt = cryptacular.bcrypt.BCRYPTPasswordManager()
>>> crypt.encode('aaa')
'$2a$10$B0czYdLVHJG4x0HnEuVX2eF7T9m1UZKynw.gRCrq8S98z84msdxdi'
>>> crypt.encode('aaa')
'$2a$10$Ni7K.pQoal3irbGmREYojOYoi0lye/W0Okz7jqoynRJhW5OCi8Upu'
于 2013-03-03T21:24:44.830 に答える
0

いいえ、パスワードの目的は単純な辞書攻撃を避けることだけです。TMHO 多くのアプリケーションでは、すべてのパスワードに使用されるハッシュは 1 つだけです。

たとえば、神、太陽、愛が一般的なパスワードだとしましょう。攻撃者はこれらの単語を含む辞書を持つことができ、ハッシュがあります。

ハッシュ (パスワード) を格納する代わりに、ハッシュ (パスワード + ソルト) (またはハッシュ (ソルト + パスワード)) を格納すると、この辞書攻撃を無効にすることができます。辞書に 'dza$^"é)àùgod が含まれている確率は 0 になる傾向があります。

入力ごとにソルトを変更することも良い方法ですが (あまり一般的ではないと思います)、パスワードを確認するにはソルトを取得する方法を見つける必要があります。

于 2012-06-16T16:57:54.910 に答える