web-dev-qa-db-ja.com

トークン検証のためにPBKDF2からSHA-1に切り替えても安全ですか?

トークンを生成する必要があるときはいつでも(電子メールアカウントの確認、パスワードのリセット、Cookieの記憶、ブラウザでの電子メールの表示など)、ランダムバイトの文字列(通常はFortuna PRNGを使用して32)を生成し、PBKDF2を使用して保存されるハッシュを作成しますデータベース内。次に、base64(URLセーフバージョン)を使用してランダムバイトをエンコードしてから、トークンが返されたときにPBKDF2ハッシュを取得するために使用される一意の7文字の英数字IDをプレフィックスとしてユーザーに発行します。 base64文字列はデコードされ、データベースからのPBKDF2ハッシュに対して検証されます。検証がtrueを返すと、アクセスが許可されます。

しかし、ユーザーが生成した入力ではなくランダムなバイトを使用している場合、データベースにバイトを格納し、トークンと照合するためにsha1を使用するだけでは意味がありませんか?トークンの生成と検証の両方を行う必要があるたびに、優れたエントロピーを持っていることがわかっている入力でsha256の反復を10,000回実行しています。考えれば考えるほど、効率が悪くなるようです。

1
Adam

PBKDF2は、その名前が示唆するように、「パスワードベースの鍵導出関数」です。これは、エントロピーの低いパスワードを総当たりすることを困難にすることを目的としています。少なくとも128ビットのエントロピーを含むソースを使用する場合、ハッシュを総当たり攻撃する場合、平均して少なくとも(2 ^ 127)/ n回の反復が必要になるため( "n"はシステムのユーザー数)。 32バイト(256ビット)を使用すると、数十億のユーザーが数十億のアカウントを使用していても安全です。

CSPRNGによって生成された32バイトのトークンでsha256の1回の反復を使用しても問題ありません。

2
A. Hersean