あるシステムから別のシステムに、暗号化されたパスワード (ハッシュ パスワード) を移行できるシステムをセットアップしたいと考えています。どうすればいいですか?
2 か月後、10 倍優れた暗号化を発見し、現在のハッシュ関数は疑いもなく完全に脆弱であることが証明されました。ユーザーパスワードをあるタイプのハッシュから別のタイプ (より良いもの) に移行するにはどうすればよいでしょうか。
あるシステムから別のシステムに、暗号化されたパスワード (ハッシュ パスワード) を移行できるシステムをセットアップしたいと考えています。どうすればいいですか?
2 か月後、10 倍優れた暗号化を発見し、現在のハッシュ関数は疑いもなく完全に脆弱であることが証明されました。ユーザーパスワードをあるタイプのハッシュから別のタイプ (より良いもの) に移行するにはどうすればよいでしょうか。
次の手法を使用して、あるメソッドから別のメソッドにゆっくりと移行できます。私はその品質を保証できませんので、塩の粒で受け取ってください(ダジャレは意図されていません)
たとえば、ユーザーを格納する次のテーブルについて考えてみます。
id name password salt hashmethod
--------------------------------------------
1 alice ABC52... ABD... md5
2 bob 28DHF... Z+d... sha1
...
時代遅れのハッシュ メソッドがmd5であり、それをより安全なものに置き換えたい場合、次のsha1
ようにします。
この移行には時間がかかる場合があるため、迅速に移行するには、ユーザーにログインまたはパスワードの変更を求める電子メールを送信する必要があります。
それが役に立てば幸い。
一般的には、できません。ハッシュからパスワードを復元することはできません。それがハッシュの要点です。元のハッシュ関数が壊れていてパスワードを回復できる場合は、それを行ってから新しい関数でハッシュすることもできます。
一般的に、これを行う方法は次のとおりです。
1) 通常は RSA を使用して、公開鍵と秘密鍵のペアを生成します。
2) 秘密鍵を徹底的に保護します。オンラインで保存することは決してありません。(それを半分に分割し、それらを別の人に信頼することもできます。安全な秘密の共有を使用することもできます。トークンで保護することもできます。)
3) パスワードを保存すると、生成した公開鍵で暗号化されたコピーも保存されます。
4) 将来、平文パスワードの復元が必要になった場合は、秘密鍵を復元し、保存されているパスワードのコピーを解読します。
これは、その方法の技術的な説明であることに注意してください。安全に行う方法は複雑で、正確な状況によって異なります。たとえば、攻撃者が公開鍵を自分の公開鍵に置き換える脅威モデルを考慮する必要があります。
これは、一方向ハッシュ方式を使用してパスワードを保存し、認証時にハッシュを比較するシステムにのみ適用されます。
システムのアップグレードが頻繁に必要な場合は、次のことを行います。
Taymon が指摘したように、ハッシュは 1 つの方法であり、ハッシュから元のプレーン テキストを取得する方法はありません。
ユーザー情報とパスワードを格納するデータベース テーブルに、Hashing Level 整数フィールドを含めます。これは、ユーザーが使用しているハッシュ方法を示します。
システムに新しいハッシュ方式が追加されると、最高のハッシュ レベルが増加します。
すでに2つのハッシュ方法があるとしましょう
1 MD5
2 SHA1
3 SHA256
新しいハッシュ方法を追加すると、次のSHA512
ようになります
4 SHA512
ユーザーがサインインするたびに、システムは識別されたハッシュ レベルを使用して、ユーザーのパスワードがデータベース内のパスワードと同じかどうかを確認します。ここにはいくつかのケースがあります:
これは、システムのハッシュ レベルをアップグレードするたびに、ユーザーのパスワードが次の認証時に最高レベルにのみアップグレードされることを意味します。