2010-12-14 25 views
76

Yếu tố làm việc bcrypt lý tưởng cho băm mật khẩu là gì.Yếu tố làm việc bcrypt tối ưu

Nếu tôi sử dụng hệ số 10, phải mất khoảng 1 giây để băm mật khẩu trên máy tính xách tay của tôi. Nếu chúng tôi kết thúc với một trang web rất bận rộn, điều đó biến thành một công việc tốt chỉ là kiểm tra mật khẩu của mọi người.

Có lẽ sẽ tốt hơn nếu sử dụng hệ số làm việc là 7, giảm tổng số băm mật khẩu hoạt động xuống khoảng 0,01s trên mỗi máy tính xách tay-đăng nhập?

Làm thế nào để bạn quyết định sự cân bằng giữa an toàn lực lượng vũ phu và chi phí hoạt động?

+7

Chi phí ngăn chặn các cuộc tấn công ngoại tuyến. Khi "trực tuyến", bạn có thể sử dụng độ trễ tối thiểu giữa các lần thử (ví dụ: 5 giây) để ngăn chặn tấn công từ chối dịch vụ. –

+3

Nhân đôi trên InformationSecurity: [Đề nghị # của vòng cho bcrypt] (http://security.stackexchange.com/q/17207/46416) –

+1

Đối với bất cứ ai quan tâm, tôi chỉ viết một công cụ Java CLI nhỏ để kiểm tra hiệu suất bcrypt trên máy chủ (điều này rõ ràng là quan trọng để cân bằng an ninh, tải trên máy chủ và thời gian phản hồi): https://github.com/cdraeger/hash-performance – Blacklight

Trả lời

96

Hãy nhớ rằng giá trị được lưu trữ trong mật khẩu: $2a$(2 chars work)$(22 chars salt)(31 chars hash). Nó không phải là một giá trị cố định.

Nếu bạn thấy tải quá cao, bạn chỉ cần tải nó vào lần đăng nhập tiếp theo, bạn crypt vào thứ gì đó nhanh hơn để tính toán. Tương tự, khi thời gian trôi qua và bạn nhận được các máy chủ tốt hơn, nếu tải không phải là vấn đề, bạn có thể nâng cấp sức mạnh của mã băm khi họ đăng nhập.

Bí quyết là giữ cho nó mất khoảng thời gian tương tự mãi mãi trong tương lai cùng với Định luật Moore. Số là log2, vì vậy mỗi khi máy tính tăng gấp đôi tốc độ, hãy thêm 1 vào số mặc định.

Quyết định khoảng thời gian bạn muốn thực hiện để tăng sức mạnh mật khẩu của người dùng. Ví dụ: đối với một số từ điển phổ biến, việc tạo tài khoản của bạn có thể đã cảnh báo rằng mật khẩu của họ yếu. Nếu đó là một trong 1000 từ phổ biến, giả sử, và phải mất một kẻ tấn công 0.1s để kiểm tra mỗi, mua chúng 100 (tốt, một số từ phổ biến hơn ...). Nếu người dùng chọn 'từ điển phổ biến' + 2 số, thì đó là hơn hai giờ. Nếu cơ sở dữ liệu mật khẩu của bạn bị xâm nhập và kẻ tấn công chỉ có thể nhận được vài trăm mật khẩu mỗi ngày, bạn đã mua hầu hết người dùng của bạn hàng giờ hoặc ngày để thay đổi mật khẩu của họ một cách an toàn. Đó là vấn đề mua thời gian của họ.

http://www.postgresql.org/docs/8.3/static/pgcrypto.html có một số lần để bẻ mật khẩu để bạn xem xét. Tất nhiên, mật khẩu mà họ liệt kê có các chữ cái ngẫu nhiên. Từ điển ... Thực tế bạn không thể lưu người có mật khẩu là 12345.

+6

Đây thực sự là một câu trả lời tuyệt vời. Tôi thậm chí đã không xem xét lại crypt về ý tưởng đăng nhập. Cảm ơn bạn rất nhiều! – Chris

+1

Làm cách nào để mã hóa lại hoạt động? Bạn sẽ phải lưu trữ chi phí công việc bcrypt cũ ở đâu đó để bạn có thể sử dụng nó để đăng nhập vào và sau đó sau khi xác nhận mật khẩu của họ, bạn sẽ cập nhật băm và chi phí trong cơ sở dữ liệu? –

+4

@JerrySaravia Vẻ đẹp của bcrypt là chi phí được lưu trữ bên trong bản thân băm - vì vậy bạn không cần phải lưu trữ _anything_ thêm. Đơn giản chỉ cần xác thực với băm hiện tại, sau đó ngay lập tức tạo lại băm với chi phí khác. Đơn giản! –

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