Khố ban đầu của DES là 64 bit nhƣng số bit thực sự sử dụng là 56 để tạo các khố con 48 bit, do vậy, độ dài khố của thuật tốn DES là 56 bit. Sử dụng khĩa 56-bit DES cho tốc độ tính tốn nhanh nhƣng dễ bị thám mã bằng vét cạn khĩa nhƣ Diffie & Hellman đã dự báo. Sau hơn 20 năm kể từ khi ra đời, DES đã bị phá mã bằng phƣơng pháp vét cạn khố: năm 1997 bằng mạng máy tính lớn trong vài tháng; năm 1998 bằng máy tìm khĩa đặc biệt trong vài ngày; năm 1999 bằng tổ hợp các máy trên trong 22 giờ 15‟. Trên lý thuyết, DES cũng cĩ thể bị thám mã bằng cách sử dụng thám mã vi phân hoặc tuyến tính. Tuy bị phá mã nhƣ vậy, nhƣng do chi phí để thực hiện khá cao nên DES vẫn tiếp tục đƣợc sử dụng trong một vài năm sau đĩ thơng qua các biến thể cải tiến nhƣ Triple DES. Triple DES (DES 3 lớp) thực chất là sử dụng liên tiếp ba lần thuật tốn DES để mã hố/giải mã với ba khố khác nhau: C = DESK3 { DES-1K2 { DESK1 (P) } }. Khi K1 = K2 = K3 thì đĩ chính là DES. Trên thực tế, cĩ thể sử dụng hai khố khi K1 = K3. Ƣu điểm của DES 3 lớp là chống lại đƣợc tấn cơng vét cạn khố nhƣng nhƣợc điểm của nĩ là thời gian mã hố và giải mã lâu.
Trong quá trình thiết kế thuật tốn DES phải chú ý loại bỏ các “khố yếu”. Khố yếu là khố mà từ nĩ tạo nên các khố con giống nhau. Khĩa k của DES gọi là yếu (weak) nếu Ek(Ek(x)) = x, x. Tƣơng tự, cũng cần loại bỏ các cặp “khố gần yếu”. Cặp khĩa (k1, k2) của DES gọi là gần yếu (semi-weak) nếu: Ek1(Ek2(x)) = x. Khố của thuật tốn DES thƣờng đƣợc tạo một cách ngẫu nhiên. Do vậy, trƣớc khi sử dụng cần kiểm tra xem nĩ cĩ thuộc các loại khố yếu hay gần yếu hay khơng? Nếu cĩ, chúng ta phải tạo lại khố ngẫu nhiên mới. Số lƣợng khố yếu và khố gần yếu khơng nhiều (16 khố), do đĩ, việc kiểm tra này hầu nhƣ khơng tốn thời gian.
Thuật tốn DES chỉ cho phép mã hố/giải mã 64 bit tức là 8 byte dữ liệu. Đối với dữ liệu lớn hơn, ngƣời ta sử dụng DES với các các kiểu (mode) khác nhau:
̶ Kiểu khối: Dữ liệu đƣợc chia thành các khối 8 byte và dùng DES để
xử lý từng khối đĩ (ECB và CBC).
̶ Kiểu dịng: Sử dụng DES nhƣ máy tạo dịng khố và dùng dịng khố
4.3.1 Kiểu ECB (Electronic Code Book)
Dữ liệu đƣợc chia thành các khối 8 byte và đƣợc mã hố riêng rẽ bằng DES với cùng một khố K: Ci = DESK (Pi). Sau đĩ, các khối kết quả Ci sẽ đƣợc ghép nối lại với nhau:
Hình 4.17 Mã hố kiểu ECB
Quá trình giải mã diễn ra hồn tồn ngƣợc lại với quá trình mã hố. Ƣu điểm của ECB là đơn giản và nhanh. Nhƣợc điểm của nĩ là khơng an tồn: Các khối nguồn giống nhau sẽ tạo thành các khối mã giống nhau, hơn nữa, do các khối đƣợc mã hố độc lập nên kẻ gian cĩ thể chèn một vài khối 8 byte vào trong quá trình mã hố và quan sát kết quả để lấy thơng tin thám mã mà ngƣời sử dụng cĩ thể khơng biết. Vì vậy, trên thực tế ECB ít khi dùng để mã hố dữ liệu lớn mà chỉ dùng để mã hố dữ liệu nhỏ, ví dụ nhƣ các khố mật mã.
4.3.2 Kiểu CBC (Cipher Block Chaining)
Để tránh các nhƣợc điểm của ECB, ngƣời ta sử dụng CBC với việc liên kết quá trình mã hố các khối với nhau. Kết quả mã hố của khối trƣớc sẽ tham gia làm một thành phần đầu vào cho khối tiếp theo. Đối với khối đầu tiên, sẽ sử dụng một vector khởi tạo (Initial Vector - IV) làm đầu vào. C0 = IV; Ci = DESK (Pi XOR Ci-1), i = 1, 2,…n.
CBC đã hồn tồn loại bỏ đƣợc nhƣợc điểm của ECB. Mỗi khối đích phụ thuộc vào tất cả các khối nguồn trƣớc đĩ và mọi thay đổi trên đƣờng truyền hoặc ở khối nguồn sẽ đƣợc thể hiện ở các khối mã sau khi xảy ra sự thay đổi. Điểm yếu của CBC chính là IV: nếu IV đƣợc gửi cơng khai cho ngƣời nhận, kẻ lạ cĩ thể thay đổi đồng thời IV và các bit ở khối thứ nhất theo ý muốn. Do đĩ, IV cần đƣợc cố định hoặc đƣợc mã hĩa và gửi bằng ECB cho ngƣời nhận ở phần đầu của thơng điệp.
Hình 4.18 Mã hố kiểu CBC
Cả trong ECB lẫn CBC chúng ta cần phải xử lý điều kiện biên. Đĩ là khi khối cuối cùng khơng đủ 8 byte. Trƣờng hợp này, chúng ta phải bổ sung vào khối cuối cùng một số byte 0 và ghi nhớ số byte vừa bổ sung vào để xử lý dữ liệu sau khi giải mã. Ví dụ, nếu byte cuối cùng là: [b1 b2 b3] thì ta cĩ thể bổ sung thêm 5 byte mới để cĩ đủ 8 byte nhƣ sau: [b1 b2 b3 00 00 00 00 05] (thêm 5 byte). Xử lý khối cuối cùng cĩ thể bằng nhiều cách khác nhau, tuy nhiên, cần thống nhất trong các thuật tốn mã hố và giải mã. CBC là kiểu sử dụng phổ biến, dùng để mã hố các khối dữ liệu lớn, do tính tiện lợi và an tồn của nĩ.
Trong CBC, kết quả của khối cuối cùng là Cn phụ thuộc vào tồn bộ các khối nguồn trƣớc của dữ liệu Pi (i = 1..n) nên cĩ thể đƣợc sử dụng nhƣ là một giá trị băm (hash value) của thơng điệp P. Khi đĩ CBC cĩ thể đƣợc sử dụng nhƣ là một hàm băm (hash function) 64 bit.
4.3.3 Kiểu OFB (Output Feedback)
Thơng điệp nguồn đƣợc chia thành các khối 64 bit Pi và đƣợc coi nhƣ là một dịng bit. Đầu ra của thuật tốn khối, một mặt XOR với các khối Pi để cho các khối Ci, mặt khác sẽ làm đầu vào cho mã hố khối sau.
O0 = IV; Oi = DESK (Oi-1); Ci = Pi XOR Oi với (i = 1..n). Do các Oi
khơng phụ thuộc vào thơng điệp mã hố (Ci) nên cĩ thể tính dịng khố gồm tất cả dãy Oi trƣớc sau đĩ mới sử dụng chúng để mã hố Pi. Quá trình giải mã thực hiện hồn tồn ngƣợc lại với quá trình mã hố.
Hình 4.19 Mã hố kiểu OFB
4.3.4 Kiểu CFB (Cipher Feedback)
Kiểu này gần giống với OFB, chỉ khác là giá trị tham gia vào vịng mã hố cho khối sau (Ji) khơng phải là Oi mà chính là Ci:
Khi đĩ: C0 = IV; Ji = Ci-1 ; Ci = Pi XOR DESK (Ji) với i = 1..n.
Hình 4.20 Mã hố kiểu CFB
4.4. CÂU HỎI VÀ BÀI TẬP
1. Tìm hiểu thêm về DES và các thuật tốn mã hố khối khác trên Internet: http://en.wikipdia.org/wiki/Data_Encryption_Standard
2. Giả sử DES đƣợc cài đặt nhƣ là một hàm nhận 8 byte dữ liệu đầu vào, 8 byte khĩa và xuất ra kết quả 8 byte. Hãy:
- Xây dựng chƣơng trình mã hĩa một dịng dữ liệu độ dài tùy ý, sử dụng một trong các kiểu ECB, CBC, CFB và OFB.
- Xây dựng chƣơng trình cho phép lựa chọn một trong bốn kiểu trên
Chương 5
CƠ SỞ LÝ THUYẾT SỐ
Chương 5 giới thiệu cơ sở nền tảng của mật mã hiện đại là lý thuyết số, bao gồm phép tính modulo, phép tính trên các trường hữu hạn, phép tính trên các số nguyên lớn và lý thuyết phức tạp.