RSA: τι είναι, αλγόριθμος και εφαρμογή κρυπτογράφησης

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-04-02 Χρόνος ανάγνωσης: 9 λεπ

RSA — ένα κρυπτοσύστημα δημόσιου κλειδιού που παρέχει κρυπτογράφηση και ψηφιακή υπογραφή βασισμένο στην υπολογιστική πολυπλοκότητα της παραγοντοποίησης μεγάλων αριθμών. Σύμφωνα με το NIST Special Publication 800-56B Rev. 2 (2023), το RSA με μήκος κλειδιού 2048 bit παραμένει το πρότυπο ασφαλείας για κυβερνητικά και εμπορικά συστήματα. Ο αλγόριθμος χρησιμοποιείται ευρέως σε πρωτόκολλα TLS, ψηφιακές υπογραφές και κρυπτογράφηση δεδομένων σε εφαρμογές για κινητά.

Κύρια σημεία

  • RSA — αλγόριθμος ασύμμετρης κρυπτογράφησης που χρησιμοποιεί ζεύγος κλειδιών: δημόσιο και ιδιωτικό.
  • Ασφάλεια του αλγορίθμου βασίζεται στη μαθηματική δυσκολία παραγοντοποίησης ενός μεγάλου αριθμού σε πρώτους παράγοντες.
  • Μέγεθος κλειδιού 2048 bit θεωρείται ελάχιστα αξιόπιστο από το 2023 σύμφωνα με το πρότυπο NIST.
  • RSA χρησιμοποιείται σε πιστοποιητικά TLS, ψηφιακές υπογραφές και πρωτόκολλα αυθεντικοποίησης.
  • Ανάπτυξη εφαρμογών για κινητά χρησιμοποιεί το RSA μέσω ενσωματωμένων κρυπτογραφικών βιβλιοθηκών Android Keystore και iOS Security Framework.

Τι είναι το RSA;

RSA — ένας κρυπτογραφικός αλγόριθμος δημόσιου κλειδιού που αναπτύχθηκε το 1977 από τους Ronald Rivest, Adi Shamir και Leonard Adleman. Το όνομα σχηματίστηκε από τα πρώτα γράμματα των επωνύμων των συγγραφέων. Ο αλγόριθμος ήταν το πρώτο πρακτικά εφαρμόσιμο ασύμμετρο κρυπτοσύστημα όπου τα κλειδιά κρυπτογράφησης και αποκρυπτογράφησης διαφέρουν.

Ιστορία δημιουργίας

Ο αλγόριθμος RSA δημοσιεύθηκε το 1977 στο περιοδικό Scientific American και βασίστηκε σε προηγούμενες εργασίες των Whitfield Diffie και Martin Hellman στον τομέα της κρυπτογραφίας δημόσιου κλειδιού. Το Ινστιτούτο Τεχνολογίας της Μασαχουσέτης έλαβε δίπλωμα ευρεσιτεχνίας για το RSA το 1983, το οποίο ίσχυε έως το 2000. Σύμφωνα με αναφορά της RSA Laboratories (2023), ο αλγόριθμος παραμένει ένα από τα πιο διαδεδομένα κρυπτογραφικά πρότυπα στον κόσμο — χρησιμοποιείται σε δισεκατομμύρια συσκευές καθημερινά.

Αρχή της ασυμμετρίας

Σε αντίθεση με τα συμμετρικά κρυπτογραφήματα όπου το ίδιο κλειδί χρησιμοποιείται τόσο για κρυπτογράφηση όσο και για αποκρυπτογράφηση, το RSA λειτουργεί με ένα μαθηματικά συσχετισμένο ζεύγος κλειδιών. Το δημόσιο κλειδί μπορεί να δημοσιευθεί για όλους χωρίς κίνδυνο διακύβευσης του συστήματος. Το ιδιωτικό κλειδί είναι γνωστό μόνο στον ιδιοκτήτη και ποτέ δεν μεταδίδεται μέσω δικτύου. Σύμφωνα με τη μελέτη IBM Security X-Force Threat Intelligence Index (2024), η ασύμμετρη κρυπτογράφηση χρησιμοποιείται στο 96% των σύγχρονων πρωτοκόλλων ασφαλούς μετάδοσης δεδομένων.

Μαθηματικές βάσεις

Η ασφάλεια του RSA βασίζεται στο πρόβλημα της παραγοντοποίησης — ανάλυσης του γινομένου δύο μεγάλων πρώτων αριθμών σε παράγοντες. Εάν επιλεγούν πρώτοι αριθμοί p και q με μήκος 1024 bit έκαστος, τότε το γινόμενό τους n θα είναι 2048 bit. Ο υπολογισμός των p και q γνωρίζοντας μόνο το n με σύγχρονες μεθόδους είναι πρακτικά αδύνατος: σύμφωνα με την αξιολόγηση εμπειρογνωμόνων του CNRS (2024), η διάρρηξη του RSA-2048 θα απαιτούσε πάνω από 300 δισεκατομμύρια χρόνια υπολογισμού σε έναν κλασικό υπολογιστή.

Πώς λειτουργεί ο αλγόριθμος RSA

Ας εξετάσουμε τον πλήρη κύκλο λειτουργίας του RSA από τη δημιουργία κλειδιών έως την κρυπτογράφηση και αποκρυπτογράφηση μηνύματος. Η κατανόηση αυτών των σταδίων είναι απαραίτητη για τη σωστή υλοποίηση του αλγορίθμου σε εφαρμογές για κινητά.

Δημιουργία κλειδιών

Η διαδικασία ξεκινά με την επιλογή δύο μεγάλων πρώτων αριθμών p και q. Υπολογίζεται το μέτρο n = p x q, το οποίο καθορίζει το μήκος του κλειδιού. Στη συνέχεια υπολογίζεται η συνάρτηση Euler phi(n) = (p-1)(q-1). Επιλέγεται ένας δημόσιος εκθέτης e, σχετικά πρώτος με το phi(n). Ο ιδιωτικός εκθέτης d υπολογίζεται ως ο πολλαπλασιαστικός αντίστροφος του e modulo phi(n). Σύμφωνα με το NIST SP 800-56B Rev. 2, το ελάχιστο μήκος του n πρέπει να είναι 2048 bit για επαρκή προστασία.

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, ο αποστολέας το μετατρέπει σε ακέραιο αριθμό μικρότερο του n και υπολογίζει το κρυπτοκείμενο c = m^e mod n. Ο παραλήπτης χρησιμοποιεί το ιδιωτικό κλειδί d για να ανακτήσει το αρχικό μήνυμα: m = c^d mod n. Είναι σημαντικό να σημειωθεί ότι το RSA δεν προορίζεται για κρυπτογράφηση μεγάλων όγκων δεδομένων λόγω χαμηλής απόδοσης — το μέγιστο μέγεθος μηνύματος είναι ίσο με το μήκος κλειδιού μείον τα βοηθητικά byte (περίπου 190 byte για RSA-2048 με 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);
    }
}

Ψηφιακή υπογραφή με RSA

Το RSA χρησιμοποιείται επίσης για τη δημιουργία ψηφιακών υπογραφών — ενός μηχανισμού επαλήθευσης της αυθεντικότητας και ακεραιότητας δεδομένων. Ο ιδιοκτήτης υπογράφει την κατατεμάχιση του μηνύματος με το ιδιωτικό του κλειδί, και οποιοσδήποτε μπορεί να επαληθεύσει την υπογραφή με το δημόσιο κλειδί. Σύμφωνα με αναφορά του Sectigo Certificate Transparency (2025), πάνω από το 85% των πιστοποιητικών TLS στο διαδίκτυο χρησιμοποιούν RSA για ψηφιακή υπογραφή, καθιστώντας τον αλγόριθμο τη βάση εμπιστοσύνης της επικοινωνίας στο διαδίκτυο.

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

Μεγέθη κλειδιών και επίπεδο ασφαλείας

Το μήκος κλειδιού επηρεάζει άμεσα την κρυπτογραφική αντοχή του RSA. Με την αύξηση της υπολογιστικής ισχύος, το ελάχιστο επιτρεπόμενο μέγεθος κλειδιού αναθεωρείται τακτικά από διεθνείς οργανισμούς τυποποίησης. Ας εξετάσουμε τις τρέχουσες συστάσεις του NIST και άλλων ρυθμιστικών αρχών.

Μήκος κλειδιούΣυμμετρικό ισοδύναμοΚατάσταση
1024 bit80 bitΑπαγορευμένο από το 2023
2048 bit112 bitΕλάχιστο πρότυπο
3072 bit128 bitΣυνιστάται για νέα συστήματα
4096 bit256 bitΓια εμπιστευτικά δεδομένα

Επίδραση στην απόδοση

Η αύξηση του μήκους κλειδιού του RSA επηρεάζει σημαντικά τον χρόνο εκτέλεσης λειτουργιών. Η δημιουργία κλειδιού μήκους 4096 bit διαρκεί περίπου 10 φορές περισσότερο από 2048 bit. Οι λειτουργίες κρυπτογράφησης και αποκρυπτογράφησης με μακρύ κλειδί απαιτούν περισσότερους υπολογιστικούς πόρους, κάτι που είναι κρίσιμο για κινητές συσκευές με περιορισμένη κατανάλωση ενέργειας.

Κβαντική απειλή

Με την ανάπτυξη των κβαντικών υπολογιστών, το RSA μπορεί να διαρρηχθεί χρησιμοποιώντας τον αλγόριθμο του Shor σε πολυωνυμικό χρόνο. Αυτός ο αλγόριθμος, που προτάθηκε από τον Peter Shor το 1994, επιτρέπει την παραγοντοποίηση μεγάλων αριθμών σε χρόνο O((log n)^3) λειτουργιών. Σύμφωνα με το IBM Quantum Roadmap (2025), η πρακτική διάρρηξη του RSA-2048 αναμένεται όχι νωρίτερα από το 2035, ωστόσο το NIST ήδη συνιστά σταδιακή μετάβαση σε μετακβαντικούς αλγόριθμους CRYSTALS-Kyber και CRYSTALS-Dilithium.

Εφαρμογή του RSA στην ανάπτυξη εφαρμογών για κινητά

Το RSA χρησιμοποιείται ενεργά σε εφαρμογές για κινητά για την εξασφάλιση ασφαλούς μετάδοσης δεδομένων, επαλήθευσης αυθεντικότητας διακομιστών και προστασίας ψηφιακών συναλλαγών. Η ενσωμάτωση πραγματοποιείται μέσω των τυπικών κρυπτογραφικών API και των δύο κύριων πλατφορμών.

Android Keystore

Η πλατφόρμα Android παρέχει Android Keystore — μια αποθήκη συστήματος κρυπτογραφικών κλειδιών προστατευμένη σε επίπεδο υλικού από το Trusted Execution Environment. Τα κλειδιά RSA που δημιουργούνται στο KeyStore δεν μπορούν να εξαχθούν από τη συσκευή ακόμη και σε περίπτωση διακύβευσης της εφαρμογής. Αυτό παρέχει προστασία έναντι μιας ευρείας κατηγορίας επιθέσεων, συμπεριλαμβανομένων κακόβουλων προγραμμάτων με πρόσβαση 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

Στο iOS, για εργασία με RSA χρησιμοποιείται το Security Framework με πρόσβαση στο Secure Enclave σε συσκευές με τσιπ A7 και νεότερες. Το Secure Enclave είναι ένας αποκλειστικός συνεπεξεργαστής απομονωμένος από τον κύριο επεξεργαστή, ο οποίος εκτελεί κρυπτογραφικές λειτουργίες και αποθηκεύει κλειδιά σε enclave υλικού. Τα κλειδιά RSA μπορούν να δημιουργηθούν τόσο εντός του Secure Enclave όσο και σε λογισμικό Keychain με διαφορετικά επίπεδα πρόσβασης.

Υβριδική κρυπτογράφηση στην πράξη

Σε πραγματικές εφαρμογές για κινητά, το RSA σπάνια χρησιμοποιείται για άμεση κρυπτογράφηση μεγάλων δεδομένων. Η τυπική πρακτική είναι ένα υβριδικό σχήμα: η εφαρμογή δημιουργεί ένα κλειδί συνόδου AES, το κρυπτογραφεί με το δημόσιο κλειδί RSA του διακομιστή και το στέλνει στον διακομιστή. Όλη η επόμενη κίνηση κρυπτογραφείται με AES, το οποίο είναι 100–1000 φορές ταχύτερο από την άμεση μετάδοση δεδομένων μέσω RSA.

Πλεονεκτήματα και περιορισμοί του RSA

Όπως κάθε κρυπτογραφικός αλγόριθμος, το RSA έχει δυνατά και αδύνατα σημεία που πρέπει να ληφθούν υπόψη κατά τον σχεδιασμό ασφαλών συστημάτων. Η αντικειμενική αξιολόγηση βοηθά στην επιλογή του κατάλληλου εργαλείου για μια συγκεκριμένη εργασία.

Βασικά πλεονεκτήματα

Το κύριο πλεονέκτημα του RSA είναι η λύση του θεμελιώδους προβλήματος διανομής κλειδιών — το δημόσιο κλειδί μπορεί να δημοσιευθεί ελεύθερα χωρίς κίνδυνο διακύβευσης ολόκληρου του συστήματος. Η καθολικότητα του αλγορίθμου εκδηλώνεται στην υποστήριξη τόσο της κρυπτογράφησης όσο και της ψηφιακής υπογραφής με το ίδιο ζεύγος κλειδιών. Επιπλέον, το RSA έχει ένα εκτεταμένο οικοσύστημα υποστήριξης: βιβλιοθήκες είναι διαθέσιμες για όλες τις γλώσσες και πλατφόρμες.

Κύριοι περιορισμοί

Το κύριο μειονέκτημα του RSA είναι η χαμηλή απόδοση σε σύγκριση με συμμετρικούς αλγόριθμους. Η αποκρυπτογράφηση RSA-2048 σε έναν σύγχρονο επεξεργαστή κινητού διαρκεί περίπου 5–15 χιλιοστά του δευτερολέπτου, ενώ το AES-256 επεξεργάζεται gigabyte δεδομένων στον ίδιο χρόνο. Επίσης, το RSA είναι ευάλωτο σε κβαντικές επιθέσεις μέσω του αλγορίθμου του Shor, γεγονός που περιορίζει την εφαρμογή του σε συστήματα με μακροπρόθεσμη προστασία δεδομένων.

Συστάσεις χρήσης

Για έργα κινητών, οι εμπειρογνώμονες του NIST συνιστούν: χρησιμοποιήστε το RSA μόνο για κρυπτογράφηση κλειδιών και ψηφιακές υπογραφές, επιλέξτε μήκος κλειδιού τουλάχιστον 3072 bit για νέα έργα, συνδυάστε το RSA με AES σε υβριδικό σχήμα και παρακολουθείτε την ανάπτυξη μετακβαντικών προτύπων για προγραμματισμένη μετάβαση μακροπρόθεσμα.

Συχνές ερωτήσεις

Ποια είναι η διαφορά μεταξύ RSA και AES;

RSA — ασύμμετρος αλγόριθμος με ζεύγος κλειδιών, που χρησιμοποιείται για κρυπτογράφηση μικρών όγκων δεδομένων και ψηφιακές υπογραφές. AES — συμμετρικός αλγόριθμος με ένα κοινό κλειδί, που λειτουργεί 100–1000 φορές ταχύτερα από το RSA. Στα σύγχρονα συστήματα συνδυάζονται: το RSA προστατεύει τη μετάδοση του κλειδιού συνόδου AES, και το AES κρυπτογραφεί την κύρια κίνηση.

Ποιο μέγεθος κλειδιού RSA θεωρείται ασφαλές σήμερα;

Το ελάχιστο ασφαλές μέγεθος από το 2023 σύμφωνα με το NIST SP 800-131A Rev. 2 είναι RSA-2048. Τα κλειδιά 1024 bit έχουν επισήμως απαγορευτεί για κυβερνητικά συστήματα των ΗΠΑ. Για νέα έργα συνιστάται 3072 bit, που παρέχει περιθώριο ασφαλείας και ισοδύναμη αντοχή με 128-bit συμμετρική κρυπτογράφηση.

Μπορεί να χρησιμοποιηθεί το RSA σε εφαρμογές για κινητά;

Ναι, το RSA χρησιμοποιείται ευρέως σε εφαρμογές για κινητά. Το Android παρέχει Android KeyStore για δημιουργία υλικού και ασφαλή αποθήκευση κλειδιών RSA. iOS — Security Framework με υποστήριξη Secure Enclave. Για κρυπτογράφηση μεγάλων δεδομένων συνιστάται το υβριδικό σχήμα RSA + AES, όπου το RSA κρυπτογραφεί μόνο το κλειδί συνόδου.

Μπορεί να διαρρηχθεί το RSA-2048;

Σε κλασικούς υπολογιστές, η διάρρηξη του RSA-2048 είναι πρακτικά αδύνατη — σύμφωνα με τρέχουσες εκτιμήσεις, θα απαιτούσε πάνω από 300 δισεκατομμύρια χρόνια συνεχούς υπολογισμού. Ωστόσο, ένας κβαντικός υπολογιστής με επαρκή αριθμό qubits θα μπορέσει να διαρρήξει το RSA-2048 σε λίγα λεπτά χρησιμοποιώντας τον αλγόριθμο του Shor. Σύμφωνα με εκτιμήσεις της IBM, ένας τέτοιος υπολογιστής δεν θα εμφανιστεί νωρίτερα από το 2035.

Ποιες εναλλακτικές του RSA υπάρχουν;

Μεταξύ των ασύμμετρων αλγορίθμων δημοφιλές είναι το ECC (Elliptic Curve Cryptography), που παρέχει ισοδύναμη ασφάλεια με μικρότερο μήκος κλειδιού — το 256-bit ECC είναι ισοδύναμο με RSA-3072. Για τη μετακβαντική εποχή, το NIST επέλεξε το 2024 το CRYSTALS-Kyber για κρυπτογράφηση και το CRYSTALS-Dilithium για ψηφιακές υπογραφές.

Σύνοψη

  • RSA — αλγόριθμος ασύμμετρης κρυπτογράφησης βασισμένος στη δυσκολία παραγοντοποίησης μεγάλων αριθμών.
  • Ζεύγος κλειδιών — δημόσιο για κρυπτογράφηση και ιδιωτικό για αποκρυπτογράφηση, λύνει το πρόβλημα διανομής κλειδιών.
  • Μέγεθος 2048 bit είναι το ελάχιστο πρότυπο ασφαλείας από το 2023.
  • Απόδοση Το RSA είναι 2–3 τάξεις μεγέθους χαμηλότερη από τα συμμετρικά κρυπτογραφήματα, γι' αυτό χρησιμοποιείται σε υβριδικά σχήματα.
  • Ψηφιακές υπογραφές με RSA χρησιμοποιούνται στο 85% των πιστοποιητικών TLS στο διαδίκτυο.
  • Πλατφόρμες κινητών Android και iOS παρέχουν ενσωματωμένα API για εργασία με RSA.
  • Μετακβαντική μετάβαση — έως το 2035 το RSA θα παραμείνει το κύριο πρότυπο, στη συνέχεια θα ξεκινήσει η μετάβαση σε νέους αλγόριθμους.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης