ChaCha20 là mật mã luồng và xuất ra luồng $O_i$ để mã hóa các tin nhắn để có được bản mã $$C_i = M_i\oplus O_i$$ Mã hóa tiếp theo của bạn sẽ là $$C_i' = M_i\oplus O_i \oplus O_i'$$ ở đâu $O_i'$ là đầu ra của ChaCha20 thứ hai với một khóa khác.
Chà, điều bạn đang hỏi là cuộc tấn công chỉ bằng bản mã vào ChaCha20. Không ai có thể làm điều này đối với mã hóa đơn lẻ, nhưng không có sự phân biệt. Đầu ra của một ChaCha20 duy nhất đủ tốt để người ta không thể phân biệt nó với ngẫu nhiên. Vì vậy, kẻ tấn công có thể xem tất cả các tin nhắn có thể có miễn là không gian tin nhắn không ngắn hoặc tồn tại một số phương thức xác minh khác giống như một máy chủ hoạt động như một Oracle.
Vì bây giờ họ đã lấy được kết quả của lần mã hóa thứ hai cho đến lần cuối cùng (chứ không phải tài liệu gốc), vậy thì làm sao họ biết rằng họ đã thành công?
Loại bỏ các lớp không hữu ích ở đây vì $$random \oplus tin nhắn = ngẫu nhiên$$ Vì vậy, sẽ không có thông tin để xác minh.
Đây không phải là vấn đề thực sự của bạn, vấn đề thực sự của bạn sẽ là việc quản lý các phím. Hãy cẩn thận với cách bạn tạo/lấy chúng và cách bạn lưu trữ/xuất phát.
Sử dụng một ChaCha20 duy nhất với 256 bit của khóa là đủ để an toàn trước tất cả các đối thủ (cổ điển hoặc lượng tử) với một khóa ngẫu nhiên thống nhất. Nếu bạn thực sự muốn sử dụng mã hóa kép, hãy kết hợp nó với một thuật toán mã hóa khác như AES-GCM.
Hãy nhớ rằng, việc xem xét và phân tích đa mã hóa (xếp tầng) bắt đầu với việc xem xét điểm yếu của DES. Ueli M. Maurer & James L. Massey năm 1993 trình chiếu trong Cascade Ciphers: Tầm quan trọng của việc trở thành người đầu tiên cái này;
- Cấu trúc theo tầng được bảo mật như mật mã đầu tiên và bảo mật hơn không được đảm bảo. Có một bài đăng trên blog của Matthew Green về chủ đề này; Nhiều mã hóa như đã lưu ý bởi SAI Peregrinus.
Đối với mật mã luồng, chúng tôi có một kết quả khác (lại là Maurer và Massey);
- Hệ quả 2. Modul theo bit $2$ Tổng của $n$ chuỗi khóa được tạo bởi các thiết bị có khóa độc lập ít nhất cũng khó dự đoán như chuỗi khóa khó dự đoán nhất.