Các thuật toán tiêu chuẩn quốc tế về mã dòng
Một trong những tiêu chuẩn cơ bản trong hệ thống các tiêu chuẩn mật mã là mã hóa dữ liệu. Trước đây được ứng dụng rộng rãi nhất là Tiêu chuẩn mã dữ liệu (DES-Data Encryption Standard) và hiện nay là Tiêu chuẩn mã dữ liệu tiên tiến (AES- Advanced Encryption Standard). Nhiều thuật toán mật mã đã được đề cập tới trong hai tiêu chuẩn này. Ngoài các thuật toán mã hóa khóa công khai, có hai loại thuật toán mật mã dùng khóa đối xứng để mã hóa dữ liệu, đó là mã khối và mã dòng. Các thuật toán này được giới thiệu trong tiêu chuẩn quốc tế ISO/IEC 18033: Công nghệ thông tin - Các kỹ thuật mật mã - Các thuật toán mã hóa (Information technology- Security techniques - Encryption Algorithms). Tiêu chuẩn này gồm có tất cả 4 phần như sau:
- ISO/IEC 18033-1: Phần 1 - Các vấn đề chung (General)
- ISO/IEC 18033-2: Phần 2 - Các thuật toán mã phi đối xứng (Asymmetric Ciphers)
- ISO/IEC 18033-3: Phần 3 - Các thuật toán mã khối (Block Ciphers)
- ISO/IEC 18033-4: Phần 4 - Các thuật toán mã dòng (Stream Ciphers)
Bài viết giới thiệu về các thuật toán mã dòng, đặc biệt là các thuật toán mã dòng trình bày trong Phần 4 của tiêu chuẩn ISO/IEC 18033 ban hành năm 2005.
Từ giữa những năm 80 của thế kỷ trước, một số thuật toán mã dòng của DES đã được sử dụng rộng rãi trong một số sản phẩm ứng dụng. Có thể kể ra một số ví dụ điển hình sau:
- Các thuật toán mã dòng A5/1, A5/2 và A5/3 được thiết kế để sử dụng với mạng GSM. Các mã dòng A5/1 và A5/2 là hai lược đồ ban đầu được đưa vào các chuẩn GSM. Việc sử dụng hai lược đồ này là bắt buộc mặc dù các chi tiết về thuật toán được giữ bí mật. Thực ra, A5/2 dường như là một phiên bản được làm yếu có chủ ý của A5/1, nó đã được thiết kế để đề xuất một lượng bị giới hạn về độ an toàn vì các lý do chính trị và để kiểm soát xuất khẩu sản phẩm mật mã của Mỹ. Lần lượt cả hai thuật toán đã được chỉ ra có những tổn thương nghiêm trọng về độ an toàn [1]. Kết quả là một thuật toán thay thế, được biết như là A5/3. Thuật toán mã dòng này là một chế độ hoạt động của mã khối KASUMI và nó được tin là an toàn.
- Mã dòng RC4 được sử dụng với các mạng không dây IEEE 802.11b như một phần của hệ thống được gọi là Wired Equivalent Privacy (WEB) và là một trong các kỹ thuật mã cho giao thức SSL. RC4 đã được sáng tạo bởi Rivest vào những năm 80, nhưng cho đến năm 1994 những chi tiết về hoạt động của nó mới được công bố công khai. Nhưng đáng tiếc là cách mà RC4 được sử dụng trong WEB lại không an toàn. Trong một công trình nghiên cứu [2], các tác giả S. Fluhrer, I. Martin và A. Shamir đã thành công trong việc trình diễn những tính chất không mong muốn ở lược đồ khóa của RC4 trong trường hợp một phần của khóa là được biết. Chính tính chất này đã gây ra các vấn đề rắc rối cho WEB.
Do không tiến hành công việc chuẩn hóa các thuật toán mã hóa, nên vào đầu những năm 90, tiêu chuẩn ISO/IEC 9979 đã đưa ra những quy định cho việc đăng ký tên của các thuật toán mã hóa với ISO. Trong số các thuật toán mã dòng đã được đăng ký có thể kể đến B-CRYPT, BARAS, FWZ1, FSAngo, BLIC và RC4. Do không có yêu cầu cụ thể đối với quy trình đề xuất thuật toán nên nhiều khi mô tả đầy đủ của nó không được đưa ra. Người sử dụng chỉ được cung cấp các thông tin là các đặc trưng đầu ra/đầu vào và các hàm thư viện nên chỉ có thể cài đặt thuật toán như một “hộp đen” trong hệ thống. Các vectơ kiểm tra cũng được cung cấp để người sử dụng có thể kiểm tra xem việc cài đặt hộp đen của thuật toán có đúng hay không.
Vào năm 2001, Ban Kỹ thuật tiêu chuẩn của ISO/IEC quyết định bắt đầu xây dựng tiêu chuẩn các thuật toán mã hóa quốc tế ISO/IEC 18033. Đến năm 2005, Phần 4 đã được hoàn thành. Còn Phần 2 (các thuật toán phi đối xứng) thì đến năm 2006 mới được ban hành.
Tiêu chuẩn ISO/IEC 18033 - 4 phiên bản tiếng Anh gồm 43 trang với 7 mục và 2 phụ lục. Bốn mục đầu nói về phạm vi, các tài liệu tham chiếu, các thuật ngữ và các định nghĩa, các ký hiệu và các từ viết tắt của Tiêu chuẩn. Sau đây trình bày tóm tắt nội dung của 3 mục còn lại.
Mục 5 có tiêu đề “Mô hình tổng quát cho các mã dòng” đã trình bày về mã dòng như một sự kết hợp của bộ tạo dòng khóa (KG-keystream generator) và hàm đầu ra (output function). Bộ tạo dòng khóa là một kỹ thuật để sinh ra một dãy giả ngẫu nhiên của các ký tự (thông thường là các bit) từ một khóa bí mật, biến khởi tạo (starting variable) và có thể các đầu vào khác. Hàm đầu ra xác định xem đầu ra của bộ tạo dòng khóa sẽ được tổ hợp như thế nào với bản rõ (plaintext) để tạo ra bản mã (ciphertext). Bản rõ và bản mã được giả thiết là một dãy của các ký tự (thông thường là các bit).
Hai lớp tổng quát của bộ tạo khóa dòng đã được định nghĩa, được gọi là các bộ tạo dòng khóa đồng bộ (synchronous) và các bộ tạo dòng khóa tự đồng bộ (self-synchronous). Một ưu thế của lớp sau là chúng có thể được khôi phục (sau khi trễ) do mất đồng bộ giữa bên mã và bên giải mã, do bị mất hay thêm vào một hay nhiều khối các ký tự mã.
Có hai loại hàm đầu ra đã được chỉ ra trong ISO/IEC 18033-4. Cả hai chỉ được định nghĩa cho trường hợp khi mà cả bản rõ và dòng khóa là 2 dãy của các bit. Chú ý rằng, đối với cả hai loại hàm đầu ra, cần định nghĩa không chỉ cách mà bản mã nhận được từ bản rõ, mà cả chiều ngược lại, tức là quá trình cần phải nghịch đảo được.
Hàm đầu ra thứ nhất là hàm đầu ra XOR “chuẩn tắc”, tức là mỗi bit của bản mã nhận được bởi việc lấy XOR (tổng modulo 2) của một bit của bản rõ với một bit của dòng khóa.Tức là, nếu bản rõ là p0, p1, ..., và dòng khóa là k0, k1, ... thì bản mã là c0, c1, ... với ci = pi + ki mod 2. Tuy nhiên, hàm đầu ra XOR được thiết kế chỉ để bảo vệ tính bí mật của bản rõ và đề xuất một bảo vệ nhỏ chống lại các tấn công tích cực.
Hàm đầu ra thứ hai là một hàm phức tạp hơn nhiều, được biết như là MULTI-S01, nó chỉ được thiết kế để sử dụng với một bộ tạo dòng khóa đồng bộ. Hàm này được thiết kế để cung cấp cả tính bảo mật và bảo vệ tính toàn vẹn cho bản rõ. Hàm đầu ra MULTI-S01 đã được đề xuất ban đầu bởi S. Furuya, D. Watanabe, Y. Seto và K. Takaragi [3]. Việc sử dụng nó yêu cầu một lựa chọn của một tham số an toàn n (thông thường, n = 64 hoặc 128).
Mục 6 có tiêu đề “Kiến thiết các bộ tạo dòng khóa từ mã khối”. Có ba kỹ thuật đã biết để sử dụng một mã khối như là một bộ tạo khóa cho mã dòng, đó chính là các chế độ hoạt động CTR (Counter), OFB (Output Feedback) và CFB (Ciphertext Feedback). Tất cả ba chế độ hoạt động đã được đưa vào phiên bản cuối cùng của tiêu chuẩn quốc tế về các chế độ hoạt động là ISO/IEC 10116, cũng như trong các tiêu chuẩn khác, chẳng hạn như US NIST FIPS Special Publication 800-38A. Các chế độ CTR và OFB tạo khả năng cho một mã khối bất kỳ được sử dụng để sinh ra một bộ tạo dòng khóa đồng bộ. Cả hai hoạt động theo một cách thức giống nhau, tức là một dãy các đầu vào được đưa tới cho mã khối, cùng với một khóa bí mật và một phần hoặc tất cả các đầu ra của mã khối tạo nên dòng khóa. Chế độ CTR đơn giản sử dụng một bộ đếm để thay đổi các đầu vào của mã khối, trong khi chế độ OFB sử dụng đầu ra được sinh ra bởi mã khối như là đầu vào tiếp theo. Trạng thái của chế độ CTR đơn thuần là giá trị đếm, trạng thái của chế độ OFB là đầu ra của khối mã trước đó.
Chế độ CFB tạo khả năng cho một mã khối bất kỳ được sử dụng để tạo ra một bộ tạo dòng khóa tự đồng bộ. Cũng như với các chế độ CTR và OFB, một dãy các đầu vào được cung cấp cho mã khối, cùng với khóa bí mật và một phần hoặc tất cả các đầu ra của mã khối tạo nên dòng khóa. Ở đây, đầu vào cho bộ tạo dòng khóa là một khối các bit mã có độ dài thích hợp.
Mục 7 có tiêu đề “Các bộ tạo dòng khóa chuyên dụng”. Khi đã cho rằng ứng dụng chính của các mã dòng là phép mã dữ liệu tốc độ rất cao thì có nghĩa là các bộ tạo dòng khóa dựa trên mã khối không phải là giải pháp hoàn hảo. Các bộ tạo dòng khóa chuyên dụng được chuẩn hóa để đáp ứng yêu cầu này. ISO/IEC 18033 - 4 giới thiệu hai thiết kế chuyên dụng cho các bộ tạo dòng khóa đồng bộ, đó là SNOW 2.0 và MUGI. Chúng được công bố lần đầu vào năm 2002.
SNOW 2.0 là “hậu duệ trực tiếp” của SNOW 1.0. SNOW 1.0 được P. Ekdahl và T. Johansson công bố vào năm 2000 như là một đệ trình lên Dự án xây dựng các tiêu chuẩn mật mã NESSIE (New European Schemes for Signature, Integrity, and Encryption) của Liên minh Châu Âu. SNOW 2.0 đã được thiết kế để chống lại các tấn công đối với SNOW 1.0 do D. Coppersmith, S. Halevi và C.Jutla đề xuất [4] cũng như tấn công của P. Hawkes và G. G. Rose [5]. SNOW 2.0 sử dụng hoặc khóa 128 bit hoặc khoá 256 bit, nó khai thác một biến trạng thái gồm 18 khối có 32 bit (tổng cộng 576 bit). Thiết kế khai thác một thanh ghi dịch phản hồi GF(232) tuyến tính có 16 tầng (stage); 16 trong số 18 khối trạng thái 32 bit tạo nên trạng thái của thanh ghi này. Nó cũng sử dụng máy hữu hạn trạng thái với một trạng thái được tạo nên từ 2 khối trạng thái 32 bit còn lại. Cách thức mà máy trạng thái này hoạt động cũng phụ thuộc vào các biến trạng thái của thanh ghi dịch. Dòng khóa được sinh ra mỗi một lần 32 bit là một tổ hợp phi tuyến đầu ra của máy hữu hạn trạng thái và hai trong số các biến trạng thái của thanh ghi dịch phản hồi tuyến tính.
MUGI dựa trên một bộ tạo dòng khóa được gọi là Panama, nó đã được đề xuất bởi J. Daemen và C. S. K. Clapp vào năm 1998 [6]. Mục tiêu chính của các thay đổi đối với Panama là để thiết kế trở nên hiệu quả hơn cho cài đặt phần cứng và để làm cho phân tích độ an toàn của thiết kế đơn giản hơn [7]. MUGI sử dụng khoá 128 bit và khai thác một biến trạng thái bao gồm 19 khối 64 bit (tức là tổng cộng có 1216 bit của trạng thái trong). Hàm “trạng thái tiếp theo” được thiết kế theo một cách nào đó giống với hàm vòng của mã khối và kết hợp các bộ ba và các bộ đôi của các khối 64 bit để sinh ra các giá trị mới cho các khối 64 bit.