2016-04-01 4 views
1

ユーザーパスワードのハッシュをsha256_crypt.encrypt("secretUserPassword")で作成し、ハッシュにスラットを追加せずにデータベースに保存するかどうかを保存しますか?sha256_cryptで暗号化されたパスワードを保存するが、追加の塩を使わないで保存する

もしそうなら、何が虹のテーブル攻撃に対するハッシュを保護しますか?

これは私が自分のWebアプリケーションに新しいユーザーを作成し、それをデータベースに保存する方法です:

admin = User() 
admin.name = 'admin' 
admin.password = sha256_crypt.encrypt("secretAdminPassword") 
db.persist_user(admin) 

これは私が資格情報をチェックして、ユーザー

username = request.form['username'] 
password = request.form['password'] 
user = user_from_db(username) 
if sha256_crypt.verify(password, user.password): 
    login_user(user) 
+2

[the docs](https://pythonhosted.org/passlib/lib/passlib.hash.sha256_crypt.html)によれば、塩は自動的に追加されます。だから私はその罰金を推測する。 – Schore

+2

一方、塩はセキュリティを追加するものではありません。その目的は、同一のパスワードが同じハッシュを生成しないようにすることです。この保護が有用ではない状況を想像するのは難しいですが、孤立しても、SHA256暗号化のセキュリティはまったく向上しません。 – tripleee

+0

@トライプルー - これは、主な目的ではなく、塩漬けの副作用です。各パスワードに固有の塩は、一度にすべてのパスワードを取得するために1つの単一のレインボーテーブルを構築することを防ぎます。代わりに、パスワードごとに虹のテーブルを作成する必要があります。そのため、この方法は実用的ではありません。 – martinstoeckli

答えて

1

documentationログイン方法ですsha256_crypt.encrypt("password")は、SHA-256ハッシュを計算するだけでなく、それも...

  1. 自動的に塩を追加して両方のポイント

をハッシュの多くのラウンドは、安全なパスワードのハッシュ関数を得るために不可欠ですありません。暗号で安全な塩を作るにはいくつかの落とし穴がありますので、それを図書館に残すことをお勧めします。

関連する問題