Tôi muốn tạo một băm trên toàn trang web được sử dụng làm muối trong việc tạo mã thông báo truy xuất mật khẩu. Tôi đã bouncing xung quanh stackoverflow cố gắng để có được một cảm giác của cách tốt nhất để làm điều này.Cách tốt nhất để tạo một "muối trang web" ngẫu nhiên được sử dụng trong việc tạo mã thông báo truy xuất mật khẩu là gì?
Dưới đây là quá trình thiết lập lại:
Khi người dùng yêu cầu một thiết lập lại mật khẩu email mã tạo ra một mã thông báo thu hồi:
$token = hash_hmac('sha256', $reset_hash* , $site_hash)
* $ reset_hash là một hash được tạo ra sử dụng phpass HashPassword() chức năng, lưu trong bảng người dùng.
Sau đó tôi gửi mã thông báo trong URL tới địa chỉ email của người dùng. Họ nhấp vào trước khi mã thông báo hết giờ trong một giờ. Tôi phù hợp với nội dung gửi của họ với mã thông báo được tạo phía máy chủ thử thách. Nếu nó phù hợp, sau đó họ buộc phải chọn một mật khẩu mới, và sau đó đăng nhập.
Tôi muốn biết cách tốt nhất để tạo $ site_key. Tôi đang nghĩ đến việc sử dụng một băm HMAC được hạt giống bằng số ngẫu nhiên:
$site_key = hash_hmac('sha256', MCRYPT_DEV_RANDOM, MCRYPT_DEV_RANDOM);
Điều này tạo ra một cái gì đó như thế này:
98bb403abbe62f5552f03494126a732c3be69b41401673b08cbfefa46d9e8999
Đây sẽ là một phù hợp ngẫu nhiên được sử dụng cho mục đích này? Tôi có quá nhiều điều này, hoặc tiếp cận nó một cách sai lầm?
I was inspired to use HMAC by this answer
EDIT: Tôi cố gắng để tránh một 'câu hỏi bí mật' bước thúc giục của một số đồng nghiệp của tôi, vì vậy tôi muốn liên kết đặt lại để cung cấp một bước duy nhất để đặt lại mật khẩu. Do đó, mối quan tâm của tôi là quá trình này đủ an toàn để bảo vệ hệ thống chứa thông tin nhạy cảm.
RESOLVED, hiện tại: Tôi sẽ đi với một nonce như được mô tả bởi The Rook làm mã thông báo đặt lại. Cảm ơn tất cả mọi người cho các ý kiến và phản hồi.
Tôi phải nói đây là cách quá phức tạp. Tôi sử dụng mã thông báo gồm cả chữ và số ngẫu nhiên 6 ký tự đơn giản, với thời gian chờ như bạn đã nói và phát hiện cơ bản về sức mạnh vũ phu. – Fosco
http: // stackoverflow.com/questions/1416060/if-i-make-the-muối-ngẫu nhiên-cho-mỗi-người-làm-như-do-i-xác thực-họ # đọc này, nó phải bao gồm hầu hết các khái niệm bạn cần phải hiểu. –
@Fosco: bằng cách phát hiện brute-force cơ bản, bạn có nghĩa là giới hạn số lần mã thông báo có thể được xác thực trong thời gian đặt lại được cho phép không? –