Tôi không thực sự mạnh về mật mã, do đó, có câu hỏi của tôi.Có tốt hơn khi tạo chuỗi băm an toàn không?
Ứng dụng - diễn đàn của chúng tôi - gửi thông báo cho người dùng của chúng tôi về tin nhắn mới, nếu họ đã chọn. Trong email nên có một liên kết để hủy đăng ký nhận tin nhắn này. Bây giờ, tôi muốn liên kết đó hoạt động, ngay cả khi người dùng hiện không được xác thực tại dịch vụ của chúng tôi (không có cookie).
Để làm điều đó, tôi quyết định chỉ cần đăng theo yêu cầu với SHA1, như thế này:
http://example.com/unsubscribe?u=234&s=52342&h=0b071440146545eaf3f00ef9cdeb1d47d006dfff
đây u
là ID của người sử dụng, ai muốn bỏ đăng ký, s
là một số muối ngẫu nhiên, h
là băm an toàn được tính bằng cách nối tên của hành động (hủy đăng ký), tham số và giá trị của chúng (u = 234s = 52342) và một số chuỗi bí mật, được chỉ định trong cấu hình dịch vụ của chúng tôi và tính toán hàm băm SHA1 của chuỗi kết quả:
sha1('unsubscribeu=234s=52342supersecret')
Câu hỏi của tôi là về tham số này s
, được tạo ngẫu nhiên mỗi lần. Liệu nó có thêm vào an ninh ở đây hay không? Có thực sự cần thiết?
Nếu tôi sử dụng mã hóa thay vào đó, bạn có nên thêm loại muối này vào dữ liệu đang được mã hóa không?
Đây là một câu hỏi lý thuyết, vì rất khó có ai đó muốn đoán rằng "supersecret" tại dịch vụ của chúng tôi chỉ để prank-unsubscribe một loạt người dùng, nhưng vẫn thú vị.
Không, tôi không lưu trữ chúng trên máy chủ, tôi chỉ cần thêm chúng để liên kết chính nó sẽ khác nhau trong các email khác nhau mà người dùng nhận được ... Không chắc chắn liệu điều này có tốt hay không. –
Có và xác nhận tính hợp lệ của băm bao gồm ID của người dùng có nghĩa là không ai có thể tạo liên kết hủy đăng ký làm việc. Có giá trị 'bí mật' của bạn bao gồm trong đó có nghĩa là ai đó không thể làm điều đó ngay cả khi họ biết mọi chi tiết khác có liên quan. Các muối không thêm vào những người (mặc dù nó không làm tổn thương, hoặc là) –