nghiên cứu về RC4.
Cấu trúc mã hóa dòng
Một mã dòng điển hình sẽ mã hóa bản rõ mỗi lần được 1 byte mặc dù mã dòng có thể được thiết kế để hoạt động mỗi lần trên 1 bit hay trên những đơn vị lớn hơn 1 byte. Sơ đồ 6.8 là biểu đồ biểu diễn cấu trúc mã hóa dòng. Trong cấu trúc này, một
khóa được đưa vào một bộ sinh chuỗi bit ngẫu nhiên giả mà tạo ra được một dòng những bộ đếm 8 bit bề ngoài có vẻ như ngẫu nhiên. Chúng ta sẽ bàn luận về bộ sinh số chuỗi ngẫu nhiên giả trong chương 7. Còn bây giờ, chúng ta đơn giản nói rằng một dòng chuỗi ngẫu nhiên giả thì không thể đoán trước được nếu không biết về khóa vào. Dữ liệu ra của bộ sinh, được gọi là dòng khóa, kết hợp mỗi lần 1 byte với dòng plaintext sử dụng phép toán đảo bit loại trừ OR (XOR). Ví dụ, nếu byte tiếp theo được tạo ra bởi bộ sinh là 01101100 còn byte plaintext kế tiếp là 11001100 thì dẫn đến byte bản mã sẽ là:
Hình 6.8. Biểu đồ Mật mã luồng
( Mục này được hiển thị trên trang 189 trong bản in )
Mã hóa dòng cũng tương tự như mật mã khóa sử dụng 1 lần (one-time pad) được nói đến ở chương 2. Khác nhau ở chỗ là one-time pad sử dụng dòng số ngẫu nhiên có thực trong khi mã hóa dòng sử dụng dòng số theo chuỗi ngẫu nhiên giả.
[KUMA97] liệt kê những chú ý quan trọng về thiết kế đối với mã hóa dòng như sau:
1. Chuỗi mã hóa nên có chu kì lớn. Bộ sinh chuỗi số ngẫu nhiên giả sử dụng cấu trúc tạo ra dòng bit tất định mà sau cũng cũng sẽ lặp lại. Chu kì lặp lại càng dài thì càng khó phân tích giải mã. Đây cũng là
lưu ý cần thiết khi bàn về mã Vigenere, đó là từ khóa càng dài thì càng khó giải mã.
2. Dòng khóa nên xấp xỉ càng gần với những tính chất của một dòng số ngẫu nhiên đích thực càng tốt. Ví dụ, nên có một số xấp xỉ bằng 1s và 0s. Nếu dòng khóa được xem như là 1 dòng bytes thì tất cả 256 giá trị byte có thể nên thường xuyên xuất hiện xấp xỉ tương đương. Dòng khóa xuất hiện càng ngẫu nhiên thì càng ngẫu nhiên hóa bản mã, làm cho việc giải mã càng khó hơn.
3. Chú ý ở hình 6.8, đầu ra của bộ phát chuỗi số ngẫu nhiên giả phụ thuộc vào giá trị của khóa vào. Để bảo vệ chống lại những tấn công dùng bạo lực thì khóa cần phải đủ dài. Những chú ý giống vậy khi áp dụng cho mã khối cũng có tác dụng ở đây. Như vậy, với công nghệ hiện tại thì độ dài khóa ít nhất 128 bit là thỏa đáng.
Với bộ sinh chuỗi số ngẫu nhiên giả được thiết kế hợp lí, một mã hóa dòng có thể an toàn ngang với mã khối với độ dài khóa so sánh được. Ưu điểm chính của 1 mã hóa dòng là những mã dòng hầu như lúc nào cũng nhanh hơn và sử dụng ít mã số hơn nhiều so với mã khối. Ví dụ trong phần này, RC4 có được thực thi chỉ bằng một vài dòng mật mã. Bảng 6.2 sử dụng dữ liệu từ [RESC01] so sánh thời gian thực hiện của RC4 với ba mã khối đối xứng nổi tiếng. Ưu điểm của mã khối là có thể sử dụng lại khóa. Tuy nhiên, nếu 2 bản gốc được mã hóa với cùng 1 khóa dùng mã dòng thì việc phân tích giải mã thường khá đơn giản [DAWS96]. Nếu 2 dòng bản mã được cùng sử dụng phép XOR thì kế quả là phép XOR của văn bản rõ gốc. Nếu bản rõ gồm những chuỗi văn bản, số thẻ tín dụng hay những dòng byte với tính chất đã biết thì việc phân tích giải mã có khả năng thành công.
Hình 6.2.So sánh tốc độ của thuật toán mã cân đối trên Pentium II
Cipher Key Length Speed (Mbps)
DES 56 9
3DES 168 3
RC2 variable 0.9
RC4 variable 45
Đối với những chương trình ứng dụng đòi hỏi việc hóa mã/ giải mã của một dòng dữ liệu như trên kênh thông tin dữ liệu hay một link trình duyệt/ web, thì mã hóa dòng có lẽ là cách thay thế tốt hơn cả, Đối với những ứng dụng xử lý những khối dữ liệu, như chuyển tải tài liệu, e-mail và cơ sở dữ liệu thì có lẽ mã khối thích hợp hơn. Tuy nhiên, loại mã nào cũng có thể sử dụng hầu hết trong các ứng dụng.