it-swarm-vi.com

Một nonce ngẫu nhiên nên kéo dài bao lâu?

NIST cung cấp hướng dẫn tốt về độ dài của khóa và giá trị băm cho các thuật toán khác nha . Nhưng tôi không thấy bất cứ điều gì cụ thể về độ dài của ngẫu nhiên hoặc giả ngẫu nhiên nonce (số được sử dụng một lần).

Nếu có một câu trả lời tốt cho nhiều mục đích sử dụng khác nhau, tôi rất muốn thấy điều đó. Nhưng để làm rõ điều này, tôi sẽ sử dụng tình huống "đặt lại mật khẩu qua email" phổ biến, trong đó máy chủ tạo một URL có thành phần đường dẫn giả ngẫu nhiên. Có vẻ hơi giống với Xác thực Digest HTTP, trong đó ví dụ trong RFC dường như có 136 bit (dcd98b7102dd2f0e8b11d0f600bfb0c093).

Tôi lưu ý rằng nhiều người dường như sử dụng UUID phiên bản 4 (cung cấp 122 bit giả ngẫu nhiên) hoặc điều này, như đã thảo luận tại GUID có an toàn cho mã thông báo một lần không? , mặc dù người dùng phải cẩn thận khi sử dụng các phiên bản UUID dễ đoán hơn trước đó và các cuộc tấn công cục bộ khó chịu liên tục vào trình tạo số ngẫu nhiên của Windows chủ yếu là vá vào năm 2008.

Nhưng bỏ qua rủi ro bị rối trong các phiên bản và triển khai UUID, có bao nhiêu bit giả ngẫu nhiên nên được kết hợp trong URL?

35
nealmcb

Một nonce 64 bit dường như là quá đủ cho hầu hết các mục đích thực tế, nếu 64 bit là ngẫu nhiên chất lượng tiền điện tử.

Tại sao 64 bit là đủ? Hãy để tôi đưa ra loại lý do bạn có thể sử dụng để trả lời câu hỏi này. Tôi sẽ cho rằng đây là một URL giới hạn thời gian sử dụng một lần; sau khi được sử dụng một lần, nó không còn hiệu lực, và sau một thời gian (3 ngày, nói), nó hết hạn và không còn hiệu lực. Vì nonce chỉ có ý nghĩa đối với máy chủ, nên cách duy nhất mà kẻ tấn công có thể thử đoán là gửi dự đoán 64 bit đến máy chủ và xem máy chủ phản hồi như thế nào. Kẻ tấn công có thể thử bao nhiêu lần trong thời gian trước khi nonce hết hạn? Giả sử kẻ tấn công có thể thực hiện 1000 yêu cầu HTTP mỗi giây (đó là một kẻ tấn công khá mạnh mẽ); sau đó kẻ tấn công có thể tạo ra khoảng 1000 * 3600 * 24 * 3 = 228 đoán trong khoảng thời gian 3 ngày. Mỗi lần đoán có 1/264 cơ hội là đúng Do đó, kẻ tấn công có nhiều nhất là 1/236 cơ hội phá vỡ kế hoạch. Điều đó nên đủ an toàn cho hầu hết các cài đặt.

23
D.W.

Đầu tiên, hãy ước tính số lượng sử dụng tối đa mà hệ thống của bạn sẽ nhận được (số lần một lần mở ngẫu nhiên sẽ được tạo ra). Tiếp theo, quyết định mức độ bảo mật có thể chấp nhận, nghĩa là, mức độ không thể xảy ra là một nonce là bản sao của một mức cũ. Tính toán lượng sử dụng theo bit, nhân đôi số đó và thêm khả năng bạn cần theo bit và bạn có độ dài nonce của mình.

Một ví dụ từ AES-GCM với IV ngẫu nhiên. Số lần gọi được phép với IV ngẫu nhiên cho một khóa nhất định là 232. Xác suất IV được tái sử dụng phải nhỏ hơn 2-32. Độ dài nonce cần thiết cho điều này là 32 × 2 + 32 == 96 bit.

Nếu, theo giả thuyết, bạn muốn có thể tạo 296 các gói, mỗi gói có một lần mở ngẫu nhiên và muốn xác suất của một lần không trùng lặp nhỏ hơn 2-32, bạn cần một nonce dài 96 × 2 + 32 == 224 bit.

So sánh câu trả lời này với câu trả lời trên 64 bit ... nếu bạn có nhiều hơn 216 (65536) việc sử dụng hệ thống của bạn, xác suất có một lần không trùng lặp trong thời gian đó là hơn 2-32 (hơn 1 trên 4 tỷ, quy mô ngắn). Điều này có thể hoàn toàn chấp nhận được, tùy thuộc vào yêu cầu bảo mật của bạn hoặc có thể không.

Vì một kích thước phù hợp với tất cả câu trả lời - các UUID ngẫu nhiên được đề cập là một giải pháp khá ổn.

Xin lưu ý rằng các giá trị này là xấp xỉ và các phép tính chính xác hơn phức tạp hơn nhiều.

7
Nakedible