Tôi nhận thấy rằng thông số OAuth không chỉ định bất kỳ điều gì về nguồn gốc của mã ConsumerKey, ConsumerSecret, AccessToken, RequestToken, TokenSecret hoặc Verifier, nhưng tôi tò mò liệu có bất kỳ phương pháp hay nhất nào để tạo mã thông báo an toàn đáng kể (đặc biệt là Token / Kết hợp bí mật).
Như tôi thấy, có một số cách tiếp cận để tạo mã thông báo:
- Chỉ cần sử dụng các byte ngẫu nhiên, lưu trữ trong DB được liên kết với người tiêu dùng / người dùng
- Băm một số dữ liệu người dùng / người dùng cụ thể, lưu trữ trong DB được liên kết với khách hàng / người dùng
- Mã hóa dữ liệu người dùng / người tiêu dùng cụ thể
Ưu điểm của (1) là cơ sở dữ liệu là nguồn duy nhất của thông tin có vẻ an toàn nhất. Sẽ khó hơn để tấn công chống lại (2) hoặc (3).
Băm dữ liệu thực (2) sẽ cho phép tạo lại mã thông báo từ dữ liệu có lẽ đã biết. Có thể không thực sự cung cấp bất kỳ lợi ích nào cho (1) vì dù sao cũng cần lưu trữ / tra cứu. Nhiều CPU hơn (1).
Mã hóa dữ liệu thực (3) sẽ cho phép giải mã để biết thông tin. Điều này sẽ yêu cầu ít bộ nhớ hơn và có khả năng ít tra cứu hơn (1) & (2), nhưng cũng có khả năng kém an toàn hơn.
Có bất kỳ cách tiếp cận / ưu điểm / nhược điểm nào khác cần được xem xét không?
CHỈNH SỬA: một cân nhắc khác là PHẢI có một số loại giá trị ngẫu nhiên trong Mã thông báo vì phải tồn tại khả năng hết hạn và phát hành lại mã thông báo mới để nó không được chỉ bao gồm dữ liệu thực.
Theo dõi các câu hỏi :
Có độ dài mã thông báo tối thiểu để đảm bảo an toàn về mặt mật mã không? Theo tôi hiểu, Token Secrets dài hơn sẽ tạo ra nhiều chữ ký an toàn hơn. Cách hiểu này có đúng không?
Có lợi thế nào khi sử dụng một mã hóa cụ thể so với một mã hóa khác từ góc độ băm không? Ví dụ: tôi thấy rất nhiều API sử dụng mã hóa hex (ví dụ: chuỗi GUID). Trong thuật toán ký OAuth, Mã thông báo được sử dụng dưới dạng một chuỗi. Với một chuỗi hex, tập ký tự có sẵn sẽ nhỏ hơn nhiều (dễ đoán hơn) so với mã hóa Base64. Đối với tôi, dường như đối với hai chuỗi có độ dài bằng nhau, chuỗi nào có bộ ký tự lớn hơn sẽ có phân phối băm tốt hơn / rộng hơn. Điều này có vẻ như với tôi rằng nó sẽ cải thiện bảo mật. Giả thiết này có đúng không?
Đặc tả OAuth đặt ra vấn đề này rất chính xác trong 11.10 Entropy of Secrets .