Thực nghiệm chương trình mã hóa theo chữ ký số MD5

Một phần của tài liệu An Toàn Và Bảo Mật Thông Tin (Trang 26)

Đâu tiên tôi tạo một dữ liệu với tên data có nội dung là “Nguyen Van Nam” như hình dưới.

Hình 2.2.1. Thực nghiệm tạo cơ sở dữ liệu chữ ký số MD5

Trang - 27 Hình 2.2.2. Thực nghiệm chương trình theo chữ ký MD5

Nhìn hình 2.2.2 cho chúng ta thấy mã hóa có thông số

“dc5c94da23cf0a3d0c6e661e054b0a30” là như nhau. Ta đặt giả sử trong trường hợp tệp tin data.txt của ta ở trên bị thay đổi như hình sau:

Hình 2.3.1 Thực nghiệm tạo cơ sở dữ liệu chữ ký số MD5

Dễ nhìn thấy dữ liệu Input Text chúng ta vẫn giữ nguyên là Nguyen Van Nam thì điều gì sẽ xãy ra với thuật toán của chúng ta. Nhìn vào hình dưới.

Hình 2.3.2. Thực nghiệm chương trình theo chữ ký MD5

Kết quả thực nghiệm cho thấy mã Khóa lúc ban đầu và lúc kiểm tra hoàn toàn khác nhau, điều này cho thấy dữ liệu của chúng ta đã bị tấn công và thay đổi.

Trang - 28 2.3. TẤN CÔNG CHỮ KÝ DES

2.3.1. Tổng quát

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 & 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: 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ình 2.4. Cấu trúc thuật toán Feistel dùng trong DES

Trang - 29 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.

2.3.1.1. Hàm Feistel (F)

Hàm F, như được miêu tả ở Hình dưới, hoạt động trên khối 32 bit và bao gồm bốn giai đoạn:

Hình 2.5. Hàm F (F-function) dùng trong DES

Mở rộng: 32 bit đầu vào được mở rộng thành 48 bit sử dụng thuật toán hoán vị mở rộng (expansion permutation) với việc nhân đôi một số bit. Giai đoạn này được ký hiệu là E trong sơ đồ.

Trộn khóa: 48 bit thu được sau quá trình mở rộng được XOR với khóa con. Mười sáu khóa con 48 bit được tạo ra từ khóa chính 56 bit theo một chu trình tạo khóa con (key schedule) miêu tả ở phần sau.

Trang - 30

Thay thế: 48 bit sau khi trộn được chia làm 8 khối con 6 bit và được xử lý qua hộp thay thế S-box. Đầu ra của mỗi khối 6 bit là một khối 4 bit theo một chuyển đổi phi tuyến được thực hiện bằng một bảng tra. Khối S-box đảm bảo phần quan trọng cho độ an toàn của DES. Nếu không có S-box thì quá trình sẽ là tuyến tính và việc thám mã sẽ rất đơn giản.

Hoán vị: Cuối cùng, 32 bit thu được sau S-box sẽ được sắp xếp lại theo một thứ tự cho trước (còn gọi là P-box).

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.

2.3.1.2. Quá trình tạo khóa con

Hình 2.6. Quá trình tạo khóa con trong DES

Hình trên 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à "<<<" 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

Trang - 31 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 (adsbygoogle = window.adsbygoogle || []).push({});

2.3.2. Các loại tấn công phổ biến 2.3.2.1. Tấn công brute-force (vét cạn) 2.3.2.1. 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.

Hình 2.7. Hệ thống phá mã DES

Hệ thống phá mã DES của Hiệp hội EFF được xây dựng với ngân sách 250000 đô la Mỹ. Hệ thống bao gồm 1536 bộ vi xử lý thiết kế riêng và có khả năng duyệt hết

Trang - 32 mọi khóa DES trong vòng vài ngày. Hình ảnh thể hiện một phần bảng mạch của hệ thống chứa một vài bộ vi xử lý.

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ỡ.

2.3.2.2. 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ế.

Phá mã vi sai được Eli Biham và Adi Shamir tìm ra vào cuối những năm 1980 mặc dù nó đã được IBM và NSA biết đến trước đó. Để phá mã DES với đủ 16 chu

Trang - 33 trình, phá mã vi sai cần đến 247 văn bản rõ. DES đã được thiết kế để chống lại tấn công dạng này.

Phá mã tuyến tính được tìm ra bởi Mitsuru Matsui và nó đòi hỏi 243

văn bản rõ (Matsui, 1993). Phương pháp này đã được Matsui thực hiện và là thực nghiệm phá mã đầu tiên được công bố. Không có bằng chứng chứng tỏ DES có khả năng chống lại tấn công dạng này. Một phương pháp tổng quát hơn, phá mã tuyến tính đa chiều (multiple linear cryptanalysis), được Kaliski và Robshaw nêu ra vào năm 1994, Biryukov và cộng sự tiếp tục cải tiến vào năm 2004. Nghiên cứu của họ cho thấy mô phỏng tuyến tính đa chiều có thể sử dụng để giảm độ phức tạp của quá trình phá mã tới 4 lần (chỉ còn 241 văn bản rõ). Kết quả tương tự cũng có thể đạt được với kiểu tấn công tuyến tính kết hợp với lựa chọn bản rõ (Knudsen and Mathiassen, 2000). Junod (2001) đã thực hiện một số thực nghiệm để tìm ra độ phức tạp thực tế của phá mã tuyến tính và thấy rằng quá trình thực tế nhanh hơn dự đoán: 239×241.

Phá mã Davies: trong khi phá mã vi sai và phá mã tuyến tính là các kỹ thuật phá mã tổng quát, có thể áp dụng cho các thuật toán khác nhau, phá mã Davies là một kỹ thuật dành riêng cho DES. Dạng tấn công này được đề xuất lần đầu bởi Davies vào cuối những năm 1980 và cải tiến bởi Biham và Biryukov (1997). Dạng tấn công mạnh nhất đòi hỏi 250 văn bản rõ, độ phức tạp là 250 và có tỷ lệ thành công là 51%.

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).

2.3.3. Một vài đặc điểm về cách giải mã

DES có tính chất bù: ( ) ̅( ̅)= ̅.

trong đó ̅ là phần bù của x theo từng bít (1 thay bằng 0 và ngược lại). là bản mã hóa của E với khóa K. P và C 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

Trang - 34 (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ả:

( ( )) và equivalently, .

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, K1, tương đương với giải mã với khóa còn lại, K2:

( ( )) và equivalently, .

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 } (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.

2.3.4. Ứng dụng mã hóa theo chữ ký số DES 2.3.4.1. Thuật giải mã hóa 2.3.4.1. Thuật giải mã hóa

Trang - 35 b) Giải mã

2.3.4.2. Thực nghiệm chương trình mã hóa theo chữ ký số DES

Hình 2.8.1. Thực nghiệm chương trình mã hóa theo chữ ký số DES Lưu ý: Ở đây chúng tôi sử dụng khóa 12345678 khóa này sẽ đảm bảo độ àn toàn giữa người nhận và người gửi. Trong trường hợp người nhận và người gửi không biết khóa trên thì quá trình giải mã sẽ không thành công.

Hình 2.8.2. Thực nghiệm lỗi chương trình theo chữ ký DES (adsbygoogle = window.adsbygoogle || []).push({});

Theo hình 2.8.2 trên Khóa 123 không phải là khóa của quy trình giải mã trên. Tổng thể quy trình mã hóa và giải mã của 3 thuật toán trên như sau:

Điều này cho thấy nếu trong quá trình gửi và nhận nếu bị đánh cắp thì sẽ được bảo mật một cách nghiêm ngặt cho các bên nhận hay bên gửi. Hơn nữa, sẽ đảm bảo được quá trình truyên và gửi thông tin trên mạng xã hội, mỗi trường dễ bị tấn công.

Trang - 36 Dưới đây là giao diện chính của chương trình.

Trang - 37 TÀI LIỆU THAM KHẢO

[1]. Phan Đình Diệu, lý thuyết mật mã và an toàn thông tin, 2004.

[2]. TS. Nguyễn Ngọc Cương, Bài Giảng An toàn hệ thống thông tin, 1999.

[3]. TS. Hoàng Xuân Dậu, Bài Giảng An toàn thông tin-Khoa công nghệ thông tin. [4]. PGS. TS. Trịnh Nhật Tiến, Bài giảng môn An toàn dữ liệu, 2005.

[5]. Hà Duy Khoái, Phan Huy Điền, Mã hóa thông tin. Cơ sở toán học và ứng dụng, 2003.

[6]. Jalal Feghhi, Jalil Feghhi, Peter Williams. Digital Certificates. Applied Internet Security, 1999.

[7] S. Castano, M. Fugina, G. Martella, P. Samarati. Database Security, 1994. [8]. Danley Harrisson. “An Introduction to Steganography", 2002

Một phần của tài liệu An Toàn Và Bảo Mật Thông Tin (Trang 26)