2017-02-24 9 views
4

generate_password_hashwerkzeug.securityから使用してパスワードをハッシュして暗号化します。私は最近、this article about SHA-1 collisionsを見た。 werkzeug.securityはSHA-1を使用しているため、これ以上安全ではないため、代替手段が必要です。 SHA-1に頼らずにパスワードをハッシュするにはどうすればいいですか?それだけPBKDF2ハッシュ中間、反復ステップとして使用されるwerkzeug.security generate_password_hash SHA-1なしの代替

from werkzeug.security import generate_password_hash 
generate_password_hash(secret) 

答えて

7

generate_password_hashにSHA-1の使用は、脆弱ではありません。 See the discussion in chat.

PBKDF2のようにハッシュを連鎖させている場合、強力なパスワードを壊す可能性がある人と区別がつきません。

cryptography-devメーリングリストの詳細については、現在のセキュリティには影響しませんが、わかりやすくするためにデフォルトのSHA-512を変更することにしました。あなたは、SHA-1で使用する場合HMACのセキュリティはまだ罰金であることを正しいだ

は、 HMAC-MD5はそれを信じるかどうかさえも安全です。

私は、一般的に、HMAC-SHA-256への移行をお勧めします。 は、ソフトウェアの解析を容易にするためです。

あなたが代わりにSHA512を使用してに見たいと思うかもしれませんため、64ビットプラットフォーム上で最適化します。


generate_password_hashハッシュが生成される方法をカスタマイズするmethod引数を取ります。デフォルトはpbkdf2:sha1です。 PBKDF2に異なる導出メソッドを渡します。

generate_password_hash(secret, method='pbkdf2:sha512') 

また、低速のハッシュスピードのコストで、高い数値に1000年の低いデフォルトの反復回数を変更することができます。 pbkdf2:sha1:10000


ハッシュと繰り返しがうまく調整されていれば、PBKDF2であれば大丈夫でしょう。あるいは、Werkzeugよりも多くのハッシュメソッドをサポートするPasslibを使用してください。使用するハッシュについては、Passlibのrecommended hashesを参照してください。この例は、Passlibでbcryptを使用する方法を示しています。

pip install passlib bcrypt 
from passlib.context import CryptContext 
crypt_context = CryptContext(schemes=['bcrypt_sha256']) 
crypt_context.hash(secret)