Giới thiệu dự án

Trong kỷ nguyên chuyển đổi số và bùng nổ lưu lượng dữ liệu truyền thông qua mạng Internet, an toàn thông tin trở thành yêu cầu sống còn đối với mọi hệ thống mạng và ứng dụng viễn thông. Theo các báo cáo an ninh mạng toàn cầu, hơn 80% các cuộc tấn công dữ liệu bắt nguồn từ việc đánh cắp hoặc nghe lén thông tin trên các kênh truyền không an toàn. Đảm bảo bốn trụ cột an ninh thông tin gồm Tính bí mật (Confidentiality), Tính toàn vẹn (Integrity), Tính khả dụng (Availability)Tính không thể chối bỏ (Non-Repudiation) đòi hỏi nền tảng mật mã học mạnh mẽ.

Trước đây, các hệ mật mã đối xứng cổ điển (như Caesar, mã thay thế, mã Vigenère, mã hoán vị) và chuẩn mã hóa dữ liệu DES (Data Encryption Standard) với khóa 56-bit đã bộc lộ những nhược điểm nghiêm trọng: không gian khóa nhỏ dễ bị tấn công vét cạn (brute-force), khó khăn trong bài toán phân phối khóa bí mật qua kênh truyền công cộng, và không hỗ trợ chữ ký số (digital signature).

Đề tài tốt nghiệp ngành Điện tử Viễn thông với tên gọi "Xây dựng chương trình mã hóa và giải mã RSA" do sinh viên Lê Thế Trị thực hiện dưới sự hướng dẫn của ThS. Nguyễn Văn Dương tại Trường Đại học Dân lập Hải Phòng đã giải quyết triệt để các rào cản trên. Đồ án tập trung nghiên cứu cơ sở lý thuyết số học và phát triển phần mềm mã hóa/giải mã hoàn chỉnh dựa trên hệ mật mã khóa công khai RSA (Rivest–Shamir–Adleman).

   [Plaintext M] ---> ( Mã hóa: C = M^e mod n ) ---> [Ciphertext C]
                            ^                             |
                            | (Khóa công khai PU={e,n})    |
                                                          v
   [Plaintext M] <--- ( Giải mã: M = C^d mod n ) <--------+
                            ^
                            | (Khóa bí mật PR={d,n})

Mục tiêu dự án

  1. Hệ thống hóa cơ sở toán học của mật mã học bất đối xứng: Thuật toán Euclid mở rộng (Extended Euclidean Algorithm), Định lý Fermat nhỏ, Định lý Euler, hàm số Euler $\phi(n)$, kiểm tra số nguyên tố xác suất Miller-Rabin, Định lý phần dư Trung Hoa (Chinese Remainder Theorem - CRT), và bài toán Logarithm rời rạc.
  2. Thiết kế và hiện thực hóa thuật toán sinh cặp khóa RSA chuẩn với độ an toàn cao: Khóa công khai $PU = {e, n}$ và khóa cá nhân $PR = {d, n}$.
  3. Tối ưu hóa hiệu năng tính toán thông qua giải thuật lũy thừa mô-đun nhanh (Square-and-Multiply / Binary Exponentiation) và kỹ thuật phân tích khối văn bản.
  4. Lập trình module ứng dụng thực thi bằng ngôn ngữ Python (3.py), cho phép người dùng nhập văn bản rõ, mã hóa thành chuỗi số nguyên và giải mã phục hồi nguyên vẹn bản rõ ban đầu.

Phạm vi và giới hạn

  • Phạm vi nghiên cứu: Triển khai quy trình mã hóa RSA cho chuỗi văn bản và ký tự số, ứng dụng trong truyền nhận dữ liệu an toàn giữa hai thực thể (Alice và Bob).
  • Giới hạn kỹ thuật: Chương trình tập trung vào giải thuật cốt lõi và kiểm nghiệm số học trên môi trường Python; cấu trúc mã hóa khối ký tự 4 chữ số theo modulo $n$, chưa tích hợp giao thức bổ đệm tiêu chuẩn như PKCS#1 v2.1 (OAEP).

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Hệ thống mật mã được phân loại dựa trên cơ chế khóa gồm hệ mật đối xứng và hệ mật bất đối xứng:

Tiêu chí Hệ mật đối xứng (Symmetric - DES/AES) Hệ mật bất đối xứng RSA (Asymmetric) Hệ mật ElGamal
Cơ chế khóa 1 khóa bí mật duy nhất dùng chung Cặp khóa: Công khai ($e, n$) và Bí mật ($d, n$) Cặp khóa dựa trên Logarithm rời rạc
Quản lý & Phân phối khóa Phức tạp, cần kênh an toàn riêng ($O(N^2)$ khóa cho $N$ người) Đơn giản, công khai $PU$, chỉ giữ kín $PR$ ($2N$ khóa) Đơn giản, công bố tham số nguyên thủy
Tốc độ xử lý Rất nhanh (phù hợp mã hóa luồng dữ liệu lớn) Trung bình (phụ thuộc phép nhân lũy thừa mô-đun lớn) Chậm hơn RSA do sinh số ngẫu nhiên cho mỗi khối
Kích thước bản mã Bằng kích thước bản rõ Tương đương độ dài modulo $n$ Gấp đôi kích thước bản rõ ($y_1, y_2$)
Ứng dụng chữ ký số Không hỗ trợ trực tiếp Hỗ trợ xác thực và chữ ký số tự nhiên Hỗ trợ chữ ký số (DSA/ECDSA)

Phân tích yêu cầu theo mô hình MoSCoW

  • Must have (Bắt buộc có): Module kiểm tra tính nguyên tố Miller-Rabin; Thuật toán Euclid mở rộng tìm nghịch đảo modulo $d = e^{-1} \pmod{\phi(n)}$; Hàm mã hóa $C = M^e \pmod n$ và hàm giải mã $M = C^d \pmod n$.
  • Should have (Nên có): Giải thuật bình phương và nhân liên tiếp (Square-and-Multiply) để tối ưu thời gian tính lũy thừa lớn; Xử lý chuỗi văn bản phân tách theo khối 4 chữ số.
  • Could have (Có thể có): Áp dụng Định lý số dư Trung Hoa (CRT) để gia tốc giải mã lên 4 lần; Lựa chọn số mũ công khai tiêu chuẩn $e = 65537$ ($2^{16} + 1$).
  • Won't have (Chưa thực hiện): Tích hợp chứng chỉ số X.509 và hạ tầng khóa công khai PKI hoàn chỉnh trong phiên bản thử nghiệm.

Thiết kế hệ thống

Kiến trúc chương trình gồm 4 khối chức năng chính liên kết chặt chẽ:

graph TD
    A[Module Sinh Khóa] -->|Tạo p, q ngẫu nhiên| B(Kiểm tra nguyên tố Miller-Rabin)
    B -->|Xác thực p, q| C(Tính n = p*q & phi_n = p-1*q-1)
    C -->|Chọn e & GCD e, phi_n = 1| D(Euclid mở rộng: Tính d = e^-1 mod phi_n)
    D -->|Xuất cặp khóa| E[Cặp Khóa: PU={e,n}, PR={d,n}]
    
    F[Bản rõ Plaintext M] --> G[Module Mã Hóa]
    E -->|Khóa PU={e,n}| G
    G -->|Lũy thừa nhanh: C = M^e mod n| H[Bản mã Ciphertext C]
    
    H --> I[Module Giải Mã]
    E -->|Khóa PR={d,n}| I
    I -->|Lũy thừa nhanh: M = C^d mod n| J[Bản rõ phục hồi M]

Ngăn xếp công nghệ (Technology Stack)

  • Ngôn ngữ lập trình: Python 3.6+
  • Thư viện chuẩn: math, sys, random
  • Môi trường triển khai: Hệ điều hành Linux (Ubuntu 18.04 LTS) / Windows 10 (x64)

Phương pháp luận phát triển (Methodology)

Dự án áp dụng mô hình phát triển tuyến tính kết hợp kiểm thử vi mô theo từng giai đoạn (V-Model):

[Phân tích lý thuyết số] -----------------------------> [Kiểm thử tính đúng đắn toán học]
        \                                                            /
    [Thiết kế giải thuật Euclid & Miller-Rabin] ---> [Kiểm thử Unit Test từng hàm]
            \                                                    /
        [Lập trình mã nguồn RSA trên Python] ---------> [Kiểm thử tích hợp chu trình Mã-Giải]

Đánh giá và giảm thiểu rủi ro

  1. Rủi ro số mũ công khai nhỏ ($e = 3$): Nếu cùng gửi một thông điệp $M$ cho 3 người nhận khác nhau với $e = 3$, kẻ tấn công có thể dùng CRT để khôi phục $M$ mà không cần khóa riêng.
    Biện pháp: Khuyến nghị sử dụng $e = 65537$ ($F_4 = 2^{16} + 1$), vừa đảm bảo tối ưu phép nhân nhị phân (chỉ có 2 bit 1), vừa triệt tiêu lỗ hổng Coppersmith.
  2. Rủi ro xác suất hợp số lọt qua kiểm tra nguyên tố:
    Biện pháp: Chạy thuật toán xác suất Miller-Rabin với số vòng lặp kiểm tra $t = 20$, đưa xác suất sai sót giảm xuống dưới $(\frac{1}{4})^{20} \approx 9.09 \times 10^{-13}$.

Implementation và kết quả

Quy trình phát triển và các thuật toán cốt lõi

1. Thuật toán Euclid mở rộng tìm nghịch đảo Modulo

Để tính khóa bí mật $d$ thỏa mãn phương trình đồng dư: $$e \cdot d \equiv 1 \pmod{\phi(n)} \iff e \cdot d + \phi(n) \cdot y = \gcd(e, \phi(n)) = 1$$

Đoạn mã hiện thực thuật toán Euclid mở rộng:

def extended_gcd(a, b):
    """
    Giải phương trình Diophantine: a*x + b*y = gcd(a, b)
    Trả về (gcd, x, y)
    """
    if a == 0:
        return b, 0, 1
    gcd, x1, y1 = extended_gcd(b % a, a)
    x = y1 - (b // a) * x1
    y = x1
    return gcd, x, y

def mod_inverse(e, phi_n):
    """
    Tìm phần tử nghịch đảo d của e theo modulo phi_n
    """
    gcd, x, _ = extended_gcd(e, phi_n)
    if gcd != 1:
        raise ValueError("e và phi(n) không nguyên tố cùng nhau!")
    return (x % phi_n + phi_n) % phi_n

2. Thuật toán kiểm tra số nguyên tố Miller-Rabin

Dựa trên phân tích $n - 1 = 2^k \cdot q$ ($q$ lẻ):

import random

def miller_rabin(n, k=20):
    if n < 2:
        return False
    if n in (2, 3):
        return True
    if n % 2 == 0:
        return False

    # Phân tích n - 1 = 2^s * d với d lẻ
    s = 0
    d = n - 1
    while d % 2 == 0:
        d //= 2
        s += 1

    for _ in range(k):
        a = random.randint(2, n - 2)
        x = pow(a, d, n)  # a^d mod n
        if x == 1 or x == n - 1:
            continue
        for _ in range(s - 1):
            x = pow(x, 2, n)
            if x == n - 1:
                break
        else:
            return False
    return True

3. Thuật toán lũy thừa mô-đun nhanh (Square-and-Multiply)

Tối ưu hóa phép tính $a^b \pmod n$ với độ phức tạp thời gian giảm từ $O(b)$ xuống $O(\log_2 b)$:

def power_mod(base, exp, mod):
    """
    Tính (base^exp) % mod bằng phương pháp bình phương và nhân liên tiếp
    """
    result = 1
    base = base % mod
    while exp > 0:
        if exp % 2 == 1:
            result = (result * base) % mod
        exp = exp // 2
        base = (base * base) % mod
    return result

4. Quy trình sinh khóa, mã hóa và giải mã RSA

def generate_keypair(p, q):
    if not (miller_rabin(p) and miller_rabin(q)):
        raise ValueError("Cả hai số p và q phải là số nguyên tố.")
    elif p == q:
        raise ValueError("p và q không được trùng nhau.")
    
    n = p * q
    phi = (p - 1) * (q - 1)
    
    # Chọn e sao cho 1 < e < phi và gcd(e, phi) = 1
    e = 65537
    if extended_gcd(e, phi)[0] != 1:
        e = 3
        while extended_gcd(e, phi)[0] != 1:
            e += 2
            
    d = mod_inverse(e, phi)
    return ((e, n), (d, n))

def encrypt(pk, plaintext_int):
    e, n = pk
    return power_mod(plaintext_int, e, n)

def decrypt(sk, ciphertext_int):
    d, n = sk
    return power_mod(ciphertext_int, d, n)

Kết quả kiểm nghiệm và hiệu năng

Thực nghiệm mã hóa và giải mã với cặp số nguyên tố mẫu $p = 17, q = 11$:

  • Tích $n = p \times q = 187$
  • Phi Euler $\phi(n) = (17 - 1)(11 - 1) = 160$
  • Chọn số mũ mã hóa $e = 7$ (thỏa mãn $\gcd(7, 160) = 1$)
  • Tính khóa giải mã $d$: $7 \times d \equiv 1 \pmod{160} \implies d = 23$ ($23 \times 7 = 161 = 1 \times 160 + 1$)
  • Khóa công khai: $PU = {7, 187}$
  • Khóa cá nhân: $PR = {23, 187}$

Kiểm thử với bản rõ số $M = 88$:

  1. Mã hóa: $C = 88^7 \pmod{187} = 11$
  2. Giải mã: $M = 11^{23} \pmod{187} = 88$
    Kết quả giải mã trùng khớp tuyệt đối 100% với bản rõ ban đầu.

Bảng thông số hiệu năng thực tế theo độ dài khóa

Chiều dài khóa (Bit) Thời gian sinh khóa (ms) Thời gian mã hóa (ms) Thời gian giải mã thường (ms) Tăng tốc qua CRT (ms)
512-bit 45 ms 1.2 ms 12.8 ms 3.4 ms (3.76x)
1024-bit 380 ms 4.5 ms 86.4 ms 22.1 ms (3.91x)
2048-bit 2150 ms 15.8 ms 540.2 ms 138.5 ms (3.90x)

Đổi mới và đóng góp

  1. Ứng dụng toán học cấu trúc vào phần mềm: Chuyển hóa các định lý trừu tượng (Định lý phần dư Trung Hoa, hàm số Euler, và vành thương $\mathbb{Z}_m$) thành các thuật toán xử lý dữ liệu khả thi trên máy tính cá nhân.
  2. Gia tốc tính toán mô-đun: Triển khai phương pháp bình phương và nhân liên tiếp, giúp giảm số lượng phép nhân số học khi tính $M^e \pmod n$ từ hàng triệu phép tính xuống còn tối đa $2 \cdot \log_2(e)$ bước lặp, tiết kiệm hơn 95% tài nguyên CPU.
  3. Mô hình hóa an toàn thông tin hai lớp: Đề xuất và minh chứng cấu trúc kết hợp khóa công khai để vừa ký số vừa mã hóa dữ liệu: $$Z = E\big(PU_b, E(PR_a, X)\big) \implies X = D\big(PU_a, D(PR_b, Z)\big)$$ Cấu trúc này đảm bảo đồng thời tính bí mật tuyệt đối và xác thực người gửi.
  4. Tài liệu tham khảo học thuật: Cung cấp nguồn tài liệu chi tiết, minh bạch về lý thuyết và thực nghiệm cho sinh viên chuyên ngành Điện tử Viễn thông và Công nghệ thông tin trong việc nghiên cứu mật mã ứng dụng.

Ứng dụng thực tế và triển khai

Kịch bản ứng dụng thực tế

  • Bảo mật kênh truyền thông viễn thông: Thiết lập phiên truyền thông an toàn trong các hệ thống nhúng, thiết bị IoT và viễn thông vô tuyến thông qua việc trao đổi khóa phiên đối xứng (AES) bằng khóa công khai RSA.
  • Hệ thống chữ ký điện tử: Ký và xác thực tính toàn vẹn của các văn bản hành chính, hóa đơn điện tử và hợp đồng thông minh.
  • Xác thực chứng chỉ SSL/TLS: Đóng vai trò là nền tảng khởi tạo kết nối an toàn HTTPS giữa trình duyệt người dùng và máy chủ Web.
+-------------------------------------------------------------+
|               Giao thức trao đổi khóa lai (Hybrid)          |
|                                                             |
|   Client                                            Server  |
|     |                                                  |    |
|     | ------ 1. Yêu cầu kết nối (Client Hello) ------> |    |
|     | <----- 2. Gửi Chứng chỉ & Khóa công khai RSA --- |    |
|     |                                                  |    |
|     | [Tạo Khóa đối xứng AES ngẫu nhiên]              |    |
|     | [Mã hóa Khóa AES bằng RSA Public Key]            |    |
|     |                                                  |    |
|     | ------ 3. Truyền Khóa AES đã mã hóa -----------> |    |
|     |                                       [Giải mã]  |    |
|     |                                 [Lấy Khóa AES]   |    |
|     |                                                  |    |
|     | <===== 4. Kênh truyền mã hóa bằng AES-256 =====> |    |
+-------------------------------------------------------------+

Lộ trình triển khai hệ thống (Roadmap)

  • Giai đoạn 1 (1-2 tháng): Tích hợp chuẩn đệm PKCS#1 v2.2 (OAEP) nhằm loại bỏ hoàn toàn các dạng tấn công bản rõ đã chọn (Chosen Ciphertext Attack).
  • Giai đoạn 2 (2-3 tháng): Xây dựng giao diện đồ họa người dùng (GUI) bằng Python Tkinter/PyQt5 cho phép mã hóa trực tiếp file nhị phân (PDF, Word, hình ảnh).
  • Giai đoạn 3 (3-6 tháng): Phát triển API Web Service và module phần cứng chuyên dụng (HSM/FPGA) để gia tốc phép toán nhân ma trận và xử lý mô-đun lớn.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại

  • Kích thước khối bản rõ $M$ bị giới hạn nghiêm ngặt bởi giá trị của modulo $n$ ($M < n$). Với các khối văn bản dài, chương trình phải chia nhỏ dữ liệu thành nhiều khối, dẫn đến độ trễ tăng tuyến tính.
  • Tốc độ tính toán của giải thuật RSA thuần túy trên CPU chậm hơn khoảng 100 đến 1000 lần so với các thuật toán mã hóa đối xứng như AES. Do đó, RSA không tối ưu khi truyền trực tiếp dữ liệu dung lượng lớn (video, tệp tin dung lượng gigabyte).
  • Chưa tích hợp module đệm ngẫu nhiên chống tấn công phân tích toán học dựa trên tính đồng cấu (Homomorphic property of textbook RSA).

Hướng phát triển trong tương lai

  • Hệ mật lai (Hybrid Cryptosystem): Kết hợp tốc độ của AES-256-GCM để mã hóa khối dữ liệu lớn và độ an toàn của RSA-2048/4096 để đóng gói và trao đổi khóa AES.
  • Nghiên cứu Mật mã đường cong Elliptic (ECC): Chuyển dịch dần sang ECDSA và ECIES để đạt độ an toàn tương đương RSA 2048-bit chỉ với chiều dài khóa 256-bit, giảm tải đáng kể bộ nhớ và băng thông.
  • Mật mã hậu lượng tử (Post-Quantum Cryptography): Khảo sát các thuật toán mã hóa dựa trên lưới (Lattice-based cryptography) nhằm sẵn sàng thay thế RSA trước sự đe dọa của thuật toán lượng tử Shor.

Đối tượng hưởng lợi

                          CÁC NHÓM HƯỞNG LỢI
                                  |
     +-----------------+----------+----------+-----------------+
     |                 |                     |                 |
     v                 v                     v                 v
[Sinh viên]      [Lập trình viên]     [Kỹ sư Viễn thông]  [Doanh nghiệp]
Hiểu sâu cơ sở   Nắm vững cấu trúc    Tích hợp bảo mật     Tiết kiệm chi
toán & code mẫu   sinh khóa & tối ưu   vào phần cứng nhúng  phí đào tạo R&D
  • Sinh viên ngành Kỹ thuật & Viễn thông: Sở hữu tài liệu học tập chuẩn xác, kết nối trực tiếp lý thuyết Đại số trừu tượng với các dòng mã nguồn thực thi.
  • Lập trình viên và Kỹ sư bảo mật: Nắm vững cấu trúc triển khai giải thuật mã hóa khóa công khai, kỹ thuật quản lý bộ nhớ và tối ưu thuật toán nhân số nguyên lớn.
  • Kỹ sư Viễn thông: Ứng dụng mô hình mã hóa để bảo vệ các giao thức truyền tải tín hiệu số, viễn thông di động và hệ thống SCADA.
  • Doanh nghiệp vừa và nhỏ: Tiếp cận giải pháp bảo mật dữ liệu nội bộ với chi phí bản quyền 0 đồng, tạo nền tảng tự phát triển phần mềm bảo mật độc lập.

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

1. Yêu cầu cấu hình hệ thống để triển khai chương trình là gì?

Chương trình viết bằng Python 3, yêu cầu cấu hình tối thiểu rất nhẹ: CPU 1.0 GHz (hỗ trợ x86 hoặc ARM), RAM 512 MB, ổ cứng trống 50 MB, chạy trên mọi hệ điều hành (Windows 7/10/11, Ubuntu Linux, macOS).

2. Giới hạn an toàn của độ dài khóa RSA hiện nay là bao nhiêu?

Các khóa có độ dài 512-bit hoặc 768-bit đã bị phá vỡ bằng phương pháp phân tích thừa số nguyên tố trên cụm máy tính tính toán phân tán. Hiện nay, tiêu chuẩn an toàn khuyến nghị tối thiểu của NIST là 2048-bit (an toàn đến năm 2030) và 4096-bit cho các hệ thống lưu trữ dữ liệu tuyệt mật dài hạn.

3. Tại sao giải mã RSA lại chậm hơn mã hóa?

Mã hóa thường chọn số mũ công khai nhỏ ($e = 65537 = 2^{16} + 1$, chỉ có 2 bit '1'), do đó chỉ mất 17 phép nhân mô-đun. Ngược lại, khóa bí mật $d$ là một số ngẫu nhiên rất lớn có cùng độ dài bit với $n$ (khoảng 2048-bit), khiến quá trình giải mã đòi hỏi trung bình khoảng 3000 phép nhân mô-đun. Việc áp dụng CRT sẽ giúp giảm thời gian giải mã xuống 4 lần.

4. Làm cách nào để tích hợp chương trình RSA này vào hệ thống web hoặc ứng dụng có sẵn?

Chương trình có thể được đóng gói thành một thư viện Python hoặc RESTful API (sử dụng Flask/FastAPI), cung cấp các endpoint như /api/v1/encrypt/api/v1/decrypt để giao tiếp với các ứng dụng Web/Mobile qua định dạng JSON.

5. Chi phí triển khai và hiệu quả đầu tư (ROI) của đề tài?

Dự án được xây dựng hoàn toàn trên nền tảng mã nguồn mở, không phát sinh chi phí mua bản quyền thương mại. Việc tự chủ công nghệ mã hóa giúp doanh nghiệp tiết kiệm hàng ngàn USD chi phí mua phần mềm bảo mật từ bên thứ ba và chủ động kiểm soát an ninh hệ thống.


Kết luận

Đồ án tốt nghiệp "Xây dựng chương trình mã hóa và giải mã RSA" của tác giả Lê Thế Trị đã giải quyết trọn vẹn cả hai phương diện: nghiên cứu lý thuyết chuyên sâu và ứng dụng thực tiễn trong lĩnh vực bảo mật thông tin viễn thông. Bằng việc làm sáng tỏ bản chất các định lý toán học nền tảng kết hợp tối ưu giải thuật tính toán trên ngôn ngữ Python, đề tài đã chứng minh tính khả thi vượt trội của mật mã khóa công khai trong việc bảo vệ dữ liệu, chống nghe lén và xác thực thông tin.

Đây là tiền đề vững chắc cho việc tiếp tục phát triển các hệ thống truyền thông bảo mật cấp cao, hệ mật lai và giải pháp ký số chuyên dụng cho các tổ chức, doanh nghiệp trong thời đại số hóa toàn diện.