4

ハッシュ化されたパスワードをscryptで保存する方法を理解できていません。

次に例を示します。

import pyscrypt

hashed = pyscrypt.hash(password = b"password",
                       salt = b"seasalt",
                       N = 1024,
                       r = 1,
                       p = 1,
                       dkLen = 16)
print(hashed.hex()) #70ac953b777e24c4f41c4657eb9f03c2

hashed = pyscrypt.hash(password = b"password",
                       salt = b"seasalt",
                       N = 1024,
                       r = 2,
                       p = 1,
                       dkLen = 16)
print(hashed.hex()) #b00b951cd50675806c55d903dba9cbca

hashed = pyscrypt.hash(password = b"password",
                       salt = b"seasalt",
                       N = 1024,
                       r = 1,
                       p = 2,
                       dkLen = 16)
print(hashed.hex()) #7c3fa22552c8a9071da0e8c80a0a2767

上記の例では、パラメーター値に応じてハッシュが変更されることがわかりN, r, pます。

N, r, pそれは、データベースにも値を保存する必要があるということですか?

将来、より強力なハードウェアが市場に出回るようになったら、どうすればよいですか? たとえば、新しいハッシュ関数を適用できるように、ユーザーにパスワードを変更するように依頼しますか?

4

2 に答える 2

1

はい、ハッシュを生成するために使用したパラメーターをハッシュと一緒に保存する必要があります。通常、それらを一意に文字列に連結するのが最も簡単です。たとえばN|r|p|len|salt|hash、 、またはおそらく dict を JSON エンコードします。また、パスワードごとに一意のランダム ソルトを生成する必要があります。

ユーザーがログインしている間、将来のアップグレードを処理できます。 疑似コード:

if login_successful:
    if not params_up_to_date(hashed_password):
        hashed_password = hash(entered_password)
        # update database record

ハッシュされたパスワードのパラメーターが現在使用しているものと同じかどうかを確認し、そうでない場合は、ログイン プロセス中に使用したばかりのパスワードを再ハッシュします。ユーザーは、この方法で徐々に透過的にアップグレードできます。

于 2015-11-18T14:56:05.737 に答える
0

最も重要なことは、saltユーザーごとに保存する必要があることです。

したがって、通常、レコードは次のようになります。

username: scrypt,params,seasalt,89435389985698348998364

(他のメカニズムが以前に使用された場合に備えて、レコードのタイプを明示的に保存する必要があります)

于 2015-11-18T14:54:03.027 に答える