HỌC VIỆN KỸ THUẬT MẬT MÃ KHOA CÔNG NGHỆ THÔNG TIN ------ BÀI TẬP MÔN HỌC CƠ SỞ AN TOÀN VÀ BẢO MẬT THÔNG TIN VIẾT CHƯƠNG TRÌNH MÃ HÓA VÀ GIẢI MÃ MỘT FILE DỮ LIỆU BẰNG MẬT MÃ DES VÀ
TỔNG QUAN VỀ AN TOÀN VÀ BẢO MẬT THÔNG TIN
Tổng quan về mật mã học và an toàn bảo mật thông tin
1.1.1 Tổng quan về mật mã học
Mật mã học, một lĩnh vực quan trọng của khoa học máy tính và toán học, nghiên cứu cách bảo vệ thông tin và truyền thông khỏi các kẻ tấn công Nó cung cấp các công cụ mã hóa, cho phép người gửi và nhận thông tin trao đổi dữ liệu một cách an toàn mà không bị lộ Ngày nay, ứng dụng của mã hóa và bảo mật thông tin ngày càng phổ biến trong nhiều lĩnh vực, từ an ninh, quân sự, quốc phòng đến thương mại điện tử và ngân hàng.
Hình 1 1 Sơ đồ mã hóa và giải mã
Sự phát triển của khoa học máy tính và Internet đã thúc đẩy sự đa dạng trong nghiên cứu và ứng dụng khoa học mật mã, mở ra nhiều hướng nghiên cứu chuyên sâu Ứng dụng của khoa học mật mã không chỉ dừng lại ở việc mã hóa và giải mã thông tin, mà còn bao gồm chứng thực nguồn gốc nội dung thông tin qua chữ ký điện tử, xác thực người sở hữu mã khóa thông qua chứng nhận khóa công cộng, và các quy trình đảm bảo an toàn cho việc trao đổi thông tin và giao dịch điện tử Những nghiên cứu về mật mã đã được tích hợp vào các hệ thống phức tạp hơn, kết hợp với các kỹ thuật khác nhằm đáp ứng nhu cầu đa dạng của các ứng dụng thực tiễn, như hệ thống bỏ phiếu trực tuyến, đào tạo từ xa, quản lý an ninh qua sinh trắc học, và cung cấp dịch vụ multimedia với bảo vệ bản quyền sở hữu trí tuệ cho thông tin số.
Mật mã học bao gồm hai loại cơ bản: mật mã hóa đối xứng và mật mã hóa không đối xứng Mật mã hóa đối xứng sử dụng cùng một khóa cho cả quá trình mã hóa và giải mã.
2 mã thông tin Các ví dụ điển hình của mật mã hóa đối xứng bao gồm DES, AES, và Blowfish
Mật mã hóa không đối xứng sử dụng hai khóa khác nhau: khóa công khai, được công bố rộng rãi, và khóa bí mật, được giữ kín Các phương pháp nổi bật của loại mật mã này bao gồm RSA và ECC.
Mật mã học bao gồm các kỹ thuật như mã hóa đối xứng dòng, mã hóa một lần, hàm băm, chữ ký điện tử và chứng chỉ số Nó được ứng dụng rộng rãi trong bảo mật giao dịch ngân hàng trực tuyến, email, ứng dụng trò chuyện và truyền thông an toàn trên các mạng lưới lớn.
1.1.2 Vai trò của mật mã trong đảm bảo an toàn thông tin
Mật mã là yếu tố then chốt trong việc bảo vệ an toàn thông tin, giúp bảo vệ dữ liệu nhạy cảm và đảm bảo rằng chỉ những người được ủy quyền mới có quyền truy cập vào thông tin đó.
Mật mã là một hệ thống mã hóa thông tin, chuyển đổi dữ liệu từ dạng gốc sang dạng mã hóa nhằm ngăn chặn kẻ tấn công đọc hoặc hiểu thông tin.
Mật mã đóng vai trò quan trọng trong nhiều lĩnh vực như truyền thông trực tuyến, lưu trữ dữ liệu trên thiết bị, thanh toán điện tử và truy cập hệ thống máy tính.
Một số kỹ thuật mã hóa thông tin phổ biến bao gồm mã hóa đối xứng, mã hóa không đối xứng và hàm băm Mã hóa đối xứng sử dụng cùng một khóa cho cả quá trình mã hóa và giải mã, trong khi mã hóa không đối xứng áp dụng một khóa công khai để mã hóa và một khóa bí mật để giải mã Hàm băm tạo ra giá trị băm độc nhất cho thông tin, đảm bảo tính toàn vẹn khi truyền qua mạng Ngoài ra, 8 bit còn lại được sử dụng để kiểm tra và phát hiện lỗi trong quá trình mã hóa và giải mã.
Các bước hoạt động của DES như sau:
Mật mã là yếu tố thiết yếu trong việc bảo vệ an toàn thông tin, giúp ngăn chặn các kẻ tấn công truy cập vào dữ liệu nhạy cảm như mật khẩu, tài khoản ngân hàng và thông tin cá nhân Việc không sử dụng mật mã có thể dẫn đến việc thông tin dễ dàng bị đánh cắp hoặc xâm nhập, gây ra nhiều rủi ro cho người dùng.
Mật mã học giúp đảm bảo những tính chất sau cho thông tin:
- Tính bí mật (confidentiality): thông tin chỉ được tiết lộ cho những ai được phép
- Tính toàn vẹn (integrity): thông tin không thể bị thay đổi mà không bị phát hiện
- Tính xác thực (authentication): người gửi (hoặc người nhận) có thể chứng minh đúng họ
- Tính chống chối bỏ (non – repudiation): người gửi hoặc nhận này không thể chối bỏ việc đã gửi hoặc nhận thông tin.
Tổng quan về thuật toán DES
1.2.1 Giới thiệu tổng quan về DES
Thuật toán mã khối DES (Data Encryption Standard) là một phương pháp mã hóa với kích thước khối 64 bít và kích thước khóa 56 bít, được công nhận bởi Tổ chức Tiêu chuẩn xử lý thông tin liên bang Hoa Kỳ (FIPS) vào tháng 11/1976 và được phát hành trong tài liệu FIPS PUB 46 vào tháng 1/1977 Thuật toán này đã trải qua nhiều lần cập nhật, bao gồm các phiên bản FIPS-46-1 vào năm 1988, FIPS-46-2 vào năm 1993, và FIPS-46-3 vào năm 1998.
Thuật toán DES, có nguồn gốc từ thuật toán Lucifer do IBM phát triển, đã được chọn làm chuẩn mã hóa dữ liệu của Hoa Kỳ vào cuối năm 1976 Kể từ đó, DES đã trở thành một công cụ quan trọng trong việc bảo đảm an toàn và bảo mật thông tin trên toàn cầu trong môi trường số.
1.2.2 Cách thức hoạt động của DES
Thuật toán DES mã hóa và giải mã dữ liệu 64 bít bằng khóa 64 bít, trong đó 56 bít được sử dụng cho quá trình mã hóa/giải mã và 8 bít còn lại dùng để kiểm tra lỗi Để giải mã, cần sử dụng khóa tương ứng với khóa đã dùng trong mã hóa.
1 Chuẩn bị dữ liệu: Dữ liệu được mã hóa bằng DES được chia thành các khối có độ dài cố định là 64 bit
2 Khóa: DES sử dụng một khóa bí mật có độ dài 56 bit Trước khi sử dụng, khóa này sẽ được xử lý bằng thuật toán "key schedule" để tạo ra 16 khóa con có độ dài
3 Pha mã hóa: Dữ liệu được chia thành hai nửa có độ dài 32 bit mỗi nửa Tiếp theo, mỗi nửa dữ liệu được đưa qua một hàm mã hóa khác nhau và mỗi hàm sử dụng
4 một khóa con Quá trình mã hóa này được lặp lại 16 lần, với dữ liệu và khóa con được cập nhật sau mỗi lần mã hóa
4 Ghép dữ liệu: Sau khi 16 lần mã hóa, hai nửa dữ liệu được ghép lại và trả về dưới dạng một khối 64 bit đã được mã hóa
5 Quá trình giải mã tương tự như pha mã hóa, nhưng khóa con được sử dụng theo thứ tự ngược lại
1.2.3 Quá trình mã hóa với DES
Quá trình mã hóa với DES bao gồm các bước sau:
1 Chuẩn bị dữ liệu: Dữ liệu cần mã hóa được chia thành các khối có độ dài cố định là 64 bit Nếu dữ liệu ban đầu không đủ 64 bit, chúng ta sẽ thêm các bit không cần thiết cho đủ độ dài
2 Khởi tạo khóa: Khóa bí mật được sử dụng để mã hóa và giải mã dữ liệu có độ dài
56 bit Tuy nhiên, để tăng cường bảo mật, khóa bí mật này được mở rộng lên thành
64 bit bằng cách thêm một bit kiểm tra cho mỗi byte
3 Tạo các khóa con: Sau khi khởi tạo khóa, chúng ta sử dụng một thuật toán gọi là
"Key schedule" tạo ra 16 khóa con, mỗi khóa có độ dài 48 bit, được sử dụng để mã hóa dữ liệu trong quá trình mã hóa.
4 Pha mã hóa: Dữ liệu được chia thành hai nửa có độ dài 32 bit mỗi nửa Tiếp theo, mỗi nửa dữ liệu được đưa qua một hàm mã hóa khác nhau và mỗi hàm sử dụng một khóa con Quá trình mã hóa này được lặp lại 16 lần, với dữ liệu và khóa con được cập nhật sau mỗi lần mã hóa
5 Ghép dữ liệu: Sau khi 16 lần mã hóa, hai nửa dữ liệu được ghép lại và trả về dưới dạng một khối 64 bit đã được mã hóa
Quá trình mã hóa với DES áp dụng phương pháp mã hóa đối xứng, tức là sử dụng cùng một khóa bí mật cho cả mã hóa và giải mã Khi giải mã, quy trình tương tự như mã hóa, nhưng các khóa con được sử dụng theo thứ tự ngược lại.
Trong quá trình mã hóa dữ liệu, việc thực hiện hoán vị đầu (initial permutation) và hoán vị cuối (final permutation) sau vòng thứ 16 là rất quan trọng Những hoán vị này hỗ trợ trong việc đưa và lấy thông tin từ các khối phần cứng, đồng thời tạo điều kiện thuận lợi cho việc cài đặt phần cứng Hàm cơ sở f đóng vai trò then chốt trong việc đảm bảo tính bảo mật của thuật toán DES.
Hình 1 2 Quá trình mã hóa của DES
1.2.4 Quá trình giải mã với DES
Quá trình giải mã thực chất là quá trình mã hóa nhưng sử dụng khóa con theo thứ tự ngược lại Cụ thể, đầu vào là bản mã hóa và các khóa con được áp dụng theo thứ tự K16, K15, , K1.
Quá trình giải mã với DES được thực hiện theo các bước sau:
1 Chuẩn bị dữ liệu: Khối dữ liệu đã được mã hóa cần được chia thành hai nửa có độ dài 32 bit mỗi nửa
2 Khởi tạo khóa: Khóa bí mật được sử dụng để giải mã cũng phải được khởi tạo và mở rộng lên thành khóa 64 bit giống như trong quá trình mã hóa
3 Tạo các khóa con: Tương tự như trong quá trình mã hóa, chúng ta sử dụng thuật toán key schedule để tạo ra 16 khóa con có độ dài 48 bit mỗi khóa
4 Pha giải mã hóa: Tiếp theo, mỗi nửa dữ liệu được đưa qua hàm giải mã hóa tương ứng với khóa con theo thứ tự ngược lại so với quá trình mã hóa Quá trình giải mã hóa này được lặp lại 16 lần, với dữ liệu và khóa con được cập nhật sau mỗi lần giải mã hóa
5 Ghép dữ liệu: Cuối cùng, hai nửa dữ liệu đã giải mã được ghép lại để tạo ra khối dữ liệu ban đầu
Quá trình giải mã với DES cũng sử dụng phương pháp mã hóa đối xứng, nghĩa là cùng một khóa bí mật được áp dụng cho cả mã hóa và giải mã Tuy nhiên, trong quá trình giải mã, các khóa con được sử dụng theo thứ tự ngược lại so với quá trình mã hóa.
Tổng quan về C#
C# là một ngôn ngữ lập trình hiện đại, mạnh mẽ và đa mục đích được phát triển bởi Microsoft Ngôn ngữ này là một phần của NET Framework, một nền tảng phát triển phần mềm chủ yếu dành cho hệ điều hành Windows Tuy nhiên, C# cũng có thể được sử dụng trên các nền tảng khác như Linux và macOS thông qua NET Core và NET5+.
C# nổi bật với cú pháp đơn giản và dễ đọc, giúp người mới bắt đầu nhanh chóng tiếp cận và học hỏi ngôn ngữ lập trình này một cách hiệu quả.
An toàn và kiểm soát kiểu: C# hỗ trợ kiểm soát kiểu mạnh mẽ, giúp phát hiện và ngăn chặn lỗi trong quá trình biên dịch và thời gian chạy
Lập trình hướng đối tượng (OOP) trong C# cung cấp các tính năng quan trọng như kế thừa, đóng gói và đa hình, giúp cho việc phát triển phần mềm trở nên đơn giản và dễ quản lý hơn.
C# là một ngôn ngữ lập trình mạnh mẽ với bộ thư viện chuẩn phong phú, bao gồm các thư viện xử lý chuỗi, thư viện IO và thư viện mạng, giúp tối ưu hóa thời gian và công sức trong quá trình phát triển ứng dụng Nhờ vào sự ra đời của NET Core và NET 5+, C# đã trở thành ngôn ngữ lập trình đa nền tảng, cho phép chạy trên nhiều hệ điều hành khác nhau.
C# sở hữu một cộng đồng đông đảo và phong phú, cùng với nhiều công cụ phát triển mạnh mẽ như Visual Studio, Visual Studio Code và ReSharper, giúp hỗ trợ tối đa cho lập trình viên.
XÂY DỰNG CHƯƠNG TRÌNH MÃ HÓA VÀ GIẢI MÃ BẰNG MẬT MÃ DES
Trình soạn thảo Visual Studio
Visual Studio là phần mềm quan trọng cho lập trình website, được phát triển và sở hữu bởi Microsoft Công cụ này hỗ trợ đắc lực cho các lập trình viên trong quá trình phát triển ứng dụng web.
1997, phần mềm lập trình nay có tên mã Project Boston Nhưng sau đó, Microsoft đã kết hợp các công cụ phát triển, đóng gói thành sản phẩm duy nhất
Visual Studio là một hệ thống toàn diện cho phát triển ứng dụng, bao gồm trình chỉnh sửa mã, trình thiết kế và công cụ gỡ lỗi Với Visual Studio, người dùng có thể dễ dàng viết code, sửa lỗi và chỉnh sửa thiết kế ứng dụng chỉ với một phần mềm duy nhất Ngoài ra, người dùng còn có khả năng thiết kế giao diện và trải nghiệm tương tự như khi phát triển ứng dụng Xamarin và UWP bằng XAML hoặc Blend.
Phần mềm Visual Studio bao gồm hai phiên bản chính: Visual Studio Enterprise và Visual Studio Professional, cả hai đều là các phiên bản cao cấp có phí, thường được sử dụng bởi các công ty lập trình chuyên nghiệp Ngoài ra, Microsoft còn cung cấp phiên bản Community miễn phí, mang đến cho người dùng những tính năng cơ bản, lý tưởng cho lập trình viên không chuyên, những người mới bắt đầu tìm hiểu công nghệ, nhà phát triển cá nhân, cũng như các tổ chức phi lợi nhuận với dưới 5 người dùng.
Các tính năng phần mềm Visual Studio:
- Đa ngôn ngữ lập trình
- Kho tiện ích mở rộng phong phú
- Kho lưu trữ an toàn
- Hỗ trợ thiết bị đầu cuối
Xây dựng chương trình
Thuật toán mã hóa DES là một phương pháp mã hóa khối, xử lý thông tin theo từng khối 64 bit và thực hiện 16 vòng mã hóa Trước khi mã hóa, dữ liệu cần được chia thành các khối 64 bit, mỗi khối sẽ được đưa vào 16 vòng mã hóa DES DES sử dụng khóa để cá biệt hóa quá trình chuyển đổi, và chỉ khi biết khóa thì mới có thể giải mã văn bản Khóa trong DES có độ dài 64 bit, nhưng chỉ 56 bit được sử dụng cho mã hóa, trong khi 8 bit còn lại dành cho kiểm tra, nên độ dài thực tế của khóa chỉ là 56 bit.
2.2.1.1 Quá trình tạo khóa con
Mười sáu vòng lặp của thuật toán DES thực hiện cùng một quy trình, nhưng mỗi vòng sử dụng 16 khóa con khác nhau Tất cả các khóa con này được tạo ra từ khóa chính của DES thông qua một thuật toán đồng nhất.
Hình 2 2 Sơ đồ tạo khóa con
K là chuỗi dữ liệu có độ dài 64 bit (8 byte), trong đó mỗi byte có 8 bit được sử dụng để kiểm tra phát hiện lỗi, với các bit này nằm ở các vị trí 8, 16, 24,… 64, tạo ra một chuỗi 56 bit Sau khi loại bỏ các bit kiểm tra, chuỗi 56 bit này sẽ được hoán vị thông qua ma trận PC-1.
Hình 2 3 Bảng hoán vị PC – 1
Chuỗi bit sau khi hoán vị qua PC – 1 được chia thành 2 phần:
Mỗi phần được thực hiện xử lý một cách độc lập:
Trong đó: 𝐿𝑆 𝑖 biểu diễn phép dịch vòng sang trái 1 hoặc 2 bit tùy thuộc vào i
Hình 2 4 Bảng dịch bit theo vòng lặp
Sau khi được CiDi khóa Ki được xác định bằng các hoán vị theo ma trận PC – 2
Hình 2 5 Bảng ma trận hoán vị PC – 2
2.2.1.2 Quá trình mã hóa Ở quá trình này chia thành 3 giai đoạn
Với bản rõ cho trước X, 1 xâu X’ được tạo ra bằng cách hoán vị các bit của X theo bảng hoán vị IP: X’ = IP(X) = L0R0
Hình 2 6 Bảng hoán vị IP
Tính 16 lần lặp theo 1 hàm xác định Ta sẽ tính LiRi (1≤ i ≤16) theo quy tắc: Li = Ri-1
Ri = Li-1 xor F(Ri-1 ,Ki)
Hình 2 7 Sơ đồ một vòng mã hóa DES
- Hàm F có 2 biến vào là R và K
- Ri-1 được mở rộng từ 32 bit lên 48 bit thông hàm mở rộng E a Hàm F
- Đầu vào hàm F có 2 biến:
Biến 1: R là xâu bit có độ dài 32 bit
Biến 2: Khóa K là xâu bit có độ dài 48 bit
- Đầu ra của F là xâu có độ dài 32 bit
Biến Ri-1 được mở rộng thành một xâu bit dài 48 bit thông qua hàm mở rộng cố định E Hàm E(Ri-1) thực chất là một hoán vị lặp lại 16 bit của biến Ri-1.
• Tính E(Ri-1) XOR Ki và viết kết quả thành 8 xâu B1 B2 B3 B4 B5B6 B7 B8 Mỗi xâu 6 bit
• Đưa khối 6 bit (Bi= b1b2b3b4b5b6) vào 8 bảng S1S2…S8 được gọi là các hộp S-Box Mỗi hộp S-Box là một bảng ma trận 4*16 cố định có các cột từ 0 đến
15 và các hạng từ 0 đến 3 Mới mỗi xâu 6 bit Bi = b1 b2 b3 b4 b5 b6ta tính được
Si(Bi) bằng cách Hai bit b1b6 xác định hang r của hộp S (VD: 01B 1D thì vị chí là hàng 2) Bốn bit b2 b3 b4 b5xác định định cột c của hộp S (VD:
Trong hệ thống 0101B 5D, vị trí được xác định tại cột 5 Tại đây, Si(Bi) sẽ nhận diện phần tử tại tọa độ (r,c), và phần tử này sẽ được chuyển đổi sang hệ nhị phân 4 bít Do đó, sẽ có 8 khối với 6 bit B1.
B2 B3 B4 B5B6 B7 B8 sẽ cho ra 8 khối 4 bit Vậy khi ra khỏi S-Box ta sẽ được một xâu Ci 32 bit
• Xâu Ci khi ra khỏi S-Box được hoán vị theo phép toàn hoán vị P (còn được gọi là P-Box) Kết quả P(C) là kết quả của hàm F(Ri-1,Ki)
- Bảng S (S – Box) và bảng hoán vị P (P – Box):
Hình 2 10 Bảng hoán vị P (P – Pox) b Hàm mở rộng E
Hàm mở rộng E sẽ mở rộng độ dài dãy Ri từ 32bit lên 48bit thông qua việc thay đổi thứ tự và lặp lại các bit Mục đích của việc này là để cải thiện tính bảo mật và hiệu quả trong quá trình mã hóa.
- Làm độ dài của Ri bằng cỡ khóa K (48 bit) để thực hiện phép cộng modulo XOR
- Cho kết quả dài hơn để có thế nén được trong suốt quá trình thay thế
Hình 2 11 Bảng mô tả hàm mở rộng E
Giai đoạn 3: Áp dụng hoán vị ngược IP-1 cho xâu bit R16L16 ta thu được bản mã Y:
Hình 2 12 Bảng hoán vị IP – 1
Toàn bộ quá trình mã hóa ta có thể mô tả:
Hình 2 13 Quá trình mã hóa
Do là một thuật toán đối xứng nên quá trình giải mã và mã hóa là giống nhau chỉ khác ở khóa Ki chạy từ 16 tới 1:
2.2.2 Các hàm hỗ trợ mã hóa và giải mã
2.2.2.1 Hàm hoán vị permute() static int[] Permutation(byte[] input, int[] permutationTable)
16 int[] result = new int[permutationTable.Length]; for (int i = 0; i < permutationTable.Length; i++)
{ int bitIndex = permutationTable[i] - 1; int byteIndex = bitIndex / 8; int bitOffset = bitIndex % 8; int mask = 1 > (7 - bitOffset); result[i] = bit;
Hàm “permute” có đầu vào là một chuỗi nhị phân cần hoán vị, 1 bảng hoán vị để ánh xạ và số lượng phần tử của bảng hoán vị
Hàm hoán vị “permute” được sử dụng ở hầu hết các bước trong mỗi vòng mã hóa
2.2.2.2 Hàm chuyển mảng bit sang mảng byte static byte[] BitsToBytes(int[] bits)
{ byte[] bytes = new byte[bits.Length / 8]; for (int i = 0; i < bytes.Length; i++)
Hàm “Chuyển mảng bit sang mảng byte” trong thuật toán DES đóng vai trò quan trọng trong việc chuyển đổi dữ liệu từ dạng bit sang dạng byte Dữ liệu trong DES thường được xử lý dưới dạng chuỗi bit (0 và 1), nhưng cần thiết phải biểu diễn dưới dạng mảng byte để thuận tiện cho việc xử lý và truyền tải.
2.2.2.3 Hàm chuyển mảng int thành chuỗi hex static string ByteArrayToString(byte[] bytes)
StringBuilder sb = new StringBuilder(); foreach (byte b in bytes) sb.AppendFormat("{0:X2}", b); return sb.ToString();
2.2.2.4 Chuyển một số nguyên thành mảng bit
{ int[] bits = new int[bitCount]; for (int i = bitCount - 1; i >= 0; i )
2.2.3 Hàm mã hóa và giải mã
2.2.3.1 Hãm mã hóa DES static string DESEncrypt(string input, string key)
{ byte[] keyBytes = Encoding.ASCII.GetBytes(key); byte[] inputBytes = Encoding.UTF8.GetBytes(input); int[] IP = { 58, 50, 42, 34, 26, 18, 10, 2,
2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11 }; int[][] SBoxes = { S1, S2, S3, S4, S5, S6, S7, S8 }; int[] keyBits = Permutation(keyBytes, PC1); int[] L = new int[32]; int[] R = new int[32]; int[] temp = new int[32]; int[] IPResult = Permutation(inputBytes, IP);
21 for (int round = 0; round < 16; round++)
Array.Copy(R, 0, temp, 0, 32); int[] expandedR = Permutation(R, EP); for (int i = 0; i < 48; i++)
} int[] sBoxOutput = new int[32]; for (int i = 0; i < 8; i++)
Array.Copy(expandedR, i * 6, chunk, 0, 6); int row = 2 * chunk[0] + chunk[5]; int col = 8 * chunk[1] + 4 * chunk[2] + 2 * chunk[3] + chunk[4]; int value = SBoxes[i][16 * row + col]; int[] bits = IntToBits(value, 4);
} int[] pBoxOutput = Permutation(sBoxOutput, P); for (int i = 0; i < 32; i++)
Array.Copy(L, 0, combined, 32, 32); int[] finalResult = Permutation(combined, IP.Reverse()); return ByteArrayToString(BitsToBytes(finalResult)); }
2.2.3.2 Hàm giải mã DES static string DESDecrypt(string input, string key)
{ byte[] keyBytes = Encoding.ASCII.GetBytes(key); byte[] inputBytes = Encoding.UTF8.GetBytes(input); int[] IP = { 58, 50, 42, 34, 26, 18, 10, 2,
2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11 }; int[][] SBoxes = { S1, S2, S3, S4, S5, S6, S7, S8 }; int[] keyBits = Permutation(keyBytes, PC1); int[] L = new int[32]; int[] R = new int[32]; int[] temp = new int[32]; int[] IPResult = Permutation(inputBytes, IP);
Array.Copy(IPResult, 32, R, 0, 32); for (int round = 15; round >= 0; round )
Array.Copy(L, 0, temp, 0, 32); int[] expandedR = Permutation(R, EP); for (int i = 0; i < 48; i++)
} int[] sBoxOutput = new int[32]; for (int i = 0; i < 8; i++)
Array.Copy(expandedR, i * 6, chunk, 0, 6); int row = 2 * chunk[0] + chunk[5]; int col = 8 * chunk[1] + 4 * chunk[2] + 2 * chunk[3] + chunk[4]; int value = SBoxes[i][16 * row + col]; int[] bits = IntToBits(value, 4);
} int[] pBoxOutput = Permutation(sBoxOutput, P); for (int i = 0; i < 32; i++)
Array.Copy(R, 0, combined, 32, 32); int[] finalResult = Permutation(combined, IP.Reverse()); return ByteArrayToString(BitsToBytes(finalResult));
TỔNG KỂT
Kết quả đạt được
Sau khi hoàn thành đề tài, nhóm đã tích lũy được kiến thức mới và hiểu rõ hơn về các thuật toán mã hóa và giải mã, những kiến thức này sẽ hữu ích cho công việc sau này.
Mật mã học là một lĩnh vực quan trọng giúp bảo vệ thông tin cá nhân và tài sản của các tổ chức Bài viết cung cấp kiến thức cơ bản về mật mã học, bao gồm các thuật toán mã hóa, giải mã và khóa Hiểu rõ những khái niệm này sẽ giúp nhận thức được vai trò thiết yếu của mật mã học trong việc bảo vệ dữ liệu.
- Hiểu về thuật toán mã hóa DES
Khi hoàn thành đề tài này, bạn sẽ được tiếp xúc với ngôn ngữ lập trình C# và có khả năng viết các chương trình mã hóa và giải mã file dữ liệu bằng thuật toán DES.
- Khả năng viết chương trình mã hóa và giải mã sẽ được tăng lên
Kiến thức và kỹ năng từ đề tài này có thể áp dụng vào các dự án thực tế, đặc biệt là trong việc bảo vệ dữ liệu, một yếu tố quan trọng không thể thiếu.
3.1.2 Chương trình mã hóa và giải mã
- Giao diện của chương trình mã hóa và giải file bằng DES
Sau khi hoàn thành nghiên cứu và triển khai đề tài, nhóm đã mở rộng và cải tiến giao diện để người dùng dễ dàng quan sát và sử dụng hơn.
Hình 3 1 Giao diện ứng dụng mã hóa DES và gửi file bằng C#
Hình 3 2 Giao diện nhận file và giải file mã hóa
Quá trình sử dụng ứng dụng Mã hóa và Giải mã DES bằng C# đã được nhóm phát triển một cách tối giản nhất về cách dùng:
- Khi bắt đầu cần chạy hai chương trình rồi bấm “StartListening” ở chương trình nhận file để lắng nghe thông tin từ chương trình gửi
- Sau đó lựa chọn file ký tự cần mã hóa ở chương trình gửi file rồi nhấn nút
“Send”, nếu gửi thành công sẽ có thông báo như sau:
Hình 3 3 Hình thông báo gửi file thành công
- Nếu gặp lỗi thì sẽ hiện thông báo lỗi
- Sau khi chương trình gửi thành công ở bên máy nhận chương trình sẽ hiển thị như sau:
Hình 3 4 Hình ảnh đã nhận được file mã hóa ở chương trình nhận
Khi chương trình hiển thị thông báo “File received Click Download to save.”, bạn chỉ cần nhấn “Download” để tải file mã hóa về thư mục mong muốn.
Nhấn "Upload and Encrypt" để tải lên file đã mã hóa cho chương trình giải mã Sau khi hoàn tất quá trình giải mã, chương trình sẽ tự động lưu file đã được giải mã vào cùng thư mục với file gốc.
Đánh giá
- Chương trình hoạt động chính xác 100%
- Tốc độ mã hóa và giải mã là rất nhanh, đơn vị là miliseconds và sẽ tùy thuộc một phần vào độ lớn của file ký tự
- Chương trình mã hóa và giải mã dễ sử dụng
Trong quá trình nghiên cứu đề tài, việc hiểu rõ và sâu sắc về thuật toán mã hóa và giải mã gặp nhiều khó khăn, dẫn đến tốc độ hoàn thiện đề tài chưa được nhanh chóng.
Theo nghiên cứu, thuật toán mã hóa DES đã trở nên lỗi thời do bị tấn công bởi các phương pháp như brute force, phân tích miền tần số, phân tích hiệu suất và tấn công xem trước.
Chương trình này chỉ có khả năng mã hóa và giải mã tệp tin trực tiếp từ hệ thống tệp của nó, mà không hỗ trợ đọc các tệp tin mã hóa từ các nguồn bên ngoài như email hoặc đám mây Điều này có thể hạn chế khả năng sử dụng của chương trình.
Phương hướng phát triển
- Nghiên cứu và tối ưu hóa mã nguồn để tăng tốc độ xử lý mã hóa và giải mã
Chương trình có thể được mở rộng để hỗ trợ mã hóa và giải mã nhiều loại file khác nhau, bao gồm hình ảnh, âm thanh, video, và các file dữ liệu thông thường.
- Phát triển chương trình để mã hóa và giải mã theo các thuật toán khác như AES, RSA, Blowfish, vv
Chương trình có thể được cải tiến để ngăn chặn việc sao chép bằng cách tích hợp tính năng mã hóa thông tin quan trọng trong tệp, từ đó giúp bảo vệ các tệp khỏi việc sao chép hoặc sử dụng trái phép.
- Phát triển thêm để chương trình yêu cầu người dùng xác thực trước khi mã hóa hoặc giải mã các file, giúp đảm bảo an toàn thông tin