Trước khi nói về các cuộc tấn công, tôi khuyên bạn nên sử dụng khóa ngẫu nhiên có đủ bit (ít nhất 128 bit) thay vì mật khẩu. Bạn không cần phải băm khóa nhiều lần, chỉ cần sử dụng một khóa tốt. Nếu nó được lấy từ mật khẩu, hãy sử dụng chức năng dẫn xuất Khóa tốt để lấy khóa và sử dụng nó thay thế.
Bây giờ trở lại câu hỏi của bạn, chính bạn đã nói rằng, cuộc tấn công bằng văn bản đơn giản đã biết là có thể xảy ra. Và thật dễ dàng để làm điều đó.Tất cả những gì bạn cần biết là một khối văn bản thuần túy để khôi phục tất cả văn bản thuần túy tiếp theo bằng cách tiết lộ hàm băm tại khối đó. Đây là mức độ bảo mật thấp hơn rất nhiều so với những gì được mong đợi của các mật mã hiện đại được thiết kế để bảo mật trước các đối thủ có khả năng thực hiện các cuộc tấn công bằng văn bản rõ hoặc bản mã đã chọn. Thậm chí không khó để tìm ra hoặc ít nhất là thu hẹp số lần thử khả thi cho một khối bản rõ dựa trên định dạng tệp, ít thông tin có sẵn về chủ sở hữu tệp, v.v., có thể được sử dụng để giải mã toàn bộ bản mã.
Trên thực tế, rất lâu trước đây tôi cũng đã nghĩ về một mật mã tương tự, nhưng thay vì chỉ băm mọi thứ lặp đi lặp lại, tôi đã nghĩ đến việc thực hiện xor nửa bên trái của kết quả băm với khối văn bản gốc và băm nửa bên phải cho khối tiếp theo. Điều này có thể được chọn ngẫu nhiên bằng cách trộn số ngẫu nhiên công khai với khóa. Một cách khác nổi tiếng hơn là sử dụng hàm băm trong chế độ CTR để tạo luồng giống như cách chúng tôi làm với mật mã khối vì chế độ CTR không yêu cầu bạn phải có khả năng giải mã khối. Như kelalaka đã chỉ ra, nó cũng cung cấp quyền truy cập ngẫu nhiên.
Nhưng hãy nhớ rằng điều này không thể được chứng minh là an toàn trong mô hình đơn giản và do đó bạn không thể chắc chắn về tính bảo mật của nó với các hàm băm như SHA-2, vốn không được thiết kế để sử dụng theo cách này. Điều này đòi hỏi một giả định nữa rằng hàm băm của bạn đủ gần với một lời tiên tri ngẫu nhiên để sử dụng như thế này một cách an toàn. Và ngay cả khi nó an toàn với các hàm băm phổ biến, nó có thể sẽ không được sử dụng rộng rãi vì nó sẽ chậm hơn rất nhiều so với AES hoặc Chacha20 được phần cứng hỗ trợ (cũng sử dụng chế độ CTR như đã đề cập ở trên).