web-dev-qa-db-ja.com

ハッシュ化されたパスワードを使用してシステムからユーザーアカウントを移行する

新しいプラットフォームに移行する必要がある数千のユーザーアカウントを持つシステムがあります。システムは、暗号化されたテキストではなく、ハッシュ化されたパスワードを保存します。また、私はすぐに利用できるハッシュの詳細を持っていません。

移行を行うための効果的な方法は何ですか?私の頭の上から思いついたアイデアが1つあります。

  1. 事前に、すべてのデータを移行できます。古いプラットフォームの現在のユーザーは、新しいプラットフォームにアカウントとすべてのデータを保持します。
  2. 現在認証を処理しているコードの一部を削除し、ユーザー名/パスワードの有効性をチェックする一種のサービスに変換します。
  3. 新しいプラットフォームは、最初に自身の認証をチェックして、パスワードが転送されたかどうかを確認できます。そうでない場合は、他のプラットフォームのサービスを呼び出して、古いシステムで有効かどうかを判断できます。
  4. 有効でない場合、ログインが間違っていたことをユーザーに通知します。
  5. 有効な場合、正しいパスワードを認識し、(プラットフォームが使用するスキームに応じて)独自のユーザーテーブルにパスワードを入力できます。
3
Larsenal

使用されていたハッシュアルゴリズムにアクセスできなかったことを除いて、最近同様の問題を経験しました。 2つの選択肢があると思います。

  1. すべてのユーザープロファイルを新しいシステムに移動し、古いパスワードハッシュを含む列を追加します。
  2. ユーザーが初めてログインすると、新しいシステムにはアカウントは存在しませんが、古いシステムにはハッシュが存在します。システムは、パスワードの事前ハッシュコピーを保持し、ハッシュされたバージョンを古いハッシュと照合します。
  3. 古いハッシュが一致した場合、新しいシステムのパスワードを送信したものに設定します。

ただし、ハッシュアルゴリズムにアクセスできず、各ユーザーにメールアドレスがある場合は、別の選択肢があります。これは私が実際にしたことです:

  1. 古いシステムから新しいシステムにすべてのユーザー名、メールアドレス、情報をコピーします。ユーザーが古いシステムに属していることを示すフラグ列を表に入れます。
  2. ユーザーが初めて新しいシステムにログインすると、新しいシステムは、アカウントは持っているがパスワードは持っていないことがわかります。
  3. 「ウェブサイトを更新し、ユーザーアカウントが変換されました。まもなく新しい一時パスワードが記載されたメールが届きます(パスワードまたは特別なリンクが短時間だけ機能することを確認してください)期間)。
  4. ユーザーに新しいサイトに一時パスワードを送信して、ログインできるようにします。初めてログインしたら、パスワードを好きなようにリセットします。

2番目のオプションは、私にとって非常にうまく機能しました。ユーザーからの苦情はほとんどありませんでした。これは、ユーザーが忘れたパスワードをリセットする通常のプロセスであるため、比較的安全です。

3
Ben Hoffman

あまりにも多くの問題に取り組む前に、ハッシュアルゴリズムが何であるかを検討しましたか?ハッシュ化されたパスワードを使用するのに十分正気である場合は、一般的なハッシュアルゴリズム(MD5、SHA1など)を使用するのに十分正気であることが望ましい。

いくつかの一般的なオプションを試して、それらが行っていることをリバースエンジニアリングできるかどうかを確認する価値があります。

また、「現在認証を行うコードの一部を削除する」ことにも言及しています。ハッシュアルゴリズムではなくコードを持っているのはどうですか?

0
Eric Petroelje