RSA: khái niệm, thuật toán và ứng dụng mã hóa

Tác giả: IT Sectr Đã đăng: 2026-04-02 Thời gian đọc: 9 phút

RSA là hệ thống mật mã khóa công khai cung cấp mã hóa và chữ ký số dựa trên độ phức tạp tính toán của việc phân tích các số lớn thành thừa số. Theo NIST Special Publication 800-56B Rev. 2 (2023), RSA với độ dài khóa 2048 bit vẫn là tiêu chuẩn bảo mật cho các hệ thống chính phủ và thương mại. Thuật toán được sử dụng rộng rãi trong các giao thức TLS, chữ ký số và mã hóa dữ liệu trong các ứng dụng di động.

Các điểm chính

  • RSA là thuật toán mã hóa bất đối xứng sử dụng một cặp khóa: công khai và riêng tư.
  • Bảo mật của thuật toán dựa trên độ khó toán học của việc phân tích một số lớn thành các thừa số nguyên tố.
  • Kích thước khóa 2048 bit được coi là tiêu chuẩn tối thiểu đáng tin cậy từ năm 2023 theo NIST.
  • RSA được sử dụng trong chứng chỉ TLS, chữ ký số và giao thức xác thực.
  • Phát triển di động sử dụng RSA thông qua các thư viện mật mã tích hợp sẵn: Android Keystore và iOS Security Framework.

RSA là gì?

RSA là thuật toán mật mã khóa công khai được phát triển vào năm 1977 bởi Ron Rivest, Adi Shamir và Leonard Adleman. Tên được hình thành từ các chữ cái đầu tiên của họ của các tác giả. Thuật toán này trở thành hệ thống mật mã bất đối xứng đầu tiên có thể áp dụng thực tế, nơi khóa mã hóa và giải mã khác nhau.

Lịch sử tạo ra

Thuật toán RSA được công bố vào năm 1977 trên tạp chí Scientific American và dựa trên các công trình trước đó của Whitfield Diffie và Martin Hellman về mật mã khóa công khai. Viện Công nghệ Massachusetts đã nhận được bằng sáng chế cho RSA vào năm 1983, có hiệu lực đến năm 2000. Theo báo cáo của RSA Laboratories (2023), thuật toán vẫn là một trong những tiêu chuẩn mật mã phổ biến nhất trên thế giới — nó được sử dụng trong hàng tỷ thiết bị mỗi ngày.

Nguyên lý bất đối xứng

Không giống như mật mã đối xứng, nơi cùng một khóa được sử dụng cho cả mã hóa và giải mã, RSA hoạt động với một cặp khóa liên kết toán học. Khóa công khai có thể được công bố cho bất kỳ ai mà không có nguy cơ xâm phạm hệ thống. Khóa riêng tư chỉ có chủ sở hữu biết và không bao giờ được truyền qua mạng. Theo nghiên cứu IBM Security X-Force Threat Intelligence Index (2024), mã hóa bất đối xứng được sử dụng trong 96% các giao thức truyền dữ liệu an toàn hiện đại.

Cơ sở toán học

Bảo mật của RSA dựa trên bài toán phân tích thừa số — phân tích tích của hai số nguyên tố lớn thành các thừa số. Nếu bạn chọn các số nguyên tố p và q, mỗi số 1024 bit, thì tích n của chúng sẽ là 2048 bit. Tính p và q khi chỉ biết n bằng các phương pháp hiện đại là thực tế không thể thực hiện được: theo đánh giá của chuyên gia CNRS (2024), việc phá vỡ RSA-2048 sẽ cần hơn 300 tỷ năm tính toán trên máy tính cổ điển.

Thuật toán RSA hoạt động như thế nào

Hãy xem xét toàn bộ quy trình làm việc của RSA từ tạo khóa đến mã hóa và giải mã thông điệp. Hiểu các giai đoạn này là cần thiết để triển khai chính xác thuật toán trong các ứng dụng di động.

Tạo khóa

Quá trình bắt đầu bằng việc chọn hai số nguyên tố lớn pq. Mô-đun n = p x q được tính toán, xác định độ dài khóa. Sau đó, hàm Euler phi(n) = (p-1)(q-1) được tính. Một số mũ công khai e được chọn là nguyên tố cùng nhau với phi(n). Số mũ riêng d được tính là nghịch đảo nhân mô-đun của e modulo phi(n). Theo NIST SP 800-56B Rev. 2, độ dài tối thiểu của n phải là 2048 bit để đảm bảo bảo vệ đầy đủ.

java
import java.security.KeyPairGenerator;
import java.security.KeyPair;
import java.security.SecureRandom;

public class RSAKeyGenerator {
    public static KeyPair generateKeyPair() throws Exception {
        KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
        generator.initialize(2048, new SecureRandom());
        return generator.generateKeyPair();
    }
}

Mã hóa và giải mã

Để mã hóa thông điệp m, người gửi chuyển đổi nó thành một số nguyên nhỏ hơn n và tính bản mã c = m^e mod n. Người nhận sử dụng khóa riêng d để khôi phục thông điệp gốc: m = c^d mod n. Điều quan trọng cần lưu ý là RSA không nhằm mục đích mã hóa khối lượng dữ liệu lớn do hiệu suất thấp — kích thước thông điệp tối đa bằng độ dài khóa trừ đi các byte phụ (khoảng 190 byte cho RSA-2048 với OAEP).

java
import javax.crypto.Cipher;
import java.security.PublicKey;
import java.util.Base64;

public class RSAEncryptor {
    public static String encrypt(String data, PublicKey publicKey) throws Exception {
        Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        byte[] encrypted = cipher.doFinal(data.getBytes());
        return Base64.getEncoder().encodeToString(encrypted);
    }
}

Chữ ký số với RSA

RSA cũng được sử dụng để tạo chữ ký số — một cơ chế xác minh tính xác thực và toàn vẹn của dữ liệu. Chủ sở hữu ký băm thông điệp bằng khóa riêng của mình và bất kỳ ai cũng có thể xác minh chữ ký bằng khóa công khai. Theo báo cáo Sectigo Certificate Transparency (2025), hơn 85% chứng chỉ TLS trên internet sử dụng RSA cho chữ ký số, biến thuật toán thành nền tảng tin cậy cho truyền thông web.

kotlin
import java.security.Signature

fun signData(data: ByteArray, privateKey: java.security.PrivateKey): ByteArray {
    val signature = Signature.getInstance("SHA256withRSA")
    signature.initSign(privateKey)
    signature.update(data)
    return signature.sign()
}

fun verifySignature(
    data: ByteArray, signedData: ByteArray, publicKey: java.security.PublicKey
): Boolean {
    val signature = Signature.getInstance("SHA256withRSA")
    signature.initVerify(publicKey)
    signature.update(data)
    return signature.verify(signedData)
}

Kích thước khóa và mức bảo mật

Độ dài khóa ảnh hưởng trực tiếp đến sức mạnh mật mã của RSA. Khi sức mạnh tính toán tăng lên, kích thước khóa tối thiểu chấp nhận được thường xuyên được các tổ chức tiêu chuẩn hóa quốc tế xem xét lại. Hãy xem xét các khuyến nghị hiện tại từ NIST và các cơ quan quản lý khác.

Độ dài khóaTương đương đối xứngTrạng thái
1024 bit80 bitBị cấm từ năm 2023
2048 bit112 bitTiêu chuẩn tối thiểu
3072 bit128 bitKhuyến nghị cho hệ thống mới
4096 bit256 bitCho dữ liệu bảo mật

Ảnh hưởng đến hiệu suất

Việc tăng độ dài khóa RSA ảnh hưởng đáng kể đến thời gian thực hiện các thao tác. Tạo khóa 4096 bit mất khoảng 10 lần thời gian so với khóa 2048 bit. Các thao tác mã hóa và giải mã với khóa dài hơn đòi hỏi nhiều tài nguyên tính toán hơn, điều này rất quan trọng đối với thiết bị di động có mức tiêu thụ điện năng hạn chế.

Mối đe dọa lượng tử

Với sự phát triển của điện toán lượng tử, RSA có thể bị phá vỡ bằng thuật toán Shor trong thời gian đa thức. Thuật toán này, được Peter Shor đề xuất vào năm 1994, có thể phân tích các số lớn thành thừa số trong O((log n)^3) thao tác. Theo IBM Quantum Roadmap (2025), việc phá vỡ thực tế RSA-2048 dự kiến sẽ không xảy ra trước năm 2035, tuy nhiên NIST đã khuyến nghị chuyển đổi dần sang các thuật toán hậu lượng tử CRYSTALS-Kyber và CRYSTALS-Dilithium.

Ứng dụng RSA trong phát triển di động

RSA được sử dụng tích cực trong các ứng dụng di động để đảm bảo truyền dữ liệu an toàn, xác thực máy chủ và bảo vệ giao dịch kỹ thuật số. Việc tích hợp được thực hiện thông qua các API mật mã tiêu chuẩn của cả hai nền tảng chính.

Android Keystore

Nền tảng Android cung cấp Android Keystore — một kho lưu trữ khóa mật mã hệ thống được bảo vệ ở cấp độ phần cứng Trusted Execution Environment. Các khóa RSA được tạo trong KeyStore không thể bị trích xuất khỏi thiết bị ngay cả khi ứng dụng bị xâm phạm. Điều này cung cấp khả năng bảo vệ khỏi nhiều loại tấn công, bao gồm cả phần mềm độc hại có quyền truy cập root.

kotlin
import android.security.keystore.KeyGenParameterSpec
import android.security.keystore.KeyProperties
import java.security.KeyPairGenerator

fun generateKeyInAndroidKeystore() {
    val generator = KeyPairGenerator.getInstance(
        KeyProperties.KEY_ALGORITHM_RSA,
        "AndroidKeyStore"
    )
    val spec = KeyGenParameterSpec.Builder(
        "rsa_key_pair",
        KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT
    )
        .setKeySize(2048)
        .setBlockModes(KeyProperties.BLOCK_MODE_ECB)
        .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_OAEP)
        .build()
    generator.initialize(spec)
    val keyPair = generator.generateKeyPair()
}

iOS Security Framework

Trên iOS, RSA được xử lý thông qua Security Framework với quyền truy cập Secure Enclave trên các thiết bị có chip A7 trở lên. Secure Enclave là một bộ đồng xử lý chuyên dụng được cách ly khỏi bộ xử lý chính, thực hiện các thao tác mật mã và lưu trữ khóa trong một kho phần cứng. Khóa RSA có thể được tạo cả bên trong Secure Enclave và trong Keychain phần mềm với các mức truy cập khác nhau.

Mã hóa kết hợp trong thực tế

Trong các ứng dụng di động thực tế, RSA hiếm khi được sử dụng để mã hóa trực tiếp dữ liệu lớn. Thực hành tiêu chuẩn là một sơ đồ kết hợp: ứng dụng tạo một khóa phiên AES, mã hóa nó bằng khóa công khai RSA của máy chủ và gửi đến máy chủ. Tất cả lưu lượng truy cập tiếp theo được mã hóa bằng AES, nhanh hơn 100-1000 lần so với truyền dữ liệu trực tiếp qua RSA.

Ưu điểm và hạn chế của RSA

Giống như bất kỳ thuật toán mật mã nào, RSA có điểm mạnh và điểm yếu cần được xem xét khi thiết kế các hệ thống bảo mật. Đánh giá khách quan giúp chọn công cụ phù hợp cho một nhiệm vụ cụ thể.

Ưu điểm chính

Ưu điểm chính của RSA là giải quyết vấn đề phân phối khóa cơ bản — khóa công khai có thể được công bố tự do mà không có nguy cơ xâm phạm toàn bộ hệ thống. Tính linh hoạt của thuật toán được thể hiện qua việc hỗ trợ cả mã hóa và chữ ký số với một cặp khóa duy nhất. Ngoài ra, RSA có hệ sinh thái hỗ trợ rộng lớn: các thư viện có sẵn cho tất cả ngôn ngữ và nền tảng.

Hạn chế chính

Nhược điểm chính của RSA là hiệu suất thấp so với các thuật toán đối xứng. Giải mã RSA-2048 trên bộ xử lý di động hiện đại mất khoảng 5-15 mili giây, trong khi AES-256 xử lý hàng gigabyte dữ liệu trong cùng thời gian đó. Ngoài ra, RSA dễ bị tấn công lượng tử thông qua thuật toán Shor, điều này hạn chế việc sử dụng nó trong các hệ thống yêu cầu bảo vệ dữ liệu dài hạn.

Khuyến nghị sử dụng

Đối với các dự án di động, các chuyên gia NIST khuyến nghị: chỉ sử dụng RSA cho mã hóa khóa và chữ ký số, chọn độ dài khóa ít nhất 3072 bit cho các dự án mới, kết hợp RSA với AES trong sơ đồ kết hợp và theo dõi sự phát triển của các tiêu chuẩn hậu lượng tử để di chuyển có kế hoạch trong dài hạn.

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

Sự khác biệt giữa RSA và AES là gì?

RSA là thuật toán bất đối xứng với một cặp khóa được sử dụng để mã hóa khối lượng dữ liệu nhỏ và chữ ký số. AES là thuật toán đối xứng với một khóa dùng chung duy nhất, hoạt động nhanh hơn RSA 100-1000 lần. Trong các hệ thống hiện đại, chúng được kết hợp: RSA bảo vệ việc truyền khóa phiên AES, trong khi AES mã hóa lưu lượng chính.

Kích thước khóa RSA nào được coi là an toàn hiện nay?

Kích thước an toàn tối thiểu từ năm 2023 là RSA-2048 theo NIST SP 800-131A Rev. 2. Khóa 1024 bit chính thức bị cấm đối với các hệ thống chính phủ Hoa Kỳ. Đối với các dự án mới, 3072 bit được khuyến nghị, cung cấp biên an toàn và sức mạnh tương đương với mã hóa đối xứng 128 bit.

Có thể sử dụng RSA trong các ứng dụng di động không?

Có, RSA được sử dụng rộng rãi trong các ứng dụng di động. Android cung cấp Android KeyStore để tạo phần cứng và lưu trữ an toàn các khóa RSA. iOS cung cấp Security Framework với hỗ trợ Secure Enclave. Đối với mã hóa dữ liệu lớn, sơ đồ kết hợp RSA + AES được khuyến nghị, trong đó RSA chỉ mã hóa khóa phiên.

Có thể phá vỡ RSA-2048 không?

Trên máy tính cổ điển, việc phá vỡ RSA-2048 là thực tế không thể — theo ước tính hiện tại, sẽ cần hơn 300 tỷ năm tính toán liên tục. Tuy nhiên, một máy tính lượng tử với đủ qubit có thể phá vỡ RSA-2048 trong vài phút bằng thuật toán Shor. Theo ước tính của IBM, máy tính như vậy sẽ không xuất hiện trước năm 2035.

Những lựa chọn thay thế RSA nào tồn tại?

Trong số các thuật toán bất đối xứng, ECC (Mật mã đường cong Elliptic) rất phổ biến, cung cấp bảo mật tương đương với độ dài khóa ngắn hơn — ECC 256 bit tương đương với RSA-3072. Cho kỷ nguyên hậu lượng tử, NIST đã chọn CRYSTALS-Kyber cho mã hóa và CRYSTALS-Dilithium cho chữ ký số vào năm 2024.

Tổng kết

  • RSA là thuật toán mã hóa bất đối xứng dựa trên độ khó của việc phân tích các số lớn thành thừa số.
  • Cặp khóa — công khai để mã hóa và riêng tư để giải mã, giải quyết vấn đề phân phối khóa.
  • Kích thước 2048 bit là tiêu chuẩn bảo mật tối thiểu từ năm 2023.
  • Hiệu suất của RSA thấp hơn 2-3 bậc so với mật mã đối xứng, do đó nó được sử dụng trong các sơ đồ kết hợp.
  • Chữ ký số sử dụng RSA được dùng trong 85% chứng chỉ TLS trên internet.
  • Nền tảng di động Android và iOS cung cấp API tích hợp sẵn để làm việc với RSA.
  • Di chuyển hậu lượng tử — cho đến năm 2035, RSA sẽ vẫn là tiêu chuẩn chính, sau đó quá trình chuyển đổi sang các thuật toán mới sẽ bắt đầu.

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm