Việc sử dụng mã khối trong bảo mật thông tin

14:02 | 03/07/2009

Mã khối là một lĩnh vực quan trọng của mật mã hiện đại. Việc ứng dụng mã khối trong việc thiết kế các sản phẩm mật mã có nhiều thuận lợi, hiệu quả. Nhiều chính phủ và tổ chức quốc tế rất quan tâm đến việc nghiên cứu phát triển mã khối.


1. Tầm quan trọng của mã khối
Mã khối là một lĩnh vực quan trọng của mật mã hiện đại. Việc ứng dụng mã khối trong việc thiết kế các sản phẩm mật mã có nhiều thuận lợi, hiệu quả. Nhiều chính phủ và tổ chức quốc tế rất quan tâm đến việc nghiên cứu phát triển mã khối.
Chính phủ Mỹ đã mở hai chiến dịch tuyển chọn chuẩn thuật toán mã khối trong hai giai đoạn kế tiếp nhau, giai đoạn đầu kết thúc vào năm 1976 với chuẩn mã hóa dữ liệu DES và giai đoạn sau kết thúc vào năm 2000 với chuẩn mã hóa nâng cao AES, giai đoạn sau có quy mô và chất lượng cao hơn giai đoạn trước. Cho đến năm 2005, đây là lĩnh vực duy nhất trong mật mã được chính phủ Mỹ phát động cuộc thi tuyển chọn thuật toán trên phạm vi toàn thế giới để làm chuẩn bảo mật thông tin.
Một số chính phủ khác như Nhật, Nga, Hàn quốc,… cũng tổ chức đánh giá, tuyển chọn mã khối làm Tiêu chuẩn cho quốc gia. Khối EU lập ra dự án NESSIE để xây dựng các Tiêu chuẩn mật mã (trong đó có mã khối) của châu Âu.
Ở Việt Nam, chúng ta đã làm quen với mã khối DES từ giữa những năm 80 của thế kỷ trước. Đến năm 2007, Ban Cơ yếu đã đề xuất các chuẩn mật mã, trong đó có mã khối để xây dựng các Tiêu chuẩn quốc gia về mật mã, hỗ trợ cho việc ứng dụng mật mã trong các lĩnh vực kinh tế - xã hội.
Với những quan tâm đó, mã khối đã phát triển rất nhanh và nhanh chóng vượt lên tính nghệ thuật để xây dựng nền tảng khoa học ngày một rộng và vững chắc hơn. Nhiều công trình khoa học có giá trị cao về lĩnh vực này đã lần lượt ra đời.
2. Về độ an toàn lý thuyết
Nói về mã khối, nhiều người muốn diễn đạt một cách đơn giản, dễ hiểu rằng, đó là một phép biến đổi có ngược để biến một khối ký tự này thành một khối ký tự khác. Yêu cầu có ngược được đặt ra để đảm bảo khả năng có thể giải mã được và bản giải mã (bản rõ) nhận được duy nhất. Theo cách diễn đạt này ta có thể xem mã sửa sai (với mã sửa sai, “bản mã” dài hơn “bản rõ” vì nó chứa thêm một số bit kiểm tra để giúp tự động sửa sai) cũng là mã khối. Tuy nhiên, các nhà mật mã đã không muốn có sự mở rộng đến như vậy. Họ đã quan niệm mã khối như sau:
Mã khối là một phép biến đổi có hai đầu vào và một đầu ra. Hai đầu vào gồm có 1 khóa dài l bit, bản rõ dài n bit. Đầu ra là bản mã cũng dài n bit. Với mỗi khóa cố định, đây là phép biến đổi có ngược, biến bản rõ có n bit  thành bản mã cũng có n bit (n được gọi là cỡ khối, còn l được gọi là cỡ khóa). Việc giải mã thực hiện được nhờ phép biến đổi có ngược này.
Với định nghĩa như vậy, mã sửa sai không phải là mã khối.
Khi đã có một mã khối, vấn đề được đặt ra tiếp theo ngay là mã hóa như thế nào một thông báo có nhiều hơn n bit?  Đã có nhiều lời giải cho vấn đề này. Chẳng hạn, chia thông báo này thành các khối n bit liên tiếp, rời nhau, sau đó mã hóa lần lượt từng khối đó bởi thuật toán mã khối này (với cùng một khóa). Người ta gọi kiểu (mode) mã hóa như thế là kiểu ECB (sách điện tử). Mỗi kiểu mã hoá có những ưu, nhược điểm riêng và được lựa chọn sử dụng tùy theo nhu cầu thực tế.
Có thể hình dung mã khối theo cách khác như sau. Gọi A và B tương ứng là tập hợp các nguyên tố rõ và mã có độ dài n bit của mã khối, t là ánh xạ đặt mỗi phần tử của A vào một phần tử của B.T  là tập hợp (A,B) với quan hệ t cố định. Ta gọiT  là “quyển từ điển mật mã”. Phép mã hóa có dạng từ điểnT  là phép ánh xạ mỗi phần tử rõ của A sang một phần tử mã của B theo ánh xạ t. Vậy với mỗi khóa cố định, mã khối sẽ tương ứng với một quyển từ điển mật mã. Tuy nhiên, đây sẽ là một quyển từ điển khổng lồ, chẳng hạn nếu n = 128 (như với chuẩn mã dữ liệu nâng cao AES) thì “quyển từ điển” này có 2128 (một số có trên 30 chữ số thập phân!) “nguyên tố rõ”, nên người ta khó có thể liệt kê hết trên giấy (và cả trên máy tính) các “nguyên tố rõ” và “nguyên tố mã” của “quyển từ điển” này được. Việc thay khóa của mã khối sẽ tương ứng với việc thay quyển từ điển mật mã.
Như vậy, bằng trực quan chúng ta cũng có thể nghĩ rằng mã khối có độ an toàn tương đương với việc chỉ dùng từ điển để mã hóa thông báo (mã đơn). Điều còn băn khoăn là ở chỗ, mã khối là một quyển từ điển mật mã khổng lồ, vậy có thể nó có độ an toàn cao hơn chăng? Ta hãy xem xét chi tiết hơn một chút nữa.
Khi cỡ khối n cố định, sẽ có thể có tất cả là ((2n)!) “quyển từ điển mật mã”. Vậy nhưng độ dài khóa là l, nên số tất cả các khóa có thể có là 2l. Ta biết rằng mỗi khóa sẽ tương ứng với một “quyển từ điển mật mã”.
Nếu như 2l < ((2n)!) thì người thiết kế mật mã đã làm cho người sử dụng không thể sử dụng hết các “quyển từ điển mật mã” vốn có của nó. Nói cách khác, khi đó dù mã hóa xong một “nguyên tố rõ” ta thay từ điển bằng một từ điển khác được chọn ngẫu nhiên (tương tự như dùng khóa ngẫu nhiên) thì vẫn còn một lượng “quyển từ điển mật mã” (chính xác là ((2n)! - 2l) quyển) không bao giờ được dùng đến. Nghĩa là mã khối của chúng ta không thể thực sự ngẫu nhiên. Nói theo ngôn ngữ của mật mã truyền thống thì họ đã làm cho từ điển không thể vận động được rộng khắp trong toàn bộ cơ số của nó.
Tuy nhiên, nếu muốn có điều ngược lại, nghĩa là muốn có 2l$ ((2n)!) thì độ dài khóa phải thỏa mãn l . n*2n. Chẳng hạn, nếu n = 128 thì  l . 128*2128. Mỗi khóa có độ dài (tính theo bit) như vậy là khó khăn không thể vượt qua được đối với ngành công nghệ thông tin hiện nay trong việc lưu trữ nó. Đó là chưa nói đến thời gian mã hóa với một khóa có độ dài khủng khiếp như thế.
Vậy là, đối với các cỡ khối phổ biến, mật mã thực sự ngẫu nhiên thực tế không thể thực hành được. Nói cách khác, mã khối không thể cho ta độ bảo mật lý tưởng (như mật mã dùng khóa ngẫu nhiên) được.
3. Về độ an toàn thực tế
Các nhà thiết kế mã khối hiểu sâu sắc rằng, không phải các mã khối đều có độ bảo mật như nhau (dù rằng đều ở dưới mức lý tưởng), vì vậy họ quan tâm đến cả hai hướng.
Hướng thứ nhất là chọn cấu trúc của mã khối và các thành tố trong đó có chất lượng tốt. Cho đến nay, có hai loại cấu trúc mã khối có “uy tín” cao là cấu trúc Feistel và cấu trúc thay thế - hoán vị (viết tắt là SPN). Đại diện cho cấu trúc Feistel là DES (là chuẩn mã hóa dữ liệu liên bang của Mỹ khoảng từ 1977 đến 1998), còn đại diện cho cấu trúc SPN là AES (là chuẩn mã hóa nâng cao hiện nay của Hoa Kỳ). Sau khi chọn cấu trúc, các nhà thiết kế chọn các thành tố của mã khối theo những tiêu chuẩn nhất định (mà họ tin tưởng rằng chúng sẽ bảo đảm cho mã khối có độ bảo mật cao). Các thành tố của mã khối thường là: các hộp thay thế (thường gọi là các hộp S), tầng khuếch tán, lược đồ khóa,…
Hướng thứ hai là đưa sản phẩm của mình ra thử thách trên “chiến trường thử nghiệm”. Chính phủ Mỹ đã làm như vậy khi tuyển chọn AES. Họ đã tung các thuật toán đề cử lên mạng Internet và kêu gọi các nhà khoa học nghiên cứu tấn công, sau đó lập ra các hội đồng tổng kết các tấn công lên từng thuật toán được đề cử và tổ chức tuyển chọn ở nhiều vòng. Ở vòng cuối cùng họ chỉ chọn một thuật toán mã khối làm AES (đó là thuật toán Rijndael của hai nhà khoa học Bỉ). Mỹ công bố công khai tiêu chuẩn tuyển chọn AES, liên quan đến nhiều khía cạnh như: độ an toàn, sự phù hợp với một lớp rộng rãi các “nền” thực hiện mã khối, tốc độ thực hiện trên phần mềm cao,… Và có một điều rất hiển nhiên là, thuật toán được lựa chọn phải là thuật toán không bị phá vỡ bởi bất cứ tấn công nào được công bố trên thế giới trong hiện tại cũng như trong tương lai gần (trong khoảng 15, 20 năm). Người ta dự kiến AES có thể đứng vững trong vòng 20 năm (trước kia người ta dự kiến DES có thể đứng vững trong vòng 10 năm, nhưng thực tế nó đứng vững được lâu hơn thế nhiều).
Các tiêu chuẩn nói ở trên có liên quan mật thiết đến các tấn công thực tế. Nhiều khi người ta căn cứ trên các tấn công đã biết để xây dựng các tiêu chuẩn nhằm vô hiệu hóa các tấn công đó lên mã khối của mình. Vì vậy, cả hai hướng này mang đậm tính thực tiễn.
Nhiều quốc gia và nhiều tổ chức quốc tế (ở châu Âu đầu thế kỷ 21 từng có dự án NESSIE, nay đang có dự án INRIA) đã lập ra các dự án để tổng kết, nghiên cứu các vấn đề này cho từng giai đoạn lịch sử. Nhiều nhà khoa học đã viết sách trình bày các nguyên lý thiết kế và các tiêu chuẩn lựa chọn các thành tố của mã khối.
Những vấn đề nói trên đều trong quá trình phát triển, chúng không ngừng được bổ sung và hiệu chỉnh. Một số hãng nước ngoài kinh doanh sản phẩm mật mã đã thiết kế mã khối riêng của họ (chứ không dùng AES hoặc một số chuẩn quốc tế khác), nhưng không trao cho khách hàng bản thuyết minh chi tiết của thiết kế, vì họ coi đó là bí mật của mình. Trách nhiệm nặng nề đối với các nhà mật mã thực hành là ở chỗ, có thể có những tấn công thành công lên thuật toán mã khối nào đó nhưng người ta không công bố, trong khi các thông tin mật vẫn cần phải mã hóa và chuyển đi hàng ngày. Có lẽ đó là một trong những lý do vì sao chúng ta hay thấy những tài trợ của các tổ chức cho các nhà nghiên cứu mật mã trên thế giới.
4. Kết luận
Qua những trình bày ở trên, chúng ta thấy rằng không được dùng mã khối để mã hóa bảo mật các thông tin cấp độ tuyệt mật. Tuy nhiên, chúng ta có thể và cần phải nghiên cứu tạo ra những mã khối có độ bảo mật cao và thực hành có hiệu quả tốt để dùng trong lĩnh vực an ninh - quốc phòng.
Việc nghiên cứu đánh giá mã khối nói riêng và mật mã nói chung cần được tiến hành một cách nghiêm túc, kỹ lưỡng, khoa học và liên tục. Cần thường xuyên cập nhật thông tin và tiến hành nghiên cứu nâng cao cho thích hợp. Điều này trở nên quan trong trong hoàn cảnh trình độ khoa học của chúng ta chưa đạt trình độ tiên tiến của thế giới.
Những phân tích trên đây nhằm mục đích để mọi người có một hiểu biết đúng đắn hơn về mã khối và từ đó có những quyết định chính xác hơn về việc ứng dụng mã khối trong thực tế.