2011-05-08 20 views
6

Bất cứ khi nào tôi đặt config.stretches = 20 trong config/initializers/devise.rb, máy chủ sẽ tính toán yêu cầu mã hóa.Rails 3 Devise để ngừng với mã hóa nhiều hơn "trải dài"

Thời gian reposnse có thể chịu được 15 lần, sau đó tăng nhanh khi tôi tăng giá trị, và trở nên hoàn toàn không thể sử dụng được ở 19. Tôi không biết nhiều về tác động hiệu suất mà giá trị này có thể gây ra, nhưng chắc chắn không nên theo cấp số nhân, đó là những gì tôi trải nghiệm. Rõ ràng tôi không cần phải tăng giá trị này cho bất cứ điều gì ngoại trừ khả năng tương thích authlogic, nhưng có vẻ như không sao.

Tôi đã xác minh điều này với cài đặt hoàn toàn mới là https://github.com/plataformatec/devise_example/.

Hành vi này được quan sát trên Ubuntu 11.04, mọi phiên bản đường ray 3.0.x, 3.1.0.beta1, đưa ra 1.3.1 và 1.3.4, trình điều khiển mysql, pg, sqlite. Điều này đúng với brcypt cũng như cho sha1 trình mã hóa.

Trả lời

6

Hóa ra là tôi không chỉ định tùy chọn :encryptable trong mô hình của mình và Devise bỏ qua cài đặt config.encryptor âm thầm và thực sự là sử dụng bcrypt, thực sự chậm ở 20 độ dài.

+1

Chỉ cần gỡ lỗi mã của một người bạn và chạy vào cùng một vấn đề (không thêm: mã hóa cho mô hình). Cảm ơn! –

6

Đây là hành vi mong đợi (đặc biệt đối với bcrypt được cho là tốt hơn). Mục đích duy nhất của giá trị này là làm giảm hiệu suất để tăng tính bảo mật.

Bạn không muốn tốc độ khi băm vì điều này cho phép kẻ tấn công thử nhiều thứ hơn trong một khoảng thời gian nhất định. Bài viết này giải thích điều này: http://codahale.com/how-to-safely-store-a-password/.

Trong suy nghĩ, các khoảng cách được sử dụng để điều chỉnh hệ số công việc cao hơn để mật khẩu mất một thời gian dài cấu hình để băm. Bản chất có thể cấu hình là cần thiết vì 2 lý do: 1) các ứng dụng khác nhau có các đặc tính hiệu suất chấp nhận được khác nhau và 2) khi máy tính hoạt động nhanh hơn, bạn có thể tăng yếu tố làm việc để duy trì hiệu suất tương tự.

Ý tưởng là bạn nên định cấu hình giá trị này ở mức cao nhất có thể trong khi vẫn duy trì hiệu suất có thể chấp nhận được. Mục tiêu không phải là để làm cho đăng nhập mất 60 giây, nó là để làm cho nó mất nhiều thời gian hơn một hoặc hai giây. Nếu bạn có thể tìm thấy giá trị cho các độ giãn dài làm chậm yêu cầu xuống khoảng 200 mili giây hoặc lâu hơn, đó có thể là nơi bạn muốn.

+0

Tôi hiểu ý tưởng, nhưng tôi vẫn tin rằng có điều gì đó sai. Với authlogic, có hành vi Devise được cho là bắt chước bằng cách thiết lập mã hóa thành: authlogic_sha512 và kéo dài đến 20, không có sự chậm trễ đáng chú ý nào với đăng nhập hoặc đăng ký. – punund

+0

Không nên là vấn đề: mã giống nhau. https://github.com/binarylogic/authlogic/blob/master/lib/authlogic/crypto_providers/sha512.rb vs. https://github.com/plataformatec/devise/blob/master/lib/devise/encryptors/authlogic_sha512 .rb –

+0

Ngoài ra, bcrypt là khác nhau, với yếu tố làm việc chậm hơn nhiều. –

Các vấn đề liên quan