Tổng quan nghiên cứu

Trong kỷ nguyên chuyển đổi số, an toàn thông tin đóng vai trò sống còn đối với mọi hệ thống mạng và ứng dụng công nghệ. Sự gia tăng nhanh chóng của các cuộc tấn công mạng đòi hỏi các cơ chế bảo mật dữ liệu phải liên tục nâng cao tính bảo mật, toàn vẹn và chống chối bỏ. Mật mã khóa công khai là giải pháp nền tảng để giải quyết triệt để bài toán phân phối khóa trên môi trường truyền thông không an toàn.

Tài liệu "Xây Dựng Chương Trình Mã Hóa và Giải Mã Elgamal" của nhóm tác giả thuộc Trường Đại học Công nghiệp Hà Nội (HaUI) tập trung nghiên cứu chuyên sâu về hệ mật mã Elgamal. Hệ mật này được xây dựng dựa trên bài toán logarit rời rạc (Discrete Logarithm Problem - DLP) trên trường hữu hạn $\mathbb{Z}_p^*$. Đây là một trong những bài toán toán học kinh điển chưa có thuật toán đa thức giải quyết hiệu quả trên máy tính cổ điển.

Khoảng trống thường gặp ở người học là sự thiếu hụt cầu nối giữa lý thuyết số học trừu tượng và việc hiện thực hóa phần mềm thực tế. Nghiên cứu này giải quyết toàn diện bài toán đó thông qua việc phân tích toán học nền tảng, thiết kế giải thuật và triển khai mã nguồn trên 4 ngôn ngữ lập trình phổ biến: C#, C++, Java và Python. Phương pháp tiếp cận kết hợp chặt chẽ giữa lý thuyết đại số hiện đại và kỹ thuật lập trình giao diện người dùng (GUI).


Nội dung chi tiết

1. Cơ sở lý thuyết và Kiến trúc Hệ mật mã Elgamal

An toàn thông tin hiện đại xoay quanh ba trụ cột chính của mô hình CIA: tính bí mật (Confidentiality), tính toàn vẹn (Integrity) và tính khả dụng (Availability). Bên cạnh đó, tính không thể chối bỏ (Non-repudiation) giữ vai trò then chốt trong việc xác thực nguồn gốc thông điệp. Hệ thống mật mã được chia thành hai nhánh lớn: mật mã đối xứng (Symmetric Cryptography) và mật mã bất đối xứng (Asymmetric Cryptography).

Mật mã bất đối xứng giải quyết triệt để điểm yếu chia sẻ khóa chung của mật mã đối xứng. Hệ mật Elgamal được nhà mật mã học Taher Elgamal công bố vào năm 1985, phát triển mở rộng từ giao thức trao đổi khóa Diffie-Hellman. Không giống như RSA dựa trên bài toán phân tích thừa số nguyên tố, độ an toàn của Elgamal phụ thuộc trực tiếp vào độ khó của bài toán logarit rời rạc.

+-------------------------------------------------------------------------------+
|                       QUY TRÌNH HỆ MẬT MÃ ELGAMAL                             |
+-------------------------------------------------------------------------------+
| 1. KHỞI TẠO KHÓA (Key Generation):                                            |
|    - Chọn số nguyên tố lớn p và phần tử nguyên thủy α ∈ Zp*                   |
|    - Chọn khóa bí mật a ∈ {2, ..., p-2}                                       |
|    - Tính khóa công khai: β = α^a mod p                                       |
|    => Khóa công khai: K_pub = (p, α, β) | Khóa bí mật: K_pri = a              |
+-------------------------------------------------------------------------------+
| 2. MÃ HÓA (Encryption):                                                       |
|    - Bản rõ M ∈ Zp*                                                           |
|    - Chọn số ngẫu nhiên bí mật k ∈ {2, ..., p-2}                              |
|    - Tính cặp bản mã: C1 = α^k mod p                                          |
|                       C2 = (M * β^k) mod p                                    |
|    => Bản mã: C = (C1, C2)                                                    |
+-------------------------------------------------------------------------------+
| 3. GIẢI MÃ (Decryption):                                                      |
|    - Khôi phục bản rõ: M = C2 * (C1^a)^(-1) mod p                             |
|    - Tương đương: M = C2 * C1^(p-1-a) mod p                                   |
+-------------------------------------------------------------------------------+

Cơ chế hoạt động của Elgamal gồm ba giai đoạn độc lập nhưng liên kết chặt chẽ:

  • Khởi tạo khóa (Key Generation): Chọn một số nguyên tố lớn $p$ và một phần tử nguyên thủy (primitive root) $\alpha$ thuộc nhóm nhân $\mathbb{Z}p^*$. Người nhận chọn số ngẫu nhiên $a \in {2, ..., p-2}$ làm khóa bí mật ($K{pri} = a$), sau đó tính $\beta = \alpha^a \bmod p$. Khóa công khai được công bố là $K_{pub} = (p, \alpha, \beta)$.
  • Mã hóa (Encryption): Người gửi muốn mã hóa thông điệp $M$ sẽ chọn một số nguyên ngẫu nhiên $k \in {2, ..., p-2}$. Cặp bản mã $(C_1, C_2)$ được tính theo công thức: $C_1 = \alpha^k \bmod p$ và $C_2 = (M \cdot \beta^k) \bmod p$.
  • Giải mã (Decryption): Người nhận sử dụng khóa bí mật $a$ để tính phần tử nghịch đảo $(C_1^a)^{-1} \bmod p$. Bản rõ gốc được phục hồi thông qua phép tính: $M = (C_2 \cdot (C_1^a)^{-1}) \bmod p = (C_2 \cdot C_1^{p-1-a}) \bmod p$.

Hệ mã Elgamal sở hữu đặc tính mã hóa ngẫu nhiên (Probabilistic Encryption). Với cùng một bản rõ $M$, mỗi lần mã hóa sẽ chọn một số ngẫu nhiên $k$ khác nhau, tạo ra các cặp bản mã $(C_1, C_2)$ hoàn toàn khác biệt. Tính chất này ngăn chặn hiệu quả các hình thức tấn công phân tích mẫu bản mã (Pattern Analysis Attack).


2. Các thuật toán số học bổ trợ và Phương pháp cài đặt

Để triển khai hệ mật Elgamal hiệu quả trên máy tính, tài liệu đã tổng hợp và xây dựng hệ thống các giải thuật số học cơ sở. Việc xử lý tính toán trên các số nguyên lớn đòi hỏi các thuật toán phải được tối ưu hóa về độ phức tạp thời gian.

                           +---------------------------+
                           |  HỆ THỐNG THUẬT TOÁN SỐ   |
                           |       HỌC CỐT LÕI         |
                           +-------------+-------------+
                                         |
     +-------------------+---------------+-------------------+-------------------+
     |                   |                                   |                   |
     v                   v                                   v                   v
+------------+  +--------------------+             +-------------------+  +---------------+
| Kiểm tra   |  | Thuật toán Euclid  |             | Bình phương &     |  | Thuật toán    |
| Số nguyên  |  | & Euclid mở rộng   |             | Nhân (Square &    |  | Baby-Step     |
| tố         |  | (GCD & Nghịch đảo) |             | Multiply)         |  | Giant-Step    |
+------------+  +--------------------+             +-------------------+  +---------------+

Các thuật toán số học cốt lõi bao gồm:

  • Kiểm tra số nguyên tố (Primality Testing): Xác định tính nguyên tố của tham số modulo $p$. Thuật toán kiểm tra chia thử đến $\lceil\sqrt{n}\rceil$ được áp dụng cho các không gian số vừa phải, đảm bảo tính chuẩn xác toán học trước khi sinh khóa.
  • Thuật toán Euclid và Euclid mở rộng (Extended Euclidean Algorithm): Thuật toán Euclid cơ bản tìm ước chung lớn nhất $\gcd(a, b)$ thông qua phép chia lấy dư lặp. Thuật toán Euclid mở rộng giải phương trình đồng thức Bézout: $s \cdot r_1 + t \cdot r_0 = \gcd(r_0, r_1)$. Nhờ đó, hệ thống tìm được phần tử nghịch đảo modulo $(C_1^a)^{-1} \bmod p$ một cách nhanh chóng trong bước giải mã.
  • Thuật toán bình phương và nhân (Square-and-Multiply Algorithm): Tính lũy thừa modulo $x^n \bmod m$ với số mũ cực lớn. Thay vì nhân tuyến tính với độ phức tạp $O(n)$, thuật toán phân tích số mũ $n$ sang biểu diễn nhị phân, giảm độ phức tạp xuống mức $O(\log n)$, giúp chương trình không bị tràn số và tăng tốc độ xử lý.
  • Định lý Fermat nhỏ và Hàm phi Euler ($\phi$): Định lý Fermat chỉ ra $a^{p-1} \equiv 1 \pmod p$ với $p$ là số nguyên tố và $\gcd(a, p) = 1$. Kết hợp cùng hàm Euler $\phi(p) = p - 1$, hệ thống dễ dàng rút gọn các biểu thức lũy thừa phức tạp trong trường hữu hạn.
  • Thuật toán Baby-Step Giant-Step (Thuật toán Shanks): Phương pháp giải bài toán logarit rời rạc dựa trên kỹ thuật đánh đổi thời gian - bộ nhớ (Time-Memory Trade-off). Thuật toán chia quá trình tìm kiếm thành các bước nhỏ (Baby-step) và bước lớn (Giant-step), giúp kiểm tra và tìm kiếm phần tử sinh nguyên thủy $\alpha$ với độ phức tạp $O(\sqrt{p})$.

3. Hiện thực hóa đa nền tảng và Đánh giá hiệu năng thực nghiệm

Điểm nổi bật của tài liệu là quá trình cài đặt thực nghiệm hoàn chỉnh trên 4 môi trường lập trình khác nhau. Mỗi thành viên trong nhóm nghiên cứu đảm nhiệm một ngôn ngữ để tối ưu hóa kiến trúc phần mềm và so sánh khả năng tương thích.

Ngôn ngữ Môi trường / IDE Công nghệ Giao diện Đặc điểm & Ưu thế triển khai
C# Visual Studio 2022 Windows Forms (.NET) Giao diện trực quan, hỗ trợ cấu trúc BigInteger mạnh mẽ, dễ dàng đóng gói trên Windows.
C++ Qt Creator Community Qt GUI Framework Hiệu năng tính toán cao nhất, tối ưu hóa bộ nhớ và tốc độ xử lý bit cực nhanh.
Java Apache NetBeans Java Swing / AWT Độc lập nền tảng máy chủ/máy trạm, sử dụng java.math.BigInteger an toàn và chuẩn hóa.
Python Visual Studio Code / PyCharm Tkinter / Web App Cú pháp gọn gàng, tự động hỗ trợ số nguyên lớn với độ dài tùy ý mà không cần thư viện ngoài.

Quy trình vận hành phần mềm trên cả 4 nền tảng đều tuân theo chu trình chuẩn hóa:

  1. Khởi tạo và Sinh khóa: Người dùng nhập các tham số hoặc chọn chế độ sinh ngẫu nhiên số nguyên tố $p$, phần tử $\alpha$ và khóa bí mật $a$. Hệ thống tính toán và xuất bộ khóa công khai $K_{pub}$ và khóa riêng $K_{pri}$.
  2. Nhập văn bản và Mã hóa: Bản rõ $M$ được nhập từ bàn phím hoặc nạp trực tiếp qua tệp tin văn bản (.txt). Hệ thống tiến hành mã hóa thành chuỗi cặp $(C_1, C_2)$.
  3. Chuyển giao kênh truyền: Chức năng chuyển tiếp bản mã sang mô-đun nhận mô phỏng quá trình truyền tin qua môi trường Internet.
  4. Giải mã và Khôi phục dữ liệu: Mô-đun giải mã sử dụng khóa bí mật $a$ để tính toán ngược, phục hồi chính xác $100%$ nội dung bản rõ ban đầu.

Qua các bài kiểm thử thực tế, hệ mật Elgamal thể hiện độ an toàn vượt trội trước các phương pháp thám mã thông thường. Tuy nhiên, nhóm nghiên cứu cũng chỉ ra hạn chế cố hữu: kích thước bản mã $(C_1, C_2)$ luôn gấp đôi kích thước bản rõ ban đầu, đồng thời tốc độ tính toán chậm hơn đáng kể so với các hệ mật mã đối xứng như AES hay 3DES. Do đó, trong thực tế, Elgamal thường được ứng dụng để mã hóa khóa phiên (Session Key) hoặc triển khai sơ đồ chữ ký điện tử (Digital Signature).


Ai nên đọc tài liệu này?

Tài liệu này được biên soạn bài bản, phù hợp với nhiều nhóm đối tượng:

  • Sinh viên ngành Công nghệ thông tin và An toàn thông tin: Nguồn tài liệu tham khảo giá trị cho các học phần An toàn và bảo mật thông tin, Mật mã học, Toán rời rạc và Lập trình ứng dụng.
  • Lập trình viên phát triển phần mềm: Các kỹ sư muốn nắm vững cơ chế xây dựng các mô-đun mã hóa khóa công khai, cách xử lý số nguyên lớn và kỹ thuật tích hợp thuật toán mật mã vào ứng dụng Desktop/Web.
  • Giảng viên và Nghiên cứu sinh: Bộ tài liệu mẫu đầy đủ về lý thuyết, giải thuật toán học và sản phẩm demo thực tế, phục vụ cho công tác giảng dạy và hướng dẫn bài tập lớn.

Kiến thức nền tảng cần có:

  • Nắm vững kiến thức toán học cơ sở: Số học modulo, Lý thuyết nhóm, Số nguyên tố.
  • Hiểu biết cơ bản về cấu trúc dữ liệu và giải thuật.
  • Kỹ năng lập trình cơ bản trên ít nhất một trong các ngôn ngữ: C#, C++, Java hoặc Python.

Câu hỏi thường gặp

1. Hệ mật mã Elgamal là gì?

Hệ mật mã Elgamal là hệ thống mật mã khóa bất đối xứng được Taher Elgamal phát triển vào năm 1985. Hệ mật này hoạt động dựa trên độ khó của bài toán logarit rời rạc trong nhóm nhân của trường hữu hạn $\mathbb{Z}_p^*$, phục vụ mục đích mã hóa dữ liệu và tạo chữ ký số.

2. Quy trình mã hóa và giải mã Elgamal diễn ra như thế nào?

Để mã hóa, người gửi dùng khóa công khai $(p, \alpha, \beta)$ cùng số ngẫu nhiên $k$ để tạo bản mã gồm 2 thành phần $C_1 = \alpha^k \bmod p$ và $C_2 = M \cdot \beta^k \bmod p$. Để giải mã, người nhận dùng khóa bí mật $a$ tính $M = C_2 \cdot (C_1^a)^{-1} \bmod p$.

3. Tại sao hệ mật Elgamal có tính an toàn cao?

Độ an toàn của Elgamal dựa trên bài toán logarit rời rạc chưa có lời giải thời gian đa thức. Kẻ tấn công dù biết khóa công khai $\beta = \alpha^a \bmod p$ và $C_1 = \alpha^k \bmod p$ cũng không thể tìm được số mũ $a$ hoặc $k$ nếu $p$ là số nguyên tố đủ lớn.

4. Khi nào nên áp dụng hệ mật mã Elgamal?

Elgamal thích hợp cho việc truyền nhận khóa phiên, xác thực danh tính và ký số trong môi trường mạng không an toàn. Do tốc độ tính toán số lớn chậm và độ dài bản mã gấp đôi bản rõ, Elgamal không dùng để mã hóa trực tiếp khối lượng dữ liệu khổng lồ.

5. Mã hóa Elgamal khác biệt gì so với RSA?

Elgamal là hệ mật mang tính ngẫu nhiên (Probabilistic), mỗi lần mã hóa cùng một bản rõ cho ra một bản mã khác nhau nhờ tham số $k$. Ngược lại, RSA nguyên bản mang tính tất định (Deterministic). Về mặt toán học, Elgamal dựa trên logarit rời rạc, còn RSA dựa trên bài toán phân tích số nguyên lớn.


Kết luận

Báo cáo nghiên cứu "Xây Dựng Chương Trình Mã Hóa và Giải Mã Elgamal" cung cấp cái nhìn toàn diện từ lý thuyết giải thuật đến triển khai thực tế của một hệ mật mã khóa công khai kinh điển.

  • Nền tảng toán học vững chắc: Hệ mật xây dựng dựa trên bài toán logarit rời rạc và chuỗi giải thuật số học tối ưu (Euclid mở rộng, Bình phương và nhân, Baby-Step Giant-Step).
  • Tính an toàn cao: Đặc tính mã hóa ngẫu nhiên giúp bảo vệ dữ liệu tối ưu trước các hình thức thám mã phân tích mẫu.
  • Hiện thực hóa đa nền tảng: Cung cấp giải pháp triển khai hoàn chỉnh trên cả 4 ngôn ngữ lập trình C#, C++, Java và Python với giao diện người dùng trực quan.

Hướng phát triển tiếp theo: Nhóm tác giả định hướng nâng cấp hệ mã sang hệ mật mã đường cong Elliptic (Elliptic Curve Cryptography - ECC Elgamal) nhằm giảm kích thước khóa mà vẫn đảm bảo mức độ an toàn cao, đồng thời tích hợp thêm giao thức chữ ký số điện tử Elgamal vào các hệ thống web phân tán.

[!TIP] Hãy tải ngay trọn bộ tài liệu báo cáo và mã nguồn mẫu để làm chủ kỹ thuật lập trình mật mã khóa công khai Elgamal trên các nền tảng công nghệ phổ biến!