Một số vấn đề cơ bản về các thuật toán mã khối
1. Mở đầu
Lịch sử phát triển của khoa học mật mã đã nảy sinh ra các hệ mật khóa bí mật và hệ mật khóa công khai. Các hệ mật khóa bí mật thường được chia thành các hệ mã khối và hệ mã dòng. Đối với mã khối bản rõ có dạng các khối “lớn” (chẳng hạn 128-bit) và dãy các khối đều được mã bởi cùng một hàm mã hóa, tức là bộ mã hóa là một hàm không nhớ. Trong mã dòng, bản rõ thường là dãy các khối “nhỏ” (thường là 1-bit) và được biến đổi bởi một bộ mã hóa có nhớ. Các hệ mã khối có ưu điểm là chúng có thể được chuẩn hóa một cách dễ dàng, bởi vì các đơn vị xử lý thông tin hiện nay thường có dạng block như byte hoặc word.
Giả sử F2 là trường Galois hai phần tử. Ký hiệu F2m là không gian véc tơ các bộ m-tuples các phần tử của F2. Giả thiết rằng, bản rõ x, bản mã y lấy các giá trị trong không gian F2m, còn khóa z lấy giá trị trong không gian F2k. Một hệ mã khối khóa bí mật là một ánh xạ E: F2m x Sz g F2m, sao cho với mỗi z 0 Sz, E(., z) là một ánh xạ có ngược từ F2m vào F2m. Một hệ mã khối tốt là phải khó phá và dễ sử dụng. Cả hai hàm mã hóa E(., z) và hàm giải mã D(., z) đều dễ dàng tính toán. Còn việc giải khóa z từ y = E(x, z) và x = D(y, z) nên là bài toán khó. Khi xem xét một hệ mã khối, trước tiên các tham số sau của chúng cần được quan tâm: Độ dài khối m phải đủ lớn để ngăn cản các tấn công phân tích thống kê, tức là để không cho đối phương thu được thông tin có ích nào về khối rõ nào đó thường xuất hiện nhiều hơn các khối rõ khác, hoặc số các cặp rõ/mã mà đối phương có thể thu nhận được trong thực tế phải nhỏ hơn rất nhiều so với 2m; Độ dài khóa k và cỡ khóa đúng kt phải an toàn chống lại tấn công vét cạn khóa. Mặt khác, độ dài khóa k cũng cần nhỏ ở mức nào đó sao cho việc tạo, phân phối và lưu trữ khóa có thể thực hiện được hiệu quả và an toàn.
Các mã khối hiện nay nói chung được thiết kế đảm bảo các yếu tố về độ an toàn và hiệu quả trên cơ sở đảm bảo các nguyên lý sau đây. Nguyên lý về độ hỗn độn (confusion), tức là sự phụ thuộc của khóa trên bản rõ và bản mã nên phải phức tạp sao cho nó không có ích gì đối với thám mã. Chẳng hạn, phương trình nhị phân mô tả mã khối nên là phi tuyến và phức tạp sao cho để việc giải khóa z từ x và y = E(x, z) là không thể. Nguyên lý về độ khuyếch tán (diffusion), tức là với mỗi khóa cụ thể hàm mã hóa không nên có sự phụ thuộc thống kê nào giữa các cấu trúc đơn giản trong bản rõ và các cấu trúc đơn giản trong bản mã và không có quan hệ đơn giản nào giữa các hàm mã hóa khác nhau. Nguyên lý khuyếch tán đòi hỏi một hệ mã khối cần được thiết kế có tính đầy đủ, tức là mỗi bit rõ và mỗi bit khóa đều ảnh hưởng tới mỗi bit mã. Nguyên lý thiết kế cho ứng dụng yêu cầu hệ mã khối có thể ứng dụng cả trong dạng phần cứng và phần mềm. Trong ứng dụng cứng thường được thực hiện bởi các chíp VLSI có tốc độ cao. Trong ứng dụng mềm phải có tính mềm dẻo và giá thành thấp.
2. Một số bàn luận về cơ sở lý thuyết để xây dựng hệ mã khối an toàn hiệu quả
Một mã khối hiện nay thường được thiết lập bởi cách lặp một số lần một hàm vòng nào đó. Do đó, một hệ mã khối thường gồm hai phần: Phần ngẫu nhiên hóa dữ liệu và phần lược đồ khóa. Ở đây phần lược đồ khóa sẽ cung cấp các khóa con vòng cho phần ngẫu nhiên hóa dữ liệu. Tương ứng với mỗi khóa phiên khác nhau, phần ngẫu nhiên hóa dữ liệu có thể xem là các ánh xạ véc tơ boolean khác nhau tác động trên đầu vào là các khối rõ cho đầu ra là các khối mã tương ứng. Khi nghiên cứu thiết kế mã khối ta cần quan tâm cả hai phần trên cũng như sử dụng các quan hệ chặt chẽ giữa chúng để xây dựng được thuật toán vừa an toàn vừa hiệu quả.
Chuẩn mã dữ liệu DES có thể xem là hệ mã khối thông dụng xuất hiện đầu tiên trên thế giới theo cấu trúc Feistel cũng tuân thủ theo cấu trúc mã lặp như trên. Ngày nay đã xuất hiện những cấu trúc mới cho mã khối như cấu trúc Matsui, cấu trúc bảng vuông... và sự phối ghép hỗn hợp các cấu trúc đó. Kể từ khi xuất hiện, DES đã được các nhà mật mã phân tích đánh giá độ an toàn thông qua các tấn công cụ thể. Nổi tiếng nhất là hai tấn công: tấn công vi sai (do Biham và Shamir đề xuất 1991) và tấn công tuyến tính của Matsui (1993). Có thể tóm tắt ý tưởng của hai phương pháp tấn công này như sau.
Thám mã vi sai dựa trên yếu tố là hàm vòng f trong một mã khối lặp là một hàm yếu về mật mã. Cụ thể là nếu cặp bản mã là được biết và bằng cách nào đó có thể đạt được vi sai của cặp đầu vào tại vòng cuối cùng của mã khối lặp đó, thì tấn công vi sai có thể áp dụng để đạt được hoặc xác định được khoá hay một phần khoá con tại vòng cuối cùng. Trong thám mã vi sai, điều đó được thực hiện bằng cách chọn cặp bản rõ (X, X*) có vi sai là a sao cho vi sai DY(r -1) của cặp đầu vào tại vòng cuối cùng sẽ lấy giá trị cụ thể b với một xác suất cao. Vì có xác suất cao nên các khóa con tại vòng cuối được giải từ bộ ba (DY(r -1), Y (r), Y*(r)) sẽ thường tập trung vào một số phần tử có khả năng nhất. Từ các phần tử xuất hiện nhiều nhất, thám mã sẽ quyết định để tìm ra khóa con đúng tại vòng cuối cùng. Từ khóa con của vòng cuối này, có thể xác định được lại khóa bí mật ban đầu (nếu lược đồ tạo là đơn giản).
Còn mục đích của phương pháp thám mã tuyến tính trên một mã khối là tìm một biểu diễn xấp xỉ tuyến tính cho hệ này để có thể phá chúng nhanh hơn phương pháp tấn công vét cạn. Cụ thể để thực hiện thám mã tuyến tính cần phải tìm các biểu diễn tuyến tính hiệu quả có dạng P[i1, i2,.., ia] r C[j1, j2,.., jb] = K[k1, k2,.., kc], trong đó i1, i2,.., ia, j1, j2,.., jb và k1, k2,.., kc là ký hiệu các vị trí bit cố định, và phương trình đúng với xác suất p 7 1/2 với giả thiết bản rõ P được lấy ngẫu nhiên còn C là bản mã tương ứng với khoá K cố định cho trước nào đó. Giá trị tuyệt đối |p-1/2| được xem như độ hiệu quả của phương trình trên. Nếu có thể thành công trong việc tìm một biểu diễn tuyến tính hiệu quả, thì khi đó có thể sử dụng nó để tìm ra được bit dạng khoá quan trọng K[k1, k2,..,kc] dựa trên phương pháp hợp lý cực đại.
Cho tới nay có thể nói rằng DES đã bị phá thực tế bởi hai tấn công trên đây. Vượt lên trên các tấn công phân tích mã, lần lượt các hệ mã khối mới với ưu thế mới đã ra đời đáp ứng có độ an toàn chống lại được các tấn công thực tế và hiệu quả trong sử dụng. Tiêu chuẩn mã dữ liệu tiên tiến AES nhằm thay cho DES là một ví dụ. Nhìn chung từ các tấn công phân tích mã, ta có thể rút ra các đặc trưng an toàn cơ bản của một hệ mã khối.
Hệ mã phải có độ dài khối rõ, khối khoá đủ lớn (không gian rõ và khoá lớn) để tránh tấn công vét cạn trên không gian rõ cũng như không gian khoá (thường độ dài cỡ khối lớn hơn hoặc bằng 128). Hệ mã phải có độ đo vi sai và độ đo độ lệch tuyến tính tối thiểu để tránh được hai kiểu tấn công nguy hiểm nhất là tấn công vi sai và tấn công tuyến tính theo các nguyên lý như đã trình bày trên. Các hộp thế, các phép biến đổi phi tuyến cần phải có bậc đại số cao để tránh tấn công nội suy, tấn công vi sai bậc cao. Tầng tuyến tính trong các hàm vòng cần phải được lựa chọn cẩn thận để khi phối hợp với tầng phi tuyến phải tạo ra hệ mã có tính khuyếch tán tốt để tránh các tấn công cục bộ trên các khối mã nhỏ. Lược đồ tạo khoá cần phải tránh được các lớp khoá yếu, không được tồn tại những quan hệ khoá đơn giản do tính đều, hay cân xứng trong lược đồ gây nên để tránh các kiểu tấn công khoá quan hệ, tấn công trượt khối dựa trên tính giống nhau trong các phân đoạn tạo khoá con.
Về phần ngẫu nhiên hóa dữ liệu: Như đã nói, một mã khối hiện nay thường được thiết lập bởi cách lặp một số lần một hàm vòng nào đó. Các hàm vòng hiện nay thường được xây dựng theo cấu trúc thay thế - hoán vị, gồm các hộp thế cỡ 8x8 bit kết hợp với các phép hoán vị khối theo byte, các phép dịch vòng, các phép XOR giữa khóa và dữ liệu hoặc các phép toán cộng môđul. Giữa các tầng hộp thế trong hàm vòng thường sử dụng các phép biến đổi tuyến tính theo byte được lựa chọn cẩn thận để đảm bảo độ khuyếch tán tối ưu cho các hàm vòng. Như vậy có thể nói rằng, có ba yếu tố cơ bản liên quan đến phần ngẫu nhiên hóa dữ liệu theo thứ tự “từ trong ra ngoài” đó là: hộp thế phi tuyến, hàm vòng và cấu trúc mã/dịch. Rõ ràng là cần phải nghiên cứu các độ đo an toàn đối với các hộp thế, hàm vòng và thác triển ra toàn bộ cấu trúc mã khối. Để xây dựng hệ mã khối chống được các tấn công vi sai hay tuyến tính ta có thể chồng chất truy hồi các cấu trúc, nhưng điều bất lợi ở đây là hộp thế cố định cơ sở lại phải có kích cỡ quá lớn sẽ phi thực tế trong sử dụng. Cũng từ lý do đó, Knudsen đã đưa ra khái niệm và cách xây dựng các hệ mã khối an toàn thực tế. Trên quan điểm đó, người ta cần quan tâm đến các hộp thế nhỏ có các độ đo tốt, đến số lượng các hộp thế tích cực tương ứng với các khái niệm lan truyền vi sai hay tuyến tính, và đến số lượng vòng lặp. Dựa trên quan điểm này người ta đã xây dựng được các hệ mã khối an toàn thực tế và hiệu quả. Giả sử rằng chỉ có cách tấn công mã Feistel bằng cách tìm các đặc trưng vi sai (hay đặc trưng tuyến tính) tốt nhất, tức là rất khó có thể tìm được các vi sai (hay xấp xỉ tuyến tính), thì các số liệu xác suất của đặc trưng vi sai (tuyến tính) 1 vòng không tầm thường tốt nhất và số vòng trong đặc trưng đó sẽ cho ta tính được cận dưới độ phức tạp của hai tấn công này. Cận dưới này có thể đủ để khẳng định độ an toàn thực tế của hệ mã, nếu như xác suất của đặc trưng vi sai (tuyến tính) 1 vòng không tầm thường tốt nhất là đủ nhỏ. Bằng cách sử dụng các hộp thế có các độ đo tốt ta có thể thiết lập các hàm vòng có các đặc trưng đủ tốt để từ đó thiết kế hệ mã khối chống được hai tấn công cơ bản hiện nay.
K.Nyberg đã đề xuất các phương pháp xây dựng các hộp thế dựa trên các phép lũy thừa cũng như phép nghịch đảo trên trường hữu hạn, các hộp thế này đã được ứng dụng thiết kế các hệ mã khối ngày nay như AES... Một số nhà nghiên cứu mật mã cũng đã đưa ra cách xây dựng các hàm vòng có tác dụng khuyếch tán nhanh các độ đo vi sai hay độ đo độ lệch tuyến tính, như hàm vòng 2 tầng hộp thế (trong hệ mã khối E2 - Nhật), hàm vòng 3 tầng hộp thế (trong hệ mã khối SEED của Hàn Quốc)... Đặc biệt, J. Daemen và V. Rijnmen đã đưa ra cách xây dựng hàm vòng theo kiểu khuyếch tán hai chiều (dạng cấu trúc bảng vuông) và với cách lựa chọn cẩn thận các phép toán tuyến tính đảm bảo tính khuyếch tán rất tốt, làm cho hệ mã có thể đạt độ an toàn thực tế rất nhanh (tức sau số vòng không quá lớn như đối với DES hay GOST...).
Về phần lược đồ khóa: Các lược đồ khoá hiện tại có thể được chia thành hai kiểu. Ở kiểu 1, tri thức về một khoá con vòng sẽ cung cấp một cách duy nhất các bit khoá của các khoá con vòng khác hay của khoá chính. Còn ở kiểu 2, tri thức về một khóa con vòng bất kỳ đều không cho ta biết thêm bất kỳ bit nào về các khóa con vòng khác hay khóa chính. Các tác giả G. Carter, E. Dawson, và L. Nielsen đã đề xuất một dạng lược đồ khoá kiểu 2 như sau: Trước hết giả thiết tồn tại một hàm một chiều mạnh OWF. Giả sử MK là khoá chính của một hệ mã khối r- vòng, quá trình tạo các khoá con vòng như sau:
+ Bước 1: OWF(MK) = Khoá con vòng (1)
+ Bước 2: Với i =1 đến r-1
Thực hiện hoán vị bit MK để tạo ra MKi
OWF(MKi) = Khoá con vòng (i+1).
Chú ý rằng trong thuật toán trên là mỗi một khoá con vòng đều được tạo bởi toàn bộ các bit của khoá chính MK. Điều này có thể tạo ra hiệu ứng thác, tức là sự thay đổi một bit của khoá chính sẽ tạo ra sự thay đổi nhiều ở trong mỗi khoá con.
Lược đồ trên nói chung khó áp dụng thực tế do phải sử dụng hàm một chiều. Hiện nay, để vận dụng ý tưởng này người ta thường thay OWF bởi phần cốt lõi phi tuyến của hàm vòng tương ứng trong phần ngẫu nhiên hóa dữ liệu cộng thêm một số phép toán điều khiển để vừa đảm bảo tính an toàn, vừa đảm bảo tính hiệu quả, tránh các tấn công khóa quan hệ, đồng thời cũng đảm đảm bảo sự gọn nhẹ của hệ mã khối đang thiết kế. Lược đồ khoá như thế sẽ là tốt theo nghĩa không chứa các khoá quan hệ và tri thức về một khoá con vòng nào đó không giúp gì trong xác định các thông tin về khoá con vòng khác cũng như khoá chính K.
Một số chú ý cần quan tâm: Để đảm bảo cho tính khuyếch tán dữ liệu hoàn toàn trong phần ngẫu nhiên hoá dữ liệu của một hệ mã khối, vấn đề xây dựng và lựa chọn hoán vị sử dụng trong các hàm vòng là hết sức quan trọng. Trên các tài liệu đã công khai, chúng tôi chưa thấy có tài liệu nào cho những chỉ dẫn cụ thể về vấn đề này. Tất nhiên, các hoán vị lựa chọn ở đây phải đảm bảo một số tính chất nào đó, như có khoảng cách trung bình là lớn, hay có khoảng cách đều hoặc khoảng cách ngẫu nhiên. Phép dịch bit trong chuẩn mã dữ liệu GOST của Nga có thể xem như một hoán vị có khoảng cách đều nhưng nhỏ. Do đó, theo một nghĩa nào đó, sử dụng hoán vị này cũng sẽ cho độ khuyếch tán tốt nhưng chậm, tức là phải với số vòng khá lớn. Hoán vị trong DES có khoảng cách trung bình khá lớn nhưng lại là hoán vị theo bit nên tốc độ chậm, ảnh hưởng trong thiết kế phần cứng. Có thể sử dụng hoán vị ngẫu nhiên hoặc giả ngẫu nhiên... có khoảng cách lớn. Tuy nhiên các lựa chọn cụ thể cần phải được tính toán cẩn thận để đảm bảo tối ưu yêu cầu khuyếch tán dữ liệu nhanh, đồng thời không ảnh hưởng lớn đến tốc độ của hệ mã khối.
Đối với việc lựa chọn các phép biến đổi đầu vào đầu ra cho một hệ mã khối kiểu Feistel, hay bất kỳ hệ mã khối nào có sử dụng các hàm vòng lặp, người thiết kế thuật toán cũng cần phải hết sức chú ý. Chẳng hạn DES sử dụng các hoán vị cố định cho trước, đối với thám mã hoán vị này hoàn toàn không có ý nghĩa gì cả, nhưng nếu chọn một phép biến đổi nào đó phụ thuộc khóa, thì đương nhiên lược đồ khóa cần phải tính toán ra khóa đó và có nghĩa phần thiết kế lược đồ khóa cần phải đảm bảo an toàn cho cả khóa con vòng cùng với khóa cho phép biến đổi đầu vào - đầu ra. Đây cũng là một yêu cầu không đơn giản. Một chú ý nữa là các phép biến đổi đầu vào - đầu ra trong hệ Feistel phải đảm bảo tính đối xứng thuận nghịch, khi đó mới không ảnh hưởng tới qui trình mã dịch. Có một số hệ mã khối đã đề cập đến vấn đề này như trong hệ E2, hệ Rijndael, Twofish... Tất nhiên, khi lựa chọn các phép biến đổi đầu vào đầu ra cần phải thiết kế ngay lược đồ khoá tương ứng đảm bảo tránh các tấn công đã có liên quan đến lược đồ khóa.
Lưu ý là số lượng các vòng lặp của mã khối cần cân đối giữa tốc độ mã dịch và độ đo độ an toàn của hệ mã. Ngoài việc dựa vào các căn cứ lý thuyết cần có các căn cứ thống kê số liệu thực hành về các độ đo an toàn đã nêu để lựa chọn số vòng lặp cụ thể.
3. Kết luận.
Hiện nay trong xu thế hội nhập toàn cầu hóa, các quốc gia và các tổ chức quốc tế đều rất quan tâm đến việc xây dựng, lựa chọn và ban hành các tiêu chuẩn mã dữ liệu dưới dạng các mã khối. Điều này đã thúc đẩy sự ra đời hàng loạt các hệ mã khối được thiết kế đảm bảo nguyên tắc vừa an toàn, vừa hiệu quả. Có thể kể một số ví dụ như các hệ mã AES, GOST, SEED, E2, MISTY, TWOWFISH... Tuy nhiên trong quá trình sử dụng cần phải thường xuyên quan tâm nghiên cứu các phương pháp tấn công phân tích mã mới xuất hiện trên thế giới để có thể phòng tránh các điểm yếu tiềm tàng đối với các hệ mã đang sử dụng (vì thỏa mãn tối ưu các yêu cầu an toàn và hiệu quả là việc không dễ dàng trong thời kỳ KH&CN thế giới phát triển như vũ bão hiện nay). Có thể hy vọng rằng, điều bàn luận trên đây vừa đặt ra các thách thức mới với các nhà nghiên cứu mật mã đồng thời cũng có thể khơi dậy niềm đam mê mới đối với những ai đang quan tâm tới lĩnh vực rất nhạy cảm này.