Έκδοση κρυπτογραφικής βιβλιοθήκης OpenSSL 3.0.0

Μετά από τρία χρόνια ανάπτυξης και 19 δοκιμαστικές εκδόσεις, κυκλοφόρησε η βιβλιοθήκη OpenSSL 3.0.0 με την υλοποίηση των πρωτοκόλλων SSL/TLS και διάφορους αλγόριθμους κρυπτογράφησης. Ο νέος κλάδος περιλαμβάνει αλλαγές που διακόπτουν τη συμβατότητα προς τα πίσω σε επίπεδο API και ABI, αλλά οι αλλαγές δεν θα επηρεάσουν τη λειτουργία των περισσότερων εφαρμογών που απαιτούν ανακατασκευή για μετεγκατάσταση από το OpenSSL 1.1.1. Ο προηγούμενος κλάδος του OpenSSL 1.1.1 θα υποστηρίζεται μέχρι τον Σεπτέμβριο του 2023.

Μια σημαντική αλλαγή στον αριθμό έκδοσης οφείλεται στη μετάβαση στην παραδοσιακή αρίθμηση "Major.Minor.Patch". Από εδώ και στο εξής, το πρώτο ψηφίο (Major) στον αριθμό έκδοσης θα αλλάξει μόνο εάν διακοπεί η συμβατότητα σε επίπεδο API/ABI και το δεύτερο (Minor) θα αλλάξει όταν αυξηθεί η λειτουργικότητα χωρίς αλλαγή του API/ABI. Οι διορθωτικές ενημερώσεις θα παραδοθούν με αλλαγή στο τρίτο ψηφίο (Patch). Ο αριθμός 3.0.0 αμέσως μετά την 1.1.1 επιλέχθηκε για να αποφευχθούν επικαλύψεις με την υπό ανάπτυξη λειτουργική μονάδα FIPS για OpenSSL, για την οποία χρησιμοποιήθηκε η αρίθμηση 2.x.

Η δεύτερη σημαντική αλλαγή για το έργο ήταν η μετάβαση από μια διπλή άδεια (OpenSSL και SSLeay) στην άδεια Apache 2.0. Η προηγούμενη ιδιόκτητη άδεια OpenSSL βασιζόταν στο κείμενο της άδειας παλαιού τύπου Apache 1.0 και απαιτούσε ρητή αναφορά του OpenSSL στο υλικό μάρκετινγκ κατά τη χρήση βιβλιοθηκών OpenSSL, καθώς και ειδική ειδοποίηση εάν το OpenSSL παρεχόταν ως μέρος του προϊόντος. Αυτές οι απαιτήσεις κατέστησαν την παλιά άδεια μη συμβατή με την GPL, καθιστώντας δύσκολη τη χρήση του OpenSSL σε έργα με άδεια GPL. Για να ξεπεραστεί αυτή η ασυμβατότητα, τα έργα GPL αναγκάστηκαν να χρησιμοποιήσουν συγκεκριμένες συμφωνίες άδειας χρήσης στις οποίες το κύριο κείμενο της GPL συμπληρώθηκε με μια ρήτρα που επέτρεπε ρητά τη σύνδεση της εφαρμογής με τη βιβλιοθήκη OpenSSL και ανέφερε ότι οι απαιτήσεις της GPL δεν ισχύει για σύνδεση με OpenSSL.

Σε σύγκριση με τον κλάδο OpenSSL 1.1.1, το OpenSSL 3.0.0 πρόσθεσε περισσότερες από 7500 αλλαγές που συνεισέφεραν 350 προγραμματιστές. Κύριες καινοτομίες του OpenSSL 3.0.0:

  • Έχει προταθεί μια νέα ενότητα FIPS, συμπεριλαμβανομένης της εφαρμογής κρυπτογραφικών αλγορίθμων που συμμορφώνονται με το πρότυπο ασφαλείας FIPS 140-2 (η διαδικασία πιστοποίησης για τη μονάδα έχει προγραμματιστεί να ξεκινήσει αυτόν τον μήνα και η πιστοποίηση FIPS 140-2 αναμένεται το επόμενο έτος). Η νέα μονάδα είναι πολύ πιο εύκολη στη χρήση και η σύνδεσή της με πολλές εφαρμογές δεν θα είναι πιο δύσκολη από την αλλαγή του αρχείου διαμόρφωσης. Από προεπιλογή, η μονάδα FIPS είναι απενεργοποιημένη και απαιτεί την ενεργοποίηση της επιλογής enable-fips.
  • Το libcrypto υλοποιεί την έννοια των pluggable παρόχων, η οποία αντικατέστησε την έννοια των κινητήρων (το API ENGINE έχει καταργηθεί). Με τη βοήθεια παρόχων, μπορείτε να προσθέσετε τις δικές σας υλοποιήσεις αλγορίθμων για λειτουργίες όπως κρυπτογράφηση, αποκρυπτογράφηση, δημιουργία κλειδιών, υπολογισμός MAC, δημιουργία και επαλήθευση ψηφιακών υπογραφών. Είναι δυνατή η σύνδεση νέων και η δημιουργία εναλλακτικών υλοποιήσεων ήδη υποστηριζόμενων αλγορίθμων (από προεπιλογή, ο πάροχος που είναι ενσωματωμένος στο OpenSSL χρησιμοποιείται πλέον για κάθε αλγόριθμο).
  • Προστέθηκε υποστήριξη για το πρωτόκολλο διαχείρισης πιστοποιητικών (RFC 4210), το οποίο μπορεί να χρησιμοποιηθεί για να ζητήσετε πιστοποιητικά από διακομιστή CA, να ενημερώσετε πιστοποιητικά και να ανακαλέσετε πιστοποιητικά. Η εργασία με το CMP πραγματοποιείται χρησιμοποιώντας το νέο βοηθητικό πρόγραμμα openssl-cmp, το οποίο υποστηρίζει επίσης τη μορφή CRMF (RFC 4211) και την αποστολή αιτημάτων μέσω HTTP/HTTPS (RFC 6712).
  • Έχει υλοποιηθεί ένας πλήρης πελάτης για τα πρωτόκολλα HTTP και HTTPS, που υποστηρίζει τις μεθόδους GET και POST, ανακατεύθυνση αιτήματος, εργασία μέσω διακομιστή μεσολάβησης, κωδικοποίηση ASN.1 και επεξεργασία χρονικού ορίου.
  • Προστέθηκε ένα νέο EVP_MAC (Message Authentication Code API) για να διευκολυνθεί η προσθήκη νέων εφαρμογών εικονικών ένθετων.
  • Προτείνεται μια νέα διεπαφή λογισμικού για τη δημιουργία κλειδιών - EVP_KDF (Key Derivation Function API), η οποία απλοποιεί την προσθήκη νέων υλοποιήσεων KDF και PRF. Το παλιό EVP_PKEY API, μέσω του οποίου ήταν διαθέσιμοι οι αλγόριθμοι scrypt, TLS1 PRF και HKDF, έχει επανασχεδιαστεί με τη μορφή ενός επιπέδου που υλοποιείται πάνω από τα API EVP_KDF και EVP_MAC.
  • Η υλοποίηση του πρωτοκόλλου TLS παρέχει τη δυνατότητα χρήσης του πελάτη και του διακομιστή TLS που είναι ενσωματωμένοι στον πυρήνα του Linux για την επιτάχυνση των λειτουργιών. Για να ενεργοποιήσετε την υλοποίηση TLS που παρέχεται από τον πυρήνα Linux, πρέπει να ενεργοποιήσετε την επιλογή "SSL_OP_ENABLE_KTLS" ή τη ρύθμιση "enable-ktls".
  • Προστέθηκε υποστήριξη για νέους αλγόριθμους:
    • Οι αλγόριθμοι δημιουργίας κλειδιών (KDF) είναι "SINGLE STEP" και "SSH".
    • Οι αλγόριθμοι προσομοίωσης εισαγωγής (MAC) είναι "GMAC" και "KMAC".
    • Αλγόριθμος ενθυλάκωσης κλειδιού RSA (KEM) "RSASVE".
    • Αλγόριθμος κρυπτογράφησης "AES-SIV" (RFC-8452).
    • Προστέθηκαν κλήσεις στο API EVP που υποστηρίζουν αντίστροφους κρυπτογράφησης χρησιμοποιώντας τον αλγόριθμο AES για κρυπτογράφηση κλειδιών (Κλειδί αναδίπλωσης): "AES-128-WRAP-INV", "AES-192-WRAP-INV", "AES-256-WRAP-INV ” , "AES-128-WRAP-PAD-INV", "AES-192-WRAP-PAD-INV" και "AES-256-WRAP-PAD-INV".
    • Προστέθηκε υποστήριξη για αλγόριθμους δανεισμού κρυπτογραφημένου κειμένου (CTS) στο API EVP: "AES-128-CBC-CTS", "AES-192-CBC-CTS", "AES-256-CBC-CTS", "CAMELLIA-128-CBC -CTS" ", "CAMELLIA-192-CBC-CTS" και "CAMELLIA-256-CBC-CTS".
    • Προστέθηκε υποστήριξη για ψηφιακές υπογραφές CAdES-BES (RFC 5126).
    • Το AES_GCM εφαρμόζει την παράμετρο AuthEnvelopedData (RFC 5083) για να ενεργοποιήσει την κρυπτογράφηση και την αποκρυπτογράφηση των μηνυμάτων που έχουν επικυρωθεί και κρυπτογραφηθεί χρησιμοποιώντας τη λειτουργία AES GCM.
  • Οι συναρτήσεις PKCS7_get_octet_string και PKCS7_type_is_other έχουν προστεθεί στο δημόσιο API.
  • Το PKCS#12 API αντικαθιστά τους προεπιλεγμένους αλγόριθμους που χρησιμοποιούνται στη συνάρτηση PKCS12_create() με PBKDF2 και AES και χρησιμοποιεί τον αλγόριθμο SHA-256 για τον υπολογισμό του MAC. Για να επαναφέρετε την προηγούμενη συμπεριφορά, παρέχεται η επιλογή "-legacy". Προστέθηκε ένας μεγάλος αριθμός νέων εκτεταμένων κλήσεων στα PKCS12_*_ex, PKCS5_*_ex και PKCS8_*_ex, όπως PKCS12_add_key_ex().PKCS12_create_ex() και PKCS12_decrypt_skey_ex().
  • Για την πλατφόρμα των Windows, έχει προστεθεί υποστήριξη για συγχρονισμό νημάτων με χρήση του μηχανισμού SRWLock.
  • Προστέθηκε ένα νέο API ανίχνευσης, που ενεργοποιήθηκε μέσω της παραμέτρου enable-trace.
  • Το εύρος των κλειδιών που υποστηρίζονται στις συναρτήσεις EVP_PKEY_public_check() και EVP_PKEY_param_check() έχει επεκταθεί: RSA, DSA, ED25519, X25519, ED448 και X448.
  • Το υποσύστημα RAND_DRBG καταργήθηκε και αντικαταστάθηκε από το EVP_RAND API. Οι συναρτήσεις FIPS_mode() και FIPS_mode_set() έχουν καταργηθεί.
  • Ένα σημαντικό μέρος του API έχει καταστεί απαρχαιωμένο - η χρήση απαρχαιωμένων κλήσεων στον κώδικα έργου θα έχει ως αποτέλεσμα προειδοποιήσεις κατά τη μεταγλώττιση. Συμπεριλαμβανομένων των API χαμηλού επιπέδου που συνδέονται με ορισμένες υλοποιήσεις αλγορίθμων (για παράδειγμα, AES_set_encrypt_key και AES_encrypt) έχουν κηρυχθεί επίσημα απαρχαιωμένα. Η επίσημη υποστήριξη στο OpenSSL 3.0.0 παρέχεται πλέον μόνο για API υψηλού επιπέδου EVP που έχουν αφαιρεθεί από μεμονωμένους τύπους αλγορίθμων (αυτό το API περιλαμβάνει, για παράδειγμα, τις συναρτήσεις EVP_EncryptInit_ex, EVP_EncryptUpdate και EVP_EncryptFinal). Τα καταργημένα API θα καταργηθούν σε μία από τις επόμενες σημαντικές εκδόσεις. Οι υλοποιήσεις αλγορίθμων παλαιού τύπου, όπως ο MD2 και ο DES, που είναι διαθέσιμοι μέσω του API EVP, έχουν μετακινηθεί σε μια ξεχωριστή ενότητα "παλαιού τύπου", η οποία είναι απενεργοποιημένη από προεπιλογή.
  • Η τεκμηρίωση και η σουίτα δοκιμών έχουν επεκταθεί σημαντικά. Σε σύγκριση με τον κλάδο 1.1.1, ο όγκος της τεκμηρίωσης έχει αυξηθεί κατά 94%, και το μέγεθος του κωδικού δοκιμαστικής σουίτας έχει αυξηθεί κατά 54%.

Πηγή: opennet.ru

Προσθέστε ένα σχόλιο