1. Viết chương trình mã hóa và giải mã một file văn bản ASCII trên máy tính bằng phương pháp mã hóa Ceasar.
2. Viết chương trình mã hóa và giải mã một file văn bản ASCII trên máy tính bằng phương pháp mã hóa Playfair.
3. Viết chương trình mã hóa và giải mã một file văn bản ASCII trên máy tính bằng phương pháp mã hóa Vigenerẹ
4. Viết chương trình hỗ trợ phá mã thay thế đơn bảng (bài tập 7 và 8), chương trình sẽ làm một số thao tác như thống kê tần suất các chữ cái, các digram, thực hiện phép thay thế…
29
CHƢƠNG 3. MÃHÓAĐỐIXỨNGHIỆN ĐẠI
Đối tượng c ủa các phương pháp mã hóa cổ điển là các bản tin ngôn ng ữ, một đơn vị
mã hóa là các ch ữ cái để áp dụng phương thức thay thế hay phương thức hoá n vị.
Cùng với s ự phát triển của máy tính, thông tin ngày một trở nên đa dạn g, một bản tin
bây giờ không chỉ đơn giản là bản tin gồm các chữ cái, mà có thể gồm cả các thông tin về định dạng văn bản như tài liệu HTML… Ngoài ra bản tin có thế xuất hiện dưới các loại hình khác như hình ảnh, video, âm thanh… Tất các bản tin đó đều được biểu diễn trên máy vi tính dưới dạng một dãy các số nhị phân. Trong máy tính các chữ cái được biểu diễn bằng mã ASCIỊ
Bản tin: attack
Mã ASCII: 97 116 116 97 99 107
Biểu diễn nhị phân: 01100001 01110100 01110100 01100001 01100011 01101011 Và cũng tương tự như bản tin ngôn ngữ, trong bản tin nhị phân cũng tồn tại một số đặc tính thống kê nào đó mà người phá mã có thể tận dụng để phá bản mã, dù rằng bản mã bây giờ tồn tại dưới dạng nhị phân. Mã hóa hiện đại quan tâm đến vấn đề chống phá mã trong các trường hợp biết trước bản rõ (known-plaintext), hay bản rõ được lựa chọn (chosen-plaintext).
Để minh họa cách thức thực hiện của mã hóa đối xứng hiện đại, chúng ta sử dụng bản rõ là các chữ cái của một ngôn ngữ gồm có 8 chữ cái A, B, C, D, E, F, G, H trong đó
Chữcái Nhịphân A 000 B 001 C 010 D 011 E 100 F 101 G 110 H 111
Giả sử dùng một khóa K gồm 4 bít 0101 để mã hóa bản rõ trên bằng phép XOR ⊕:
bản rõ: 1111 0000 0011 (head)
khóa: 0101 0101 0101
bản mã: 1010 0101 0110 (FBCG)
Trong phép mã hóa trên, đơn vị mã hóa không phải là một chữ cái mà là một khối 4 bít. Để giải mã, lấy bản mã XOR một lần nữa với khóa thì có lại bản rõ ban đầụ
Tuy nhiên, mã hóa bằng phép XOR như trên thì khá đơn giản ở hai điểm:
• Khóa được lặp lại, điều này bộc lộ điểm yếu giống như mã hóa Vigenerẹ Để khắc phục điều này, người ta dùng một bộ sinh số ngẫu nhiên để tạo khóa dài,
30
giả lập mã hóa One-Time pad. Đây là cơ sở thực hiện của mã dòng (stream cipher).
• Một khối được mã hóa bằng phép XOR với khóạ Điều này không an toàn vì chỉ cần biết một cặp khối bản rõ - bản mã (vd: 1111 và 1010), người phá mã dễ dàng tính được khóạ Để khắc phục điều này, người ta tìm ra các phép mã hóa phức tạp hơn phép XOR, và đây là cơ sở ra đời của mã khối (block cipher).