web-dev-qa-db-ja.com

Rails 3 / Devise:パスワードソルトはもう作成されていませんか?

私はしばらくの間、ユーザー認証にDeviseを使用するプロジェクトに取り組んできました。ユーザーが作成されるたびに、暗号化されたパスワードとともにユーザーのパスワードソルトが生成されます。

このプロジェクトの最後に来たとき、ユーザー登録をテストしていて、新しい役割がこれらの新しいユーザーのデータベースにパスワードソルトを作成していないのに対し、古いユーザーはすべてソルトを持っていることに気付きました。新しいユーザーは問題なくサインインできますが、Deviseがソルトを作成しなくなった理由が心配です。

私が遭遇したDeviseの唯一の奇妙な点は、モジュールをアップグレードしたときに、bcryptがデフォルトの暗号化になっているため、暗号化可能ファイルの削除に関する何か、またはその効果を示すログを覚えていることです。私がそうしたのは...これが現在の問題と関係があるかどうかはわかりません。

さらに、自分のプロジェクトがうんざりしているのではないかと考えて、まったく新しいRailsアプリケーションを最初から作成し、それにDeviseを追加しました。その新しいプロジェクトでさえ、ユーザーに塩を作成していません。

Deviseにパスワードソルトを設定する新しい方法はありますか、またはソルトが作成されなくなった理由を誰かが知っていますか?残念ながら、Devise wikiにはこの件について多くのことを言うことはなく、Googleはこれまでのところ無駄な検索を行ってきました。

それとも...そもそも塩が必要ですか?それらを持っている方が安全だと思います。

私のusers/deviseの設定は以下の通りです。

config/initializers/devise.rb

Devise.setup do |config|

  config.mailer_sender = "[email protected]"

  require 'devise/orm/active_record'

  config.authentication_keys = [ :login ]

  config.stretches = 10

  config.encryptor = :bcrypt

  # Setup a pepper to generate the encrypted password.
  config.pepper = "79c2bf3b[...]"

end

app/models/user.rb

  devise :database_authenticatable, :registerable, :confirmable,
         :recoverable, :rememberable, :trackable, :validatable

[〜#〜]更新[〜#〜]

Deviseがアップグレードされた後から、次のような通知を見つけることができました...

[DEVISE] From version 1.2, there is no need to set your encryptor to bcrypt since encryptors are only enabled if you include :encryptable in your models. To update your app, please:

1) Remove config.encryptor from your initializer;
2) Add t.encryptable to your old migrations;
3) [Optional] Remove password_salt in a new recent migration. Bcrypt does not require it anymore.

したがって、bcryptを使い続けると、password_saltは非推奨になるようです。これが、password_saltが作成されなくなった理由を説明しています。それで答えますが、私の質問の他の部分はまだ残っています...これは十分な練習ですか、それともbcrypt以外の別の暗号化を使用する必要がありますか?

25
Shannon

JoséValimによる:

Bcryptを使用している場合、Devise1.2.1ではpassword_salt列は不要になりました。ある種のソルトが必要な場合は、そのような値を取得するために使用できるauthentication_saltというメソッドがあると思います。 (ソース)

15
Zabba

新しいバージョンのdeviseは、暗号化されたパスワードフィールドの0〜29文字をソルトとして使用し、そのデータベースフィールドの残りの文字を暗号化されたパスワードに使用します。したがって、パスワードは実際にはまだBCryptでソルトされています。

32
Tim Capes