Hãy xem xét một mật mã khối trong chế độ CTR. Và hãy xem xét một PRNG có khóa hoặc chỉ một PRNG tốt với một hạt giống là khóa. PRNG phải rất nhanh.
Có nên loại bỏ lịch trình khóa và thực hiện lập lịch khóa "vô hạn" bằng cách tạo một dòng khóa không? Sau đó, mọi khối trong mật mã sẽ được mã hóa bằng một khóa khác.
Tất nhiên, ngay cả một PRNG nhanh cũng cần một thời gian để tạo ra một vài 128
-bit phím cho một mật mã. Nhưng điều này không làm tăng đáng kể tính bảo mật của một thuật toán như vậy sao? Nếu bản thân thuật toán là một nguyên thủy rất nhanh (giả sử nhanh như Chacha20), thì thuật toán đó phải có độ bảo mật tuyệt vời và tốc độ tốt nếu được kết hợp với "luồng lịch trình chính" như thế này.
Tuy nhiên, tôi nghi ngờ rằng tốc độ của một giải pháp như vậy có thể là một trở ngại đáng kể. Được rồi, vậy hãy thực hiện thay đổi mỗi khi thuật toán được lặp lại (mã hóa đơn lẻ)--chỉ lật một bit của khóa mỗi vòng. Nếu thuật toán yêu cầu một khóa mỗi vòng và có mười vòng, thì chúng ta chỉ cần mười bit. PRNG sẽ tạo ra các bit như vậy rất nhanh. Khi đó các khóa được thay đổi sau mỗi lần mã hóa, tuy không nhiều (chúng ta chỉ thay đổi một bit trong mỗi khóa) nhưng sẽ là một trở ngại rất lớn cho kẻ tấn công.
Có lẽ chúng ta có thể sử dụng thứ gì đó đơn giản chẳng hạn như hai vòng AES nhưng không thêm hai vòng nữa vào mật mã. Vì vậy, hãy sử dụng điều này để tạo ra một dòng khóa để trộn với các khóa trong một mã hóa mới.
Câu hỏi của tôi là về những bất lợi của một giải pháp như vậy. Theo như tôi biết, nó không được sử dụng - tại sao? Nói cách khác, tại sao chúng ta sử dụng các hằng số và các khóa giống nhau trong các vòng (khi mã hóa số lượng lớn thông điệp ) khi các khóa có thể được sửa đổi với chi phí thấp sau mỗi lần mã hóa; ví dụ: bằng cách thêm một bit mod 2 (sau một lần mã hóa khác, chúng tôi thêm một bit khác ở vị trí cao hơn, v.v., thay đổi tất cả các khóa 128 bit sau 128 lần mã hóa).