Cách mã hóa và giải mã giữa mật mã khối và mật mã luồng có sự khác biệt. Mật mã khối sẽ mã hóa và giải mã văn bản trên một khối văn bản cùng lúc. Trong khi đó, mật mã luồng sẽ thực hiện mã hóa và giải mã văn bản bằng cách xử lý từng byte của văn bản tại một thời điểm.
Biểu đồ so sánh
Cơ sở để so sánh | Khóa mật mã | Mật mã dòng |
---|---|---|
Căn bản | Chuyển đổi văn bản đơn giản bằng cách lấy khối của nó tại một thời điểm. | Chuyển đổi văn bản bằng cách lấy một byte của văn bản đơn giản tại một thời điểm. |
Phức tạp | Thiết kế đơn giản | Phức tạp tương đối |
Không có bit nào được sử dụng | 64 bit trở lên | 8 bit |
Nhầm lẫn và khuếch tán | Sử dụng cả nhầm lẫn và khuếch tán | Chỉ dựa vào nhầm lẫn |
Các chế độ thuật toán được sử dụng | ECB (Sách mã điện tử)
CBC (Chuỗi khối mã hóa) |
CFB (Phản hồi mật mã)
OFB (Phản hồi đầu ra) |
Sự đảo ngược | Đảo ngược văn bản được mã hóa là khó. | Nó sử dụng XOR để mã hóa có thể dễ dàng đảo ngược thành văn bản thuần túy. |
Thực hiện | Mật mã Feistel | Mật mã Vernam |
Định nghĩa về mật mã khối
Một khối được dùng làm đầu vào cho quá trình mã hóa, nó sẽ chứa một thông điệp được phân chia thành các khối có kích thước nhất định và được chuyển đổi ngay lập tức. Ví dụ, khi có một thông điệp đơn giản như STREET_BY_STREET, ta sử dụng thuật toán mã hóa block để mã hóa. Đầu tiên, chúng ta sẽ mã hóa khối STREET, sau đó là khối _BY_ và cuối cùng là khối STREET cuối cùng.
Việc truyền thông trong thực tế chỉ diễn ra dưới dạng các bit. Vì vậy, STREET thực sự có ý nghĩa tương đương với nhị phân của ký tự ASCII của STREET. Sau đó, các thuật toán mã hóa sẽ thực hiện việc này và các bit kết quả sẽ được chuyển đổi trở lại thành các ký tự ASCII tương đương của chúng.
Sử dụng phương pháp mã khối gặp phải một trở ngại đáng kể, đó là sự lặp lại của văn bản và dẫn đến việc tạo ra mật mã giống nhau. Điều này khiến cho việc phân tích mật mã trở nên dễ dàng hơn, vì nhà phân tích có thể dễ dàng nhận ra các chuỗi định kỳ của văn bản gốc và từ đó tiết lộ toàn bộ nội dung tin nhắn.
Để giải quyết vấn đề này, ta có thể áp dụng phương pháp xích. Theo cách này, khối hiện tại sẽ được pha trộn với khối văn bản mã hóa trước để tránh tình trạng lặp lại các khối có nội dung giống nhau với văn bản mã hóa không rõ ràng.
Định nghĩa về mật mã dòng
Stream cipher thường mã hóa một byte tin nhắn tại thời điểm đó bằng cách thay vì sử dụng các khối. Ví dụ, giả sử thông điệp ban đầu (văn bản thuần túy) là màu xanh da trời, trong định dạng ASCII. Khi bạn chuyển đổi các ký tự ASCII này thành các giá trị nhị phân tương đương, nó sẽ cho ra kết quả ở dạng 0 và 1. Hãy chuyển đổi nó thành chuỗi 010111001.
Để mã hóa và giải mã, chúng ta sử dụng một công cụ tạo số ngẫu nhiên, trong đó khóa và văn bản thuần túy được tải. Công cụ tạo số ngẫu nhiên sẽ tạo ra một chuỗi số 8 bit dường như ngẫu nhiên, được gọi là chuỗi chính. Đầu vào là khóa có giá trị 100101011. Sau đó, khóa và văn bản gốc được XOR với nhau. Phép toán XOR rất đơn giản để hiểu.
Khi một trong hai đầu vào là 0 và đầu vào còn lại là 1, kết quả của phép XOR sẽ là 1. Trong trường hợp cả hai đầu vào đều là 0 hoặc cả hai đầu vào đều là 1, phép XOR sẽ cho ra kết quả là 0.
Một kỹ thuật đảm bảo rằng nội dung mã hóa không tiết lộ bất kỳ thông tin nào về nội dung gốc là sơ suất. Phương pháp phổ biến được áp dụng để tăng cường sự thừa thải của văn bản đơn giản bằng cách phân bố nó trên các dòng và cột.
Sự khác biệt chính giữa Mật mã khối và Mật mã dòng
Phần kết luận:
Tư tưởng đằng sau thuật toán mã khối là phân chia nội dung đơn giản thành các phân đoạn, sau đó mã hóa và giải mã từng phân đoạn. Tuy nhiên, mã hóa dòng sử dụng cách chuyển đổi nội dung đơn giản từng bit như một dòng liên tục, không phân chia thành các phân đoạn. Vì thế, phương pháp mã hóa và giải mã của hai loại mã này được thực hiện theo cách khác nhau.