2010-12-17 6 views
7

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

誰でもこれを行う前に!ヒント、チュートリアル、ウォークスルーなど

答えて

3

あなたが望む解決策はありません。すべてのユーザがログインすると、古いに対してチェック、

リセットすべてのユーザー・パスワードをし、これが行われている(好ましくは、なぜ彼らはフリークアウトしていない)、それらを伝えるそれらを電子メールで送信 - 私は2つのだけの選択肢を知っていますあなたが持っていたハッシュシステムは、新しいカラムに新しいbcryptハッシュを作成してから、古いセキュアでないハッシュを削除してゆっくりとマイグレーションを開始します。

誰もが移動するために虹のテーブルを作成するために必要な計算力はそうではありません。

+0

ええ私はしばらくの間、第2のオプションに傾いていましたが、私はここにあなたの周りの誰かから聞くことを望んでいたので、簡単な方法があります。 – erskingardner

0

Userモデル:

工夫:暗号化可能

工夫 - ユーザーの移行ファイル:

t.encryptable

がために利用可能なこれらの設定です君は?

3

ここでは、より良いアルゴリズムがあります。これは、すべてのユーザーを一度に切り替えることができます。これを実装する方法を考えなければなりませんが、ここでその概要を説明します。これは私のものではなく、Web上のURLに記載されています。


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

  1. あなたのサイトのn個のユーザーのためにパスワードハッシュを含むデータベースを持っている、と仮定しますが、塩のSiといくつかで計算されたハッシュHIを(持っている各ユーザのSHA1またはMD5などのアルゴリズム)。 (これらの命令の残りの部分は、塩がない場合には機能し、無視するだけであることに注意してください)。

  2. あなたがscryptを使用することを選択したとします。各ユーザに対して、まず新しいランダムソルト値s'iを作成し、式scrypt(s'i、hi)を使用して新しいハッシュh'iを計算し、新しいソルトとハッシュをデータベースに格納します。あなたは古い弱いハッシュを捨てて、それが存在したことを忘れてしまいます。あなたは2つの塩の値と新しいハッシュを残しています。 (私は決定するために読者に残されている他のscryptパラメータを無視した)。

  3. ユーザがログインしてパスワード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、p)を計算し、それをデータベースに格納する。

これは、ユーザーの手間をかけずに盗まれた場合、パスワードデータベースをすぐに安全にする効果があります。

+0

これは私が考えるより良い答えです。 – Nico

関連する問題