7

認証を処理するためにdeviseを使用するRails3プロダクションアプリがあります。アプリでshaの代わりにbcryptを使用するように変更したいのですが、一方から他方への移行プロセスを説明するリソースが見つかりません。現時点でパスワードが特定の方法で変更されているという事実を処理するには、何らかのフォールバックを設定する必要があると思います...

誰かが前にこれをしましたか?!ヒント、チュートリアル、ウォークスルーなどはありますか?!

4

3 に答える 3

3

これは、一度に全員を切り替えることができる、より優れたアルゴリズムです。これをdeviseで実装する方法を理解する必要がありますが、概要は次のとおりです。これは私のものではありません。Web 上に記載されている URL で見つかりました。


http://blog.jgc.org/2012/06/one-way-to-fix-your-rubbish-password.html

  1. サイトの n ユーザーのパスワード ハッシュを含むデータベースがあり、ユーザーごとにソルト si とハッシュ hi があるとします (hi は SHA1 や MD5 などのアルゴリズムで計算されます)。(ソルトがない場合、これらの手順の残りの部分は機能することに注意してください。無視してください)。

  2. scrypt の使用を選択したとします。ユーザーごとに、最初に新しいランダム ソルト値 s'i を作成し、式 scrypt(s'i, hi) を使用して新しいハッシュ h'i を計算し、新しいソルトとハッシュをデータベースに保存します。古い弱いハッシュ hi を捨てて、それがかつて存在したことを忘れてしまいます。したがって、2 つのソルト値と新しいハッシュが残ります。(他の scrypt パラメーターは無視しましたが、これは読者に判断を委ねています)。

  3. ユーザー i がログインしてパスワード p を提示すると、古い弱いハッシュ アルゴリズム (md5(salt, password) と仮定します) を使用して、次のように比較用のハッシュを計算します: scrypt(s'i, md5(si, p))それをデータベースに保存されている h'i と比較します。

  4. last.fm のように、サードパーティがパスワードの代わりに古いハッシュ値を提示することでユーザーを認証できるようにしている場合でも、このスキームを使用できます。サードパーティがユーザー i のハッシュ h を提示すると、scrypt(s'i, h) を計算して比較します。

  5. 手順 4 が必要ない場合は、ユーザーがログインするときに先に進むことができます。ユーザーがパスワード p で正常にログインすると、新しいランダム ソルト値 s''i を選択することで、古い弱いハッシュの痕跡を完全に削除できます。 scrypt(s''i, p) を計算し、それをデータベースに保存します。

これにより、パスワード データベースが盗まれた場合に、ユーザー側で何の努力もせずに、すぐにパスワード データベースの安全性を高めることができます。

于 2012-06-09T00:29:06.217 に答える
3

あなたが望む解決策はないと思います。私は2つのオプションしか知りません-

すべてのユーザーパスワードをリセットし、これが完了したことを知らせるメールを送信します (できれば、ユーザーがびっくりしないようにその理由を伝えます)。

すべてのユーザーがログインするたびに、古いハッシュ システムと照合し、検証された場合は、新しい列に新しい bcrypt ハッシュを作成してから、古い安全性の低いハッシュを削除し、ゆっくりと移行を開始します。

レインボー テーブルを作成してすべての人を移動させるのに必要な数学的能力は、ほとんどありません。

于 2011-02-22T01:03:52.350 に答える
0

ユーザーモデル:

考案:暗号化可能

devise-users 移行ファイル:

t.encryptable

これらの設定は利用できますか?

于 2011-08-25T11:09:06.003 に答える