Mật mã dòng
Mật mã dòng mã hóa dữ liệu bằng cách tạo ra một luồng khóa giả ngẫu nhiên từ một khóa bí mật và kết hợp nó với văn bản gốc, thường là từng bit hoặc từng byte một, mô phỏng tấm khóa dùng một lần (one-time pad) bảo mật hoàn hảo với một khóa ngắn.
Definition
Mật mã dòng là một lược đồ mã hóa đối xứng tạo ra một luồng khóa giả ngẫu nhiên dài từ một khóa bí mật (và thường là một nonce) và mã hóa bằng cách kết hợp luồng khóa với văn bản gốc, phổ biến nhất là bằng phép XOR từng bit.
Scope
Chủ đề này bao gồm thiết kế và phân tích mật mã dòng: bộ tạo luồng khóa được xây dựng từ các thanh ghi dịch phản hồi tuyến tính, các cấu trúc bộ kết hợp và bộ lọc, và các thiết kế hiện đại hướng phần mềm như ChaCha20 và danh mục eSTREAM. Nó đề cập đến mối quan hệ với tấm khóa dùng một lần, yêu cầu quan trọng là không bao giờ tái sử dụng luồng khóa, và các cuộc tấn công phát sinh từ việc tái sử dụng luồng khóa hoặc các bộ tạo yếu. Nó không bao gồm mật mã khối, mặc dù một mật mã khối ở chế độ bộ đếm (counter mode) hoạt động hiệu quả như một mật mã dòng.
Core questions
- Làm thế nào một khóa ngắn có thể được kéo dài thành một luồng khóa dài, không thể đoán trước, bắt chước một tấm khóa dùng một lần?
- Tại sao việc tái sử dụng luồng khóa lại gây thảm họa, và làm thế nào các nonce ngăn chặn điều đó?
- Điều gì làm cho một bộ tạo luồng khóa mạnh về mặt mật mã chứ không chỉ đơn thuần là ngẫu nhiên về mặt thống kê?
- Làm thế nào các mật mã dòng hiện đại như ChaCha20 đạt được tốc độ mà không cần phần cứng chuyên dụng?
- Những cuộc tấn công cổ điển nào (tương quan, đại số) phá vỡ các thiết kế dựa trên LFSR yếu?
Key concepts
- luồng khóa
- tấm khóa dùng một lần
- thanh ghi dịch phản hồi tuyến tính
- nonce và vector khởi tạo
- tái sử dụng luồng khóa (tấm khóa hai lần)
- ChaCha20 và Salsa20
- tấn công tương quan
- mật mã đồng bộ so với mật mã tự đồng bộ
Key theories
- Tấm khóa dùng một lần và bảo mật hoàn hảo
- Mã hóa bằng phép XOR với một khóa thực sự ngẫu nhiên dài bằng thông điệp đạt được bảo mật hoàn hảo của Shannon; mật mã dòng xấp xỉ điều này bằng cách thay thế một luồng khóa giả ngẫu nhiên cho tấm khóa thực sự ngẫu nhiên không thực tế.
- Tạo luồng khóa và tính giả ngẫu nhiên mật mã
- Một mật mã dòng an toàn là một bộ tạo giả ngẫu nhiên: luồng khóa của nó phải không thể phân biệt được về mặt tính toán với ngẫu nhiên, để không một kẻ tấn công hiệu quả nào có thể dự đoán các bit luồng khóa trong tương lai ngay cả sau khi quan sát nhiều.
Mechanisms
Một mật mã dòng đồng bộ khởi tạo trạng thái nội bộ từ khóa và nonce, sau đó liên tục cập nhật trạng thái và phát ra đầu ra luồng khóa độc lập với văn bản gốc. Luồng khóa được XOR với văn bản gốc để mã hóa và với văn bản mã hóa để giải mã. Các thiết kế dựa trên thanh ghi dịch phản hồi tuyến tính nhanh trong phần cứng nhưng yêu cầu các bộ kết hợp phi tuyến tính để chống lại các cuộc tấn công đại số; các mật mã phần mềm như ChaCha20 sử dụng các phép toán cộng-xoay-XOR (ARX) trên một trạng thái lớn để đạt tốc độ và bảo mật.
Clinical relevance
ChaCha20 (với bộ xác thực Poly1305) được triển khai rộng rãi trong TLS 1.3, OpenSSH, WireGuard và nhắn tin di động, nơi nó được ưu tiên hơn AES trên các thiết bị thiếu khả năng tăng tốc AES bằng phần cứng. Mật mã dòng rất phù hợp cho truyền phát đa phương tiện và các liên kết có độ trễ thấp. Trong lịch sử, mật mã dòng RC4 đã bảo vệ các phiên bản SSL/TLS và WEP Wi-Fi ban đầu cho đến khi các sai lệch của nó dẫn đến việc ngừng sử dụng.
Evidence & guidelines
ChaCha20-Poly1305 được chuẩn hóa trong RFC 8439 và được chấp thuận cho TLS. RC4 bị cấm trong TLS bởi RFC 7465 do các sai lệch của luồng khóa. Dự án eSTREAM (2004-2008) đã tạo ra một danh mục mật mã dòng được kiểm định. Quy tắc cơ bản trong tất cả các tiêu chuẩn là một cặp (khóa, nonce) không bao giờ được tái sử dụng.
History
Mật mã dòng có nguồn gốc từ mật mã Vernam (1917) và tấm khóa dùng một lần. Các hệ thống quân sự thời Chiến tranh Lạnh đã sử dụng các bộ tạo luồng khóa dựa trên thanh ghi dịch. RC4, được Ron Rivest thiết kế vào năm 1987, đã trở nên cực kỳ phổ biến nhưng cuối cùng đã bị phá vỡ trong các ứng dụng giao thức của nó. Cuộc thi eSTREAM và họ Salsa20/ChaCha20 của Daniel Bernstein (2008) đã định nghĩa thế hệ hiện đại, thân thiện với phần mềm hiện đang được ưa chuộng trong các giao thức internet.
Key figures
- Claude Shannon
- Daniel J. Bernstein
- Ronald Rivest
- Adi Shamir
Related topics
Seminal works
- shannon1949
- katz2020
- menezes1996
Frequently asked questions
- Điều gì xảy ra nếu luồng khóa của mật mã dòng bị tái sử dụng?
- XOR hai văn bản mã hóa được mã hóa bằng cùng một luồng khóa sẽ loại bỏ luồng khóa, để lại phép XOR của hai văn bản gốc — điều này thường tiết lộ cả hai thông điệp. Đây là lý do tại sao mỗi lần mã hóa phải sử dụng một nonce mới để luồng khóa không bao giờ lặp lại dưới một khóa cố định.
- Mật mã dòng có kém an toàn hơn mật mã khối không?
- Không phải vốn dĩ. Các mật mã dòng hiện đại như ChaCha20 được coi là an toàn như AES và đôi khi nhanh hơn trong phần mềm. Sự không an toàn phát sinh từ việc sử dụng sai (tái sử dụng luồng khóa) hoặc các thiết kế cũ yếu như RC4, chứ không phải từ bản thân khái niệm mật mã dòng.