Hầu hết mọi người gặp từ nonce trong một hồ sơ VPN và cho rằng đó là một bí mật chia sẻ khác để sao chép giữa các bên. Không phải vậy. Nonce là một giá trị không bao giờ được lặp lại dưới cùng một khóa, và trong phần lớn mã hóa dựa trên nonce, nó truyền đi ở dạng rõ. Sự nhầm lẫn vẫn vô hại cho đến khi ai đó sửa nó bằng tay, và đó là nơi hỏng hóc thực sự bắt đầu.

Nonce thực sự đến từ đâu

Mã hóa có xác thực cần một nonce khác nhau cho mỗi thông điệp được mã hóa dưới một khóa. Các giao thức đáp ứng yêu cầu này theo nhiều cách: một bộ đếm tăng đơn điệu, một muối kết hợp với mã nhận dạng gói, hoặc một giá trị ngẫu nhiên đủ dài. IKEv2 trao đổi nonce trong quá trình trao đổi ban đầu, và chúng là đầu vào công khai cho việc dẫn xuất khóa, không phải bí mật.

Tính duy nhất có thể mang tính cấu trúc hoặc xác suất. Bộ đếm không thể lặp lại cho đến khi quay vòng, vì vậy giao thức xác định một điểm đổi khóa từ rất lâu trước đó. Giá trị ngẫu nhiên dựa vào đủ bit để va chạm khó xảy ra trong giới hạn thông điệp, đây là một lập luận khác với một chế độ thất bại khác. Tài liệu giao thức nêu rõ phương pháp nào được áp dụng, và cả hai chỉ an toàn khi giới hạn đã nêu được tôn trọng.

DesignWhere uniqueness comes fromExhaustion is handled by
AES-GCM recordsAn IV, typically a counterRekey before the counter wraps
ChaCha20-Poly1305A 96-bit nonce from a counter or generatorA message limit per key
WireGuardA per-key 64-bit counterRekey at a message cap
OpenVPN AEADPacket identifier plus implicit key materialRekey on the packet-id limit
IKEv2Fresh nonces per exchangeA new security association

Dùng lại thực sự tốn kém những gì

Dùng lại một nonce dưới một khóa không phải là vấn đề hiệu quả nhỏ. Với GCM, hai thông điệp chia sẻ một IV cho phép người quan sát khôi phục khóa xác thực và tính phép hoặc loại trừ của hai bản rõ. Các cấu trúc dựa trên luồng dùng lại luồng khóa theo cùng cách, khiến bản mã trở thành một câu đố thay vì một bí mật.

Đó là lý do các triển khai đổi khóa trước khi bộ đếm quay vòng, và lý do chúng dừng lại thay vì tiếp tục khi trạng thái không chắc chắn. Một lần khởi động lại đặt lại bộ đếm trong khi đối tác vẫn giữ khóa cũ, hoặc một máy ảo được khôi phục từ ảnh chụp nhanh giữa phiên, chính là tình huống mà các giới hạn tồn tại để ngăn chặn. Không cần kẻ tấn công; các thao tác thông thường là đủ.

Vì sao sửa bằng tay là cách khắc phục sai

Bộ đếm, muối và mã nhận dạng gói là những máy trạng thái được cả hai đầu chia sẻ. Thay đổi một bên làm mất đồng bộ bên kia, và đường hầm hỏng theo những cách trông giống sự cố định tuyến. Đòn bẩy được hỗ trợ là một lần trao đổi khóa mới, đặt lại trạng thái ở cả hai đầu cùng lúc.

Mật khẩu và nonce cũng đóng vai trò khác nhau. Mật khẩu là đầu vào bí mật cho việc dẫn xuất khóa; nonce là đầu vào công khai cho mỗi thông điệp. Một trường hồ sơ có nhãn nonce yêu cầu một bí mật dài thường là khóa tĩnh hoặc bí mật chia sẻ trước dưới một tên khác, vì vậy hãy đọc tài liệu cho trường đó thay vì giả định.

Khi một khuyến cáo liên quan đến việc xử lý nonce, cách sửa là phiên bản đã vá của người bảo trì, không phải một mật mã khác hay một khóa ngắn hơn. Đổi mật mã để tránh từ nonce chỉ di chuyển vấn đề chứ không giải quyết nó.

Đọc cảnh báo mà không đoán

Một dòng nhật ký về bộ đếm hoặc nonce thường mô tả trạng thái bị mất chứ không phải một cuộc tấn công. Kiểm tra xem một đối tác có khởi động lại không, một máy ảo nhân bản có dùng lại cùng danh tính không, và hai đầu có đồng ý về cài đặt đổi khóa không. Sau đó thiết lập một phiên mới và xem thông điệp có quay lại không.

Giữ chẩn đoán tách khỏi những lỗi không liên quan. Một trang không tải được, hoặc một lời nhắc thông tin đăng nhập lặp vòng, không phải bằng chứng của việc dùng lại nonce, và coi nó như vậy sẽ đưa bạn vào tầng mật mã trong khi vấn đề nằm ở trên nó.

Đối với cách dùng thông thường, quy tắc an toàn rất ngắn: để triển khai quản lý nonce, giữ cả hai đầu trên các phiên bản được hỗ trợ, và coi mọi lần đặt lại trạng thái là lý do đổi khóa thay vì sửa một giá trị. Nếu một trường hồ sơ không có trong tài liệu của nhà cung cấp, đừng bịa ra giá trị cho nó. Sửa đường hầm bắt đầu bằng việc biết bạn đang nhìn tầng nào.

Bài viết liên quan