問題タブ [pbkdf2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
1108 参照

security - 既存の MD5 ハッシュをソルト化し、Scrypt または PBKDF2 HMACSHA256 を使用して結果をハッシュすることで、MD5 ハッシュ化パスワードのセキュリティを向上させることはできますか?

MD5 を使用してソルト化およびハッシュ化された従来のパスワードのデータベースがあります。データがより安全になるようにシステムを更新したいと思います。

最初のオプションは、ユーザーがログインして一定期間後に古いユーザーを非アクティブ化するときに、ユーザーを新しいハッシュ スキーム (Salt + Scrypt または PBKDF2 HMACSHA256) に移行することです。これにより、ユーザーは自動的にハッシュを更新するパスワード回復機能を使用する必要があります。

全員を即座にアップグレードできるようにする別のオプションは、既存の MD5 ハッシュを取得し、それぞれに新しいランダムなソルト値を追加してから、新しいハッシュ スキーム (Salt + Scrypt または PBKDF2 HMACSHA256) を使用して結果をハッシュし、その値を保存することです。データベースに移動し、古い値を削除します。

次に、ユーザーがログインするときに、古い方法を適用してから新しい方法を適用する必要があります。私は 2 番目のオプションの方が気に入っています。これにより、古い安全でないハッシュをデータベースから遅かれ早かれすべて削除できるからです。

既存のハッシュをソルトして再ハッシュしても安全ですか? MD5 は非常に壊れているので、スクリプトを実行してパスワードをハッシュ解除し、新しいスキームを使用してパスワードを再ハッシュできますか?

それとも、両方のオプションを組み合わせて実行するのが最善の解決策でしょうか? こうすれば、データベース内の既存の MD5 ハッシュをセキュリティで保護されていないままにしておく必要がなくなり、一定期間、ユーザーを新しいシステムに移行できますか?

0 投票する
2 に答える
15738 参照

node.js - pbkdf2 を使用した SALT および HASH

次の方法を使用して、nodejs の crypto lib からソルト化およびハッシュ化されたパスワードを作成しています。

randomBytes 呼び出し (SALT の作成) では、どのサイズを使用すればよいですか? 128 ビットのソルトを聞いたことがありますが、おそらく最大 256 ビットです。この関数はバイト単位のサイズを使用しているように見えますが、32 (256 ビット) のサイズで十分だと思いますか?

pbkdf2 呼び出しの適切な反復回数とキーの長さ (keylen) はどれくらいですか?

また、ストレージについては、salt、length、iterations、および derviedkey を同じ列に格納する例を見てきました。4 を で区切る例を使用しています::

これを行うと、分離し::て 4 つの値を取得できるので、提供されたパスワードに基づいて派生キーを生成し、一致するかどうかを確認できます。これは正しい保存方法ですか?それとも、これらの値を組み合わせる際にもう少し「欺く」べきでしょうか?

0 投票する
1 に答える
1325 参照

c# - Rfc2898DeriveBytes を使用した PBKDF2 は、同じ入力に対して異なる出力を生成しますか?

パスワードベースのキー派生関数のポイントは、毎回同じ方法でパスワードから暗号的に安全なキーストリームを生成することであり、パスワードから暗号化キーを生成するために信頼できるという印象を受けました。

stack overflowを含むオンラインで読んだことから、これは意図された用途のようです。

そのため、同じ入力だと思っていたものに対して異なる出力を生成していたとき、間違った使い方をしていると思いました。Rfc2898DeriveBytesこれをテストするために、ドキュメントが示唆する方法でそれを使用するためのテストケースを書きました。

このテスト ケースは失敗しており、その理由がわかりません。関数を誤って使用していますか、それとも何のために使用すべきかを誤解していますか?

編集: わかりました。アサーションのコレクション形式を使用していなかったため、上記のテスト方法は欠陥のあるテストでした。AreEqual は引数に対して .Equals を呼び出し、内容を比較するために実装されるコレクションに対してはそれを呼び出すと思いました。

私が抱えていた問題は、Rfc2898DeriveBytes への同じ引数が同じ入力に対して異なる出力を生成していると思っていたのに、入力が微妙に異なっていたことです。

16バイトのソルトを生成してデータベースに保存しましたが、フィールドの長さのため、ソルトを復号化のために取得したとき、最初の16バイトは同じでした(同じ情報を使用していると思いました)が、これらは続きました別の 48 バイトの 0 によって、入力が異なっていました。

0 投票する
0 に答える
170 参照

python - PBKDF2PasswordHasher を使用した Gen Hashed Password への登録フォーム

送信が成功したとき、およびフィールドが既に存在するかどうかを確認するために送信されたときに、自分のuserPassフィールドをPBKDF2PasswordHasherでハッシュしようとしています。userNm

私はモデルフォームを持っています:

PBKDF2PasswordHasherのカスタム定義を定義するためのhasher.pyファイル:

ビュー

settings.pyには次のものがあります。

現在、次のページに userNm を出力し、 と の両方をデータベースに保存userNmuserPassますが、userPassはクリアテキストです。

ここで何が間違っていますか?誰かが助けることができますか?