1

このような Python スクリプトは安全に使用できますか? ディスクには「theFile」というファイルがあります。

myPassHash = theFile.read()
enteredPassword = raw_input("Enter your password: ")
enteredHash = hashlib.sha512(enteredPassword)
if myPassHash == enteredHash:
    print "Correct!"
else:
    print "Incorrect!"
4

5 に答える 5

8

パスワードをソルトしていないため、これはレインボー テーブル攻撃の影響を受けやすいようです。

ソルトの詳細 (および、独自の認証メカニズムを展開するのが悪い考えである理由) については、 Eric Lippert のパスワード ソルティングに関する素晴らしいシリーズをお読みください。

于 2012-04-24T20:36:54.430 に答える
3

パスワードにハッシュ アルゴリズムを使用する場合は、おそらくソルトも使用する必要があります。ソルトに関するこの記事をご覧ください: http://www.codinghorror.com/blog/2007/09/youre-probably-storing-passwords-incorrectly.html

于 2012-04-24T20:36:45.717 に答える
2

SHA-2 のような汎用のハッシュ アルゴリズムをパスワードの保存に使用するべきではありません。ソルトはレインボー テーブルからあなたを守りますが、ブルート フォース攻撃からは守ってくれません。最近では、処理は安価で、クレジット カードを持っている人なら誰でも簡単に利用できます。また、データベースが侵害された場合、ソルトを使用しても、不適切なパスワードを簡単に解読できてしまいます。

パスワードを保存する目的で作成された特定のハッシュ関数があります。違いは、ハッシュを生成するために使用される暗号化アルゴリズムのサイクル数を調整できるため、それを行うのにどれくらいの費用がかかるか、またはどれくらい時間がかかるかです. これにより、はるかに高速なコンピューターが利用可能になった場合でも、ブルート フォース攻撃がはるかに困難になります。

そのうちの 1 つはbcryptで、ここで Python で利用できます。

>>> import bcrypt
>>> h = bcrypt.hashpw('lero', bcrypt.gensalt(10))
>>> j = bcrypt.hashpw('lero', bcrypt.gensalt(12))
>>> h
'$2a$10$FhdV1LfOPfxvHcwbWSZLiupbUL8i.som6GyqWue6VBwVgKK9cZcRi'
>>> j
'$2a$12$bgZ1eFD/VTGWUtA8jhnUcO7JjpIpBRjbNpQ9DcYQvtyQV4XsjAXU6'
>>> 

bcrypt.gensalt() の呼び出しは、生成されたハッシュの複雑さを決定します。ご覧のとおり、どちらもハッシュを生成しますが、bcrypt.gensalt(12) を使用した呼び出しの方が時間がかかります。コンピューターが高速になるにつれて、それを増やしてハッシュを時々再生成できるため、ブルート フォース攻撃は効果的ではなくなります。

于 2012-04-24T21:24:02.250 に答える
0

passlibを使用し、独自のパスワード暗号化/チェック コードを記述しないでください。

于 2013-03-14T02:04:38.093 に答える
0

このようなものをチェックしてください

http://net.tutsplus.com/tutorials/php/understanding-hash-functions-and-keeping-passwords-safe/

これは PHP ですが、同じことが当てはまります。最低でも塩は必要

于 2012-04-24T20:37:54.920 に答える