アドバイスを探しているだけです。私は約2500人のユーザーがいるウェブサイトを持っています-小さいですが成長しています。パスワードにSHA1暗号化を使用して構築しました。それ以来、SHA1は安全ではないことを読みましたが、Saltを使用したSHA256に変更したいと思います。
このような移行方法について誰かアドバイスはありますか?パスワードを復号化して再ハッシュすることができれば素晴らしいと思いますが、うまく機能していないようです。
thxアダム
これを行う通常の方法は次のとおりです。
時間の経過とともに、ユーザーは自分でsha256に移行します。唯一の問題は、非常に散発的にしかログインしないか、まったくログインしないユーザーです。これらについては、リマインダーメールを送信するか、X日より前にログインしない場合はアカウントをシャットダウンすると脅迫することもできます(実際の理由は教えないでください...)
明確にするために、SHAはハッシュアルゴリズムであり、(一般的に)一方通行です。ハッシュを復号化することはできません。これは、ハッシュを使用してパスワードを認証することの強みの1つです。あなたはソルトハッシュに移行することで正しい方向に進んでいます、そしてこれが私がそれをする方法です。
パスワードを取得する唯一の方法は、ユーザーが自分でパスワードを入力できるようにすることです。ユーザーがサイトにアクセスしてログインしたら、パスワードを1つずつ更新します。あなたの認証方法では、私はあなたが今しているハッシュを実行し、それを既存のフィールドにあるものと比較します(ここでは何も新しいことはありません)。一致すると仮定して、SHA256を使用してソルト/再ハッシュし、データベースのパスワードフィールドを更新します。必要に応じて、どのユーザーが更新されたかを追跡するユーザーテーブルを少し保持します。
私は多くの仮定をしていますが、これは私が過去にハッシュアルゴリズムダンスを解決した方法です。幸運を!
ユーザーがパスワードを再ハッシュするためにサイトに再度アクセスするのを待たずに、パスワードハッシュをSHA1からSHA256にすぐに移行するという別の提案があります。変更は、ワンタイムパスワードハッシュの移行とログオン検証機能への変更になります。
パスワードハッシュが次の関数を使用して生成されたとします:password + salt [Sha1]-> Hash-sha1
Sha256に移行するには、次のアルゴリズムを使用してパスワードハッシュを変換できます。
Hash-sha1 + salt [Sha256]-> Hash-sha256(saltは、入力の複雑さを増すために使用されます。)
sha256関数の許容値に応じて、印刷可能なASCII用にHash-sha1をbase64にエンコードすることを検討できます。
ログオン検証機能では、次のアルゴリズムを使用してパスワードをハッシュする必要があります。
パスワード+ソルト[sha1]->ハッシュ-sha1+ソルト[sha256]->ハッシュ-sha256
欠点は2回ハッシュされます(CPU時間を使用します)が、移行が簡素化され、セキュリティが向上します。
SHA256に切り替えても、Webサイトの安全性はほとんど向上しません。
SHA1とSH512はメッセージダイジェストであり、パスワードハッシュ(またはキー導出)関数を意図したものではありません。(ただし、メッセージダイジェストは、HMAC-SHA1を使用するPBKDF2のように、KDFのビルディングブロックとして使用できます。)
パスワードハッシュ関数は、辞書攻撃やレインボーテーブルから防御する必要があります。
現在、(NISTによって認可されているように)唯一の標準のパスワードハッシュまたはキー導出機能はPBKDF2です。標準を使用する必要がない場合は、bcryptと新しいscryptを選択することをお勧めします。ウィキペディアには、3つの機能すべてのページがあります。
https://crackstation.net/hashing-security.htmのページには、パスワードセキュリティに関する広範な説明が含まれています。
そうは言っても、tdhammersは移行の処理方法に関して優れたアドバイスを提供します。