Trong một câu trả lời của đây ai đó đề cập:
nếu bạn có hàm băm với quyền hạn tiên tri, thì khá dễ dàng để tạo luồng giả ngẫu nhiên từ khóa bí mật, bằng cách băm K||n trong đó K là khóa bí mật và n là bộ đếm. Bằng cách XOR luồng giả ngẫu nhiên phụ thuộc khóa này với dữ liệu cần mã hóa, bạn có một mật mã luồng.
Trong cùng một bài đăng cũng có phần này liên quan đến việc sử dụng các hàm băm mật mã để tạo mật mã luồng:
Hàm băm mật mã là một hàm chống lại tiền ảnh, tiền ảnh thứ hai và va chạm. Theo như tôi biết, người ta chưa chứng minh được rằng những điều kiện này là đủ để xây dựng mật mã luồng.
Theo như tôi biết, tất cả các thuật toán đối xứng hiện có, đặc biệt là AES, chỉ được cho là an toàn. Bằng chứng duy nhất mà chúng tôi có liên quan đến tính bảo mật của chúng là việc sử dụng chúng trong thực tế và các cuộc tấn công đã được thử cho đến nay không làm giảm nghiêm trọng tính bảo mật của các thuật toán đó.
Có phải vấn đề "chưa được chứng minh rằng những điều kiện này là đủ để xây dựng mật mã luồng" thực sự là vấn đề duy nhất?
Các vấn đề khác với mật mã luồng do hàm băm gây ra là gì? Có lẽ họ kém an toàn hơn? Có lẽ họ chậm hơn? Có lẽ họ đang sử dụng nhiều bộ nhớ? Có phải chỉ là có những thuật toán mã hóa khác được nghiên cứu hứa hẹn kết quả tốt hơn?
Tôi cho rằng một hàm băm có kích thước khối lớn hơn có lợi thế là có thể sử dụng các khóa dài hơn hoặc các nonce dài hơn. Đối với SHA-512, người ta có thể sử dụng khóa có độ dài 384 bit và độ dài 128 bit. Một khả năng khác là tiếp tục sử dụng khóa 256 bit, sử dụng khóa 128 bit và có kích thước thông báo tối đa tốt hơn là 2^128 khối (hoặc 2^137 bit cho SHA-512) so với ~2^39 bit cho AES-GCM với chỉ nonces 96 bit (theo ý kiến của tôi sẽ là một mục tiêu tốt).