DES (mã hóa)

DES (viết tắt của Data Encryption Standard, hay Tiêu chuẩn Mã hóa Dữ liệu) là một phương pháp mật mã hóa được FIPS (Tiêu chuẩn Xử lý Thông tin Liên bang Hoa Kỳ) chọn làm chuẩn chính thức vào năm 1976. Sau đó chuẩn này được sử dụng rộng rãi trên phạm vi thế giới. Ngay từ đầu, thuật toán của nó đã gây ra rất nhiều tranh cãi, do nó bao gồm các thành phần thiết kế mật, độ dài khóa tương đối ngắn, và các nghi ngờ về cửa sau để Cơ quan An ninh quốc gia Hoa Kỳ (NSA) có thể bẻ khóa. Do đó, DES đã được giới nghiên cứu xem xét rất kỹ lưỡng, việc này đã thúc đẩy hiểu biết hiện đại về mật mã khối ("block cipher") và các phương pháp thám mã tương ứng.
Hiện nay DES được xem là không đủ an toàn cho nhiều ứng dụng. Nguyên nhân chủ yếu là độ dài 56 bit của khóa là quá nhỏ. Khóa DES đã từng bị phá trong vòng chưa đầy 24 giờ. Đã có rất nhiều kết quả phân tích cho thấy những điểm yếu về mặt lý thuyết của mã hóa có thể dẫn đến phá khóa, tuy chúng không khả thi trong thực tiễn. Thuật toán được tin tưởng là an toàn trong thực tiễn có dạng Triple DES (thực hiện DES ba lần), mặc dù trên lý thuyết phương pháp này vẫn có thể bị phá. Gần đây DES đã được thay thế bằng AES ("Advanced Encryption Standard", hay Tiêu chuẩn Mã hóa Tiên tiến).
Trong một số tài liệu, người ta phân biệt giữa DES (là một tiêu chuẩn) và thuật toán DEA ("Data Encryption Algorithm", hay Thuật toán Mã hóa Dữ liệu) - thuật toán dùng trong chuẩn DES.
Lịch sử.
Khởi nguyên của thuật toán đã có từ đầu thập niên 1970. Vào năm 1972, sau khi tiến hành nghiên cứu về nhu cầu an toàn máy tính của chính phủ Hoa Kỳ, Cục Tiêu chuẩn Liên bang Hoa Kỳ ("National Bureau of Standard" - NBS), hiện nay đã đổi tên thành Viện Tiêu chuẩn và Công nghệ Quốc gia Hoa Kỳ ("National Institute of Standards and Technology" - NIST), đã nhận ra nhu cầu về một tiêu chuẩn của chính phủ dùng để mật mã hóa các thông tin mật/nhạy cảm. Vào ngày 15 tháng 5 năm 1973, sau khi tham khảo với NSA, NBS đưa ra kêu gọi thiết kế một thuật toán mã hóa có thể đáp ứng được các tiêu chuẩn nghiêm ngặt. Tuy nhiên không có đề xuất nào đáp ứng được yêu cầu đề ra. Ngày 27 tháng 8 năm 1974, NBS đưa ra kêu gọi lần thứ hai. Lần này công ty IBM đã đưa ra một đề xuất có thể chấp nhận được. Đề xuất này được phát triển trong những năm 1973-1974 dựa trên một thuật toán đã có từ trước - thuật toán mật mã Lucifer của Horst Feistel. Đội ngũ tại công ty IBM liên quan tới quá trình thiết kế bao gồm: Feistel, Walter Tuchman, Don Coppersmith, Alan Konheim, Carl Meyer, Mike Matyas, Roy Adler, Edna Grossman, Bill Notz, Lynn Smith và Bryant Tuckerman.
Sự tham gia của Cơ quan An ninh quốc gia Hoa Kỳ trong quá trình thiết kế.
Ngày 17 tháng 3 năm 1975, đề xuất về DES được công bố trên công báo liên bang Hoa Kỳ ("Federal Register") để công chúng tham gia ý kiến. Trong năm tiếp theo, hai hội thảo mở rộng được tổ chức để xem xét đề xuất này. Đã có rất nhiều ý kiến chỉ trích được nêu ra, trong đó bao gồm ý kiến của các nhà khoa học tiên phong về mật mã khóa công khai ("public-key cryptography") là Martin Hellman và Whitfield Diffie về các vấn đề như độ dài khóa và thành phần của thuật toán không được công khai: S-box. Điều sau được xem như là sự can thiệp (không hợp lý) của NSA làm giảm độ an toàn của thuật toán và cho phép NSA (và không ai khác) có thể dễ dàng đọc được thông tin đã được mã hóa. Alan Konheim, một trong những thành viên thiết kế DES, nói rằng: "Chúng tôi đã gửi thiết kế của S-box tới Washington. Khi trở lại thì mọi thứ đã được thay đổi." Trong một báo cáo mật của ủy ban của Thượng viện Hoa Kỳ được cử để điều tra những sửa đổi của NSA công bố năm 1978 đã viết:
Tuy nhiên, báo cáo cũng viết:
Một thành viên khác tham gia phát triển DES là Walter Tuchman được cho là đã phát biểu: "Chúng tôi phát triển DES hoàn toàn bên trong IBM và chỉ sử dụng các nhân viên của IBM. NSA đã không ép buộc bất kỳ điều gì!"
Những nghi ngờ về điểm yếu được giấu của S-box được giảm bớt trong thập niên 1990 khi Eli Biham và Adi Shamir công bố những nghiên cứu độc lập về thám mã vi sai ("differential cryptanalysis", một trong những phương pháp phổ biến để thám mã các dạng mật mã khối). S-box trong cấu trúc của DES có khả năng chống lại dạng tấn công này hiệu quả hơn so với khi nó được chọn một cách ngẫu nhiên. Điều này có thể là do IBM đã biết về dạng tấn công này từ thập niên 1970. Khả năng này một lần nữa được chứng tỏ vào năm 1994 khi Don Coppersmith công bố những tiêu chuẩn ban đầu của việc thiết kế S-box. Sau khi đảm bảo DES có khả năng chống lại đã được kỹ thuật thám mã vi sai, IBM đã giữ bí mật về nó theo yêu cầu của NSA. Coppersmith cũng giải thích thêm: "Nguyên nhân là vì thám mã vi sai là một kỹ thuật rất hiệu quả và công bố thông tin về nó điều này có thể gây nguy hại cho an ninh quốc gia." Ngay cả Shamir cũng nhìn nhận rằng: "Tôi có thể nói rằng, trái với suy nghĩ của nhiều người, không có bằng chứng về sự can thiệp vào thiết kế làm giảm độ an toàn của DES."
Lý do mà NSA đưa ra để giải thích về việc giảm độ dài khóa từ 64 bit xuống 56 bit là để dành 8 bit cho việc kiểm tra lỗi ("parity checking"). Những ý kiến chỉ trích cho rằng đây chỉ là nguyên cớ chứ không phải là nguyên nhân thực sự. Nhiều người tin rằng quyết định giảm độ dài khóa xuống 56 bit là để NSA có thể thực hiện thám mã bằng phương pháp bạo lực ("brute force attack") trước vài năm so với phần còn lại của thế giới.
DES với vai trò là một tiêu chuẩn.
Bất chấp những chỉ trích, DES được chọn làm tiêu chuẩn liên bang (Hoa Kỳ) vào tháng 11 năm 1976 và được công bố tại tài liệu có tên là "FIPS PUB 46" vào ngày 15 tháng 1 năm 1977 cho phép sử dụng chính thức đối với thông tin không mật. DES tiếp tục được khẳng định là tiêu chuẩn vào các năm 1983, 1988 (với tên "FIPS-46-1"), 1993 ("FIPS-46-2") và 1998 ("FIPS-46-3"). Lần cuối cùng quy định dùng "Triple DES" (xem thêm ở phần sau). Ngày 26 tháng 5 năm 2002, DES được thay thế bằng AES sau một cuộc thi rộng rãi (xem thêm Quá trình AES). Tuy nhiên, tại thời điểm năm 2004, DES vẫn còn được sử dụng khá phổ biến.
Năm 1994, thêm một phương pháp tấn công khác (trên lý thuyết) được công bố là thám mã tuyến tính. Tuy nhiên thời điểm nhu cầu thay thế DES trở nên thực sự cấp thiết là vào năm 1998 khi một cuộc tấn công bạo lực chứng tỏ rằng DES có thể bị phá vỡ trên thực tế. Các phương pháp thám mã này sẽ được miêu tả kỹ hơn ở phần sau.
Sự xuất hiện của DES đã tạo nên một làn sóng nghiên cứu trong giới khoa học về lĩnh vực mật mã học, đặc biệt là các phương pháp thám mã mã khối. Về điều này, Bruce Schneier viết:
Quá trình thay thế DES.
Từ cuối thập niên 1980, đầu thập niên 1990, xuất phát từ những lo ngại về độ an toàn và tốc độ thấp khi áp dụng bằng phần mềm, giới nghiên cứu đã đề xuất khá nhiều thuật toán mã hóa khối để thay thế DES. Những ví dụ tiêu biểu bao gồm: RC5, Blowfish, IDEA ("International Data Encryption Algorithm", hay Thuật toán mã hóa dữ liệu quốc tế), NewDES, SAFER, CAST5 và FEAL. Hầu hết những thuật toán này có thể sử dụng từ khóa 64 bit của DES mặc dù chúng thường được thiết kế hoạt động với từ khóa 64 bit hay 128 bit.
Ngay bản thân DES cũng có thể được sử dụng một cách an toàn hơn. Những người sử dụng DES trước đây có thể dùng Triple DES (hay TDES). Đây là phương pháp được một trong những người phát minh ra DES miêu tả và kiểm tra (Xem thêm FIPS PUB 46-3). Triple DES sử dụng DES ba lần cho một văn bản với những khóa khác nhau. Hiện nay Triple DES được xem là an toàn mặc dù tốc độ thực hiện khá chậm. Một phương pháp khác ít đòi hỏi khả năng tính toán hơn là DES-X với việc tăng độ dài từ khóa bằng cách thực hiện phép XOR từ khóa với phần thêm trước và sau khi thực hiện DES. Một phương pháp nữa là GDES được đề xuất làm tăng tốc độ mã hóa nhưng nó được chứng tỏ là không an toàn trước tấn công vi sai ("differential cryptanalysis").
Năm 2001, sau một cuộc thi quốc tế, NIST đã chọn ra một thuật toán mới, AES, để thay thế cho DES. Thuật toán được trình diện dưới tên là Rijndael. Những thuật toán khác có tên trong danh sách cuối cùng của cuộc thi AES bao gồm: RC6, Serpent, MARS và Twofish.
Mô tả thuật toán.
DES là thuật toán mã hóa khối: nó xử lý từng khối thông tin của bản rõ có độ dài xác định và biến đổi theo những quá trình phức tạp để trở thành khối thông tin của bản mã có độ dài không thay đổi. Trong trường hợp của DES, độ dài mỗi khối là 64 bit. DES cũng sử dụng khóa để cá biệt hóa quá trình chuyển đổi. Nhờ vậy, chỉ khi biết khóa mới có thể giải mã được văn bản mã. Khóa dùng trong DES có độ dài toàn bộ là 64 bit. Tuy nhiên chỉ có 56 bit thực sự được sử dụng; 8 bit còn lại chỉ dùng cho việc kiểm tra. Vì thế, độ dài thực tế của khóa chỉ là 56 bit.
Giống như các thuật toán mã hóa khối khác, khi áp dụng cho các văn bản dài hơn 64 bit, DES phải được dùng theo một phương pháp nào đó. Trong tài liệu FIPS-81 đã chỉ ra một số phương pháp, trong đó có một phương pháp dùng cho quá trình nhận thực . Một số thông tin thêm về những cách sử dụng DES được miêu tả trong tài liệu FIPS-74 .
Tổng thể.
Cấu trúc tổng thể của thuật toán được thể hiện ở Hình 1: có 16 chu trình giống nhau trong quá trình xử lý. Ngoài ra còn có hai lần hoán vị đầu và cuối ("Initial and final permutation" - IP &amp; FP). Hai quá trình này có tính chất đối nhau (Trong quá trình mã hóa thì IP trước FP, khi giải mã thì ngược lại). IP và FP không có vai trò xét về mật mã học và việc sử dụng chúng chỉ có ý nghĩa đáp ứng cho quá trình đưa thông tin vào và lấy thông tin ra từ các khối phần cứng có từ thập niên 1970. Trước khi đi vào 16 chu trình chính, khối thông tin 64 bit được tách làm hai phần 32 bit và mỗi phần sẽ được xử lý tuần tự (quá trình này còn được gọi là mạng Feistel).
Cấu trúc của thuật toán (mạng Feistel) đảm bảo rằng quá trình mã hóa và giải mã diễn ra tương tự. Điểm khác nhau chỉ ở chỗ các khóa con được sử dụng theo trình tự ngược nhau. Điều này giúp cho việc thực hiện thuật toán trở nên đơn giản, đặc biệt là khi thực hiện bằng phần cứng.
Ký hiệu sau: formula_1 thể hiện phép toán XOR. Hàm F làm biến đổi một nửa của khối đang xử lý với một khóa con. Đầu ra sau hàm F được kết hợp với nửa còn lại của khối và hai phần được tráo đổi để xử lý trong chu trình kế tiếp. Sau chu trình cuối cùng thì 2 nửa không bị tráo đổi; đây là đặc điểm của cấu trúc Feistel khiến cho quá trình mã hóa và giải mã trở nên giống nhau.
Hàm Feistel (F).
Hàm F, như được miêu tả ở Hình 2, hoạt động trên khối 32 bit và bao gồm bốn giai đoạn:
Quá trình luân phiên sử dụng S-box và sự hoán vị các bít cũng như quá trình mở rộng đã thực hiện được tính chất gọi là sự xáo trộn và khuếch tán ("confusion and diffusion"). Đây là yêu cầu cần có của một thuật toán mã hoá được Claude Shannon phát hiện trong những năm 1940.
Quá trình tạo khóa con.
Hình 3 mô tả thuật toán tạo khóa con cho các chu trình. Đầu tiên, từ 64 bit ban đầu của khóa, 56 bit được chọn ("Permuted Choice 1", hay PC-1); 8 bit còn lại bị loại bỏ. 56 bit thu được được chia làm hai phần bằng nhau, mỗi phần được xử lý độc lập. Sau mỗi chu trình, mỗi phần được dịch đi 1 hoặc 2 bit (tùy thuộc từng chu trình, nêu đó là chu trình 1,2,9,16 thì đó là dịch 1bit, còn lại thì sẽ được dich 2bit). Các khóa con 48 bit được tạo thành bởi thuật toán lựa chọn 2 ("Permuted Choice 2", hay PC-2) gồm 24 bit từ mỗi phần. Quá trình dịch bit (được ký hiệu là "«&lt;" trong sơ đồ) khiến cho các khóa con sử dụng các bit khác nhau của khóa chính; mỗi bit được sử dụng trung bình ở 14 trong tổng số 16 khóa con.
Quá trình tạo khóa con khi thực hiện giải mã cũng diễn ra tương tự nhưng các khóa con được tạo theo thứ tự ngược lại. Ngoài ra sau mỗi chu trình, khóa sẽ được dịch phải thay vì dịch trái như khi mã hóa
An toàn và sự giải mã.
Mặc dù đã có nhiều nghiên cứu về phá mã DES hơn bất kỳ phương pháp mã hóa khối nào khác nhưng phương pháp phá mã thực tế nhất hiện nay vẫn là tấn công Brute-force. Nhiều đặc tính mật mã hóa của DES đã được xác định và từ đó ba phương pháp phá mã khác được xác định với mức độ phức tạp nhỏ hơn tấn công bạo lực. Tuy nhiên các phương pháp này đòi hỏi một số lượng bản rõ quá lớn (để tấn công lựa chọn bản rõ) nên hầu như không thể thực hiện được trong thực tế.
Tấn công brute-force (vét cạn).
Đối với bất cứ phương pháp mã hóa nào, kiểu tấn công cơ bản và đơn giản nhất là tấn công bằng bạo lực: thử lần lượt tất cả các khóa có thể cho đến khi tìm ra khóa đúng. Độ dài của khóa sẽ xác định số lượng phép thử tối đa cần thực hiện và do đó thể hiện tính khả thi của phương pháp. Trong trường hợp của DES, nghi ngờ về độ an toàn của nó đã được đặt ra ngay từ khi nó chưa trở thành tiêu chuẩn. Người ta cho rằng chính NSA đã ủng hộ (nếu không muốn nói là thuyết phục) IBM giảm độ dài khóa từ 128 bit xuống 64 bit và tiếp tục xuống 56 bit. Điều này dẫn đến suy đoán rằng NSA đã có hệ thống tính toán đủ mạnh để phá vỡ khóa 56 bit ngay từ những năm 1970.
Trong giới nghiên cứu, nhiều đề xuất về các hệ thống phá mã DES được đề ra. Năm 1977, Diffie và Hellman dự thảo một hệ thống có giá khoảng 20 triệu đô la Mỹ và có khả năng phá khóa DES trong 1 ngày. Năm 1993, Wiener dự thảo một hệ thống khác có khả năng phá mã trong vòng 7 giờ với giá 1 triệu đô la Mỹ. Những điểm yếu của DES được thực sự chứng minh vào cuối những năm 1990. Vào năm 1997, công ty bảo mật RSA đã tài trợ một chuỗi cuộc thi với giải thưởng 10.000 đô la Mỹ cho đội đầu tiên phá mã được một bản tin mã hóa bằng DES. Đội chiến thắng trong cuộc thi này là dự án DESCHALL với những người dẫn đầu bao gồm Rocke Verser, Matt Curtin và Justin Dolske. Họ đã sử dụng hàng nghìn máy tính nối mạng để phá mã. Khả năng phá mã DES được chứng minh thêm lần nữa vào năm 1998 khi tổ chức Electronic Frontier Foundation (EFF), một tổ chức hoạt động cho quyền công dân trên Internet, xây dựng một hệ thống chuyên biệt để phá mã với giá thành 250000 đô la Mỹ (Xem thêm: hệ thống phá mã DES của EFF). Động cơ thúc đẩy EFF trong hành động này là nhằm chứng minh DES có thể bị phá vỡ trên lý thuyết cũng như trên thực tế: "Nhiều người không tin vào chân lý cho đến khi họ nhìn thấy sự việc bằng chính mắt mình. Xây dựng một bộ máy có thể phá khóa DES trong vòng vài ngày là cách duy nhất chứng tỏ với mọi người rằng họ không thể đảm bảo an ninh thông tin dựa vào DES." Hệ thống này đã tìm được khóa DES bằng phương pháp bạo lực trong thời gian hơn 2 ngày; trong khi vào khoảng thời gian đó, một chưởng lý của Bộ Tư pháp Hoa Kỳ (DOJ) vẫn tuyên bố rằng DES là không thể bị phá vỡ.
Các kiểu tấn công khác hiệu quả hơn phương pháp brute-force.
Hiện nay có 3 kiểu tấn công có khả năng phá vỡ DES (với đủ 16 chu trình) với độ phức tạp thấp hơn phương pháp Brute-force: phá mã vi sai ("differential cryptanalysis" - DC), phá mã tuyến tính ("linear cryptanalysis" - LC) và phá mã Davies ("Davies' attack"). Tuy nhiên các dạng tấn công này chưa thực hiện được trong thực tế.
Ngoài ra còn có những kiểu tấn công dựa trên bản thu gọn của DES - DES với ít hơn 16 chu trình. Những nghiên cứu này cho chúng ta biết số lượng chu trình cần có và ranh giới an toàn của hệ thống. Năm 1994, Langford và Hellman đề xuất phá mã vi sai - tuyến tính ("differential-linear cryptanalysis") kết hợp giữa phá mã vi sai và tuyến tính. Một dạng cải tiến của phương pháp này có thể phá vỡ DES 9 chu trình với 215.8 văn bản rõ và có độ phức tạp là 229.2 (Biham et al, 2002).
Một vài đặc điểm về cách giải mã.
DES có tính chất bù:
trong đó formula_3 là phần bù của formula_4 theo từng bít (1 thay bằng 0 và ngược lại). formula_5 là bản mã hóa của E với khóa K. formula_6 và formula_7 là văn bản rõ (trước khi mã hóa) và văn bản mã (sau khi mã hóa). Do tính bù, ta có thể giảm độ phức tạp của tấn công bạo lực xuống 2 lần (tương ứng với 1 bít) với điều kiện là ta có thể lựa chọn bản rõ.
Ngoài ra DES còn có 4 khóa yếu (weak keys). Khi sử dụng khóa yếu thì mã hóa (E) và giải mã (D) sẽ cho ra cùng kết quả:
Bên cạnh đó, còn có 6 cặp "khóa nửa yếu" (semi-weak keys). Mã hóa với một khóa trong cặp, formula_10, tương đương với giải mã với khóa còn lại, formula_11:
Tuy nhiên có thể dễ dàng tránh được những khóa này khi thực hiện thuật toán, có thể bằng cách thử hoặc chọn khóa một cách ngẫu nhiên. Khi đó khả năng chọn phải khóa yếu là rất nhỏ.
DES đã được chứng minh là không tạo thành nhóm. Nói một cách khác, tập hợp formula_14 (cho tất cả các khóa có thể) theo phép hợp thành không tạo thành một nhóm hay gần với một nhóm (Campbell and Wiener, 1992). Vấn đề này đã từng là một câu hỏi mở trong khá lâu và nếu như tạo thành nhóm thì DES có thể bị phá vỡ dễ dàng hơn bởi vì việc áp dụng DES nhiều lần (ví dụ như trong Triple DES) sẽ không làm tăng thêm độ an toàn của DES.