pprime×qprime=n = pq2048 bitseasy forward, hard reversefactoring n breaks RSA

Κρυπτογράφηση RSA

11 ελάχιστη ανάγνωσηΚρυπτογράφηση

Ο RSA ήταν ο πρώτος πρακτικός αλγόριθμος δημόσιου κλειδιού — αυτός που επέτρεπε σε δύο άτομα να ανταλλάξουν ένα μυστικό χωρίς ποτέ να συναντηθούν προσωπικά. Σαράντα οκτώ χρόνια αργότερα εξακολουθεί να εξασφαλίζει ένα σημαντικό μέρος των χειραψιών TLS, να υπογράφει κάθε μήνυμα PGP και να υποστηρίζει πολλά σχήματα υπογραφής κώδικα. Σιγά σιγά αντικαθίσταται από ελλειπτικές καμπύλες, αλλά δεν έχει εξαφανιστεί.

Το πλήρες κείμενο του άρθρου παρέχεται στα Αγγλικά παρακάτω.

Το

RSA είναι ένα κρυπτοσύστημα δημόσιου κλειδιού που εισήχθη το 1977 από τους Ron Rivest, Adi Shamir και Leonard Adleman στο MIT. Το δίπλωμα ευρεσιτεχνίας έληξε το 2000, μετά το οποίο εξαπλώθηκε ουσιαστικά σε κάθε κρυπτογραφική βιβλιοθήκη. Το RSA επιτρέπει δύο συμπληρωματικές λειτουργίες: κρυπτογράφηση με δημόσιο κλειδί ώστε να μπορεί να αποκρυπτογραφεί μόνο το ιδιωτικό κλειδί και υπογραφή με ιδιωτικό κλειδί, ώστε οποιοσδήποτε έχει το δημόσιο κλειδί να μπορεί να επαληθεύσει. Δημιουργία κλειδιού:

  1. Επιλέξτε δύο μεγάλους τυχαίους πρώτους p και q (συνήθως 2048 bit το καθένα).
  2. Υπολογίστε n = p × qXPLZ. Αυτό είναι το συντελεστή, δημόσιο.
  3. Υπολογίστε το σύνολο του Euler: φ(n) = (p-1)(q-1).
  4. Επιλέξτε ένα μικρό περίεργο e σε φ(n coprime). Κοινώς 65537 (=2^16+1).
  5. Υπολογισμός d = e^(-1) mod φ(n). Αυτό είναι το ιδιωτικό κλειδί.

Το δημόσιο κλειδί είναι το ζεύγος (n, e); το ιδιωτικό κλειδί είναι d.

Για να κρυπτογραφήσετε ένα μήνυμα m: κρυπτογραφημένο κείμενο c = m^e mod n. Για αποκρυπτογράφηση: m = c^d mod n. Οποιοσδήποτε έχει το δημόσιο κλειδί μπορεί να κρυπτογραφήσει. μόνο κάποιος με το ιδιωτικό κλειδί μπορεί να αποκρυπτογραφήσει. Για να υπογράψετε, το αντίστροφο: s = m^d mod n, επαληθεύστε με m = s^e mod n.

Γιατί αυτό λειτουργεί

Το κόλπο: υπολογισμός dXPL που απαιτεί το dXPL n σε p × q. Η παραγοντοποίηση ενός semiprime 2048-bit απαιτεί περισσότερους υπολογισμούς από ό,τι η ανθρωπότητα. Η επαλήθευση του n = p × q όταν γνωρίζετε ήδη τα p και q είναι ασήμαντη. Η ασυμμετρία — εύκολος πολλαπλασιασμός, σκληρή παραγοντοποίηση — είναι ολόκληρο το θεμέλιο του RSA. Το NIST το έχει απαγορεύσει για νέες αναπτύξεις από το 2014.

  • RSA-2048 — τρέχουσα γραμμή βάσης. Θεωρείται ασφαλές μεσοπρόθεσμα έναντι κλασσικών αντιπάλων.
  • RSA-3072 — συνιστάται για νέες αναπτύξεις ανά χρονοδιάγραμμα μετάβασης 2030 του NIST.
  • RSA-Z έχει ένα κοινό κλειδί για υπογραφή —409X Ορίζοντα 10-20 ετών. Πιο αργό αλλά συντηρητικά ασφαλές. Το
  • RSA στην πράξη

    RSA σχεδόν ποτέ δεν κρυπτογραφεί απευθείας μεγάλα μηνύματα. Είναι αργό — η κρυπτογράφηση ενός kilobyte απαιτεί χιλιάδες αρθρωτές εκθέσεις. Αντίθετα, το RSA χρησιμοποιείται στην κρυπτογράφηση hybrid: δημιουργήστε ένα τυχαίο κλειδί AES, κρυπτογραφήστε τα δεδομένα με AES, κρυπτογραφήστε μόνο το κλειδί AES με RSA. Η πλευρά αποκρυπτογράφησης RSA αποκρυπτογραφεί το κλειδί και, στη συνέχεια, το AES αποκρυπτογραφεί τα δεδομένα. Κάθε χειραψία TLS RSA λειτουργεί με αυτόν τον τρόπο. κάθε email κρυπτογραφημένο με PGP λειτουργεί με αυτόν τον τρόπο.

    Προσθέματα συμπληρωμάτων

    Απλό («βιβλίο») RSA — η απευθείας κρυπτογράφηση m χωρίς padding — είναι καταστροφικά ανασφαλής. Πολλές επιθέσεις εκμεταλλεύονται την ευκαμψία, την απουσία τυχαίας συμπεριφοράς και τις ακραίες περιπτώσεις, όπως το μικρό m. Το Real RSA χρησιμοποιεί σχήματα padding:

    • PKCS#1 v1.5 padding — original padding; ευάλωτο στην επίθεση του Bleichenbacher, εάν οι υλοποιήσεις διαρρεύσουν αν το padding είναι έγκυρο. Εξακολουθεί να χρησιμοποιείται ευρέως. ανθεκτικό σε επιθέσεις επιλεγμένου κρυπτογραφημένου κειμένου. Χρησιμοποιήστε το για νέα κρυπτογράφηση RSA. ανώτερο από το PKCS#1 v1.5 για υπογραφή.

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

    RSA αντικαθίσταται για δύο λόγους:

      PLZ121XXPL. Τα κλειδιά RSA-3072 είναι μεγαλύτερα από τα ισοδύναμα πλήκτρα ελλειπτικής καμπύλης κατά 10×. Το κόστος χειραψίας και αποθήκευσης TLS αθροίζεται σε κλίμακα.
    • Κβαντική αντίσταση. Ένας αρκετά μεγάλος κβαντικός υπολογιστής θα συνυπολογίσει το RSA μέσω του αλγόριθμου του Shor σε πολυωνυμικό χρόνο. Το ECC είναι επίσης ευάλωτο, αλλά οι εναλλακτικές με κβαντική αντοχή είναι πιο εύκολο να αναπτυχθούν.

    TLS 1.3 καταργημένη ανταλλαγή κλειδιών RSA υπέρ του ECDHE. Η σύγχρονη υπογραφή πιστοποιητικού-αρχής μεταφέρεται στο ECDSA. Το RSA παραμένει για συμβατότητα εγκατεστημένης βάσης (PGP, JWT, έξυπνες κάρτες, υπογραφή κωδικού) και θα παραμείνει για χρόνια.

    Η μετα-κβαντική ερώτηση

    Ακόμα κι αν οι κβαντικοί υπολογιστές ικανοί να σπάσουν το RSA βρίσκονται δεκαετίες μακριά, κρυπτογραφημένα δεδομένα με μακροπρόθεσμη αξία συλλέγονται σήμερα με την υπόθεση ότι μπορούν να αποκρυπτογραφηθούν αργότερα. Κυβερνητικά καλώδια, ιατρικά αρχεία, πνευματική ιδιοκτησία — «συγκομιδή τώρα, αποκρυπτογράφηση αργότερα» είναι το τρέχον μοντέλο απειλής. Τα μετα-κβαντικά πρότυπα του NIST (CRYSTALS-Kyber για ενθυλάκωση κλειδιού, CRYSTALS-Dilithium για υπογραφές) αναπτύσσονται παράλληλα με το RSA σε υβριδικές διαμορφώσεις. Οι αναπτύξεις Pure-RSA για μακροπρόθεσμα εμπιστευτικά δεδομένα θεωρούνται όλο και περισσότερο ανεπαρκείς.

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

    Είναι ακόμα ασφαλές το RSA το 2026;
    Ενάντια στους κλασικούς αντιπάλους, το RSA-2048 και μεγαλύτεροι παραμένουν ασφαλείς. Ο κρυπτογράφηση δεν έχει γνωστή πρακτική διάσπαση. Ενάντια στους μελλοντικούς κβαντικούς αντιπάλους, το RSA είναι θραύσιμο σε πολυωνυμικό χρόνο όταν υπάρχει αρκετά μεγάλο κβαντικό υλικό — πιθανότατα 5-20 χρόνια μετά. Τα μακροπρόθεσμα εμπιστευτικά δεδομένα θα πρέπει ήδη να μετακινούνται σε υβριδικά μετα-κβαντικά συστήματα.
    Γιατί το RSA είναι τόσο αργό σε σύγκριση με το AES;
    Ο RSA είναι ένας αλγόριθμος δημόσιου κλειδιού (ασύμμετρος) που βασίζεται σε τεράστια αρθρωτή εκθετικότητα. Ο AES είναι ένας συμμετρικός αλγόριθμος που λειτουργεί σε μπλοκ 128-bit με επιτάχυνση υλικού. Το AES είναι περίπου 1000× ταχύτερο ανά byte. Γι' αυτό σχεδόν όλα τα πραγματικά συστήματα χρησιμοποιούν το RSA μόνο για να ανταλλάξουν ένα κλειδί συνεδρίας και μετά να κρυπτογραφήσουν μαζικά δεδομένα με AES.
    Ποια είναι η διαφορά μεταξύ της κρυπτογράφησης RSA και των υπογραφών RSA;
    Χρησιμοποιούν τα ίδια μαθηματικά σε αντίθετες κατευθύνσεις. Κρυπτογράφηση: κρυπτογράφηση με το δημόσιο κλειδί, αποκρυπτογράφηση με το ιδιωτικό. Υπογραφή: "κρυπτογράφηση" με το ιδιωτικό κλειδί (ονομάζεται υπογραφή), "αποκρυπτογράφηση" με το δημόσιο κλειδί (ονομάζεται επαλήθευση). Τα κρυπτογραφικά πρωτόγονα διαφέρουν ως προς τις λεπτομέρειες (επένδυση) και δεν πρέπει ποτέ να χρησιμοποιείτε το ίδιο κλειδί και για τα δύο — τα ξεχωριστά κλειδιά υπογραφής και κρυπτογράφησης είναι βασικά.
    Γιατί το 65537 χρησιμοποιείται ως δημόσιος εκθέτης RSA;
    Είναι πρώτος Fermat (2^16 + 1), αρκετά μικρός ώστε να κάνει την κρυπτογράφηση/επαλήθευση γρήγορη (μόνο 17 πολλαπλασιασμούς), με αραιή δυαδική αναπαράσταση που επιτρέπει αποτελεσματικούς υπολογισμούς. Οι μεγαλύτερες ή μικρότερες τιμές λειτουργούν αλλά είναι πιο αργές ή έχουν ανεπαίσθητους κινδύνους ευπάθειας. Το 65537 έχει γίνει καθολικό κατά σύμβαση.
    Μπορώ να δημιουργήσω το δικό μου κλειδί RSA με ασφάλεια;
    Χρησιμοποιήστε μια καλά δοκιμασμένη βιβλιοθήκη (OpenSSL, libsodium, GnuPG) και ένα CSPRNG. Ποτέ μην κάνετε το δικό σας τεστ πρωταρχικότητας και μην εφαρμόζετε το RSA από την αρχή — οι τρόποι αποτυχίας είναι λεπτές και καταστροφικές. Η δημιουργία κλειδιού μέσω <code>ssh-keygen -t rsa -b 3072</code> ή ισοδύναμου είναι μια χαρά. το να γράφεις μόνος σου τα μαθηματικά δεν είναι.
    Επεξήγηση κρυπτογράφησης RSA: Ο αλγόριθμος που έκανε την κρυπτογραφία δημόσιου κλειδιού πρακτική