Rilascio della libreria crittografica OpenSSL 3.0.0

Dopo tre anni di sviluppo e 19 rilasci di prova è stata rilasciata la libreria OpenSSL 3.0.0 con l'implementazione dei protocolli SSL/TLS e vari algoritmi di crittografia. Il nuovo ramo include modifiche che interrompono la compatibilità con le versioni precedenti a livello API e ABI, ma le modifiche non influenzeranno il funzionamento della maggior parte delle applicazioni che richiedono una ricostruzione per migrare da OpenSSL 1.1.1. Il ramo precedente di OpenSSL 1.1.1 sarà supportato fino a settembre 2023.

Un cambiamento significativo nel numero di versione è dovuto al passaggio alla tradizionale numerazione “Major.Minor.Patch”. D'ora in poi, la prima cifra (Major) nel numero di versione cambierà solo se viene interrotta la compatibilità a livello API/ABI, e la seconda (Minor) cambierà quando la funzionalità verrà aumentata senza modificare API/ABI. Gli aggiornamenti correttivi verranno forniti con la modifica della terza cifra (Patch). Il numero 3.0.0 subito dopo 1.1.1 è stato scelto per evitare sovrapposizioni con il modulo FIPS attualmente in fase di sviluppo per OpenSSL, per il quale è stata utilizzata la numerazione 2.x.

Il secondo cambiamento importante per il progetto è stato il passaggio da una doppia licenza (OpenSSL e SSLeay) alla licenza Apache 2.0. La precedente licenza proprietaria OpenSSL era basata sul testo della licenza legacy Apache 1.0 e richiedeva una menzione esplicita di OpenSSL nei materiali di marketing quando si utilizzavano le librerie OpenSSL, nonché un avviso speciale se OpenSSL veniva fornito come parte del prodotto. Questi requisiti rendevano la vecchia licenza incompatibile con la GPL, rendendo difficile l'utilizzo di OpenSSL nei progetti con licenza GPL. Per aggirare questa incompatibilità, i progetti GPL furono costretti a utilizzare specifici accordi di licenza in cui il testo principale della GPL era integrato con una clausola che consentiva esplicitamente di collegare l'applicazione con la libreria OpenSSL e menzionava che i requisiti della GPL non consentivano si applicano al collegamento con OpenSSL.

Rispetto al ramo OpenSSL 1.1.1, OpenSSL 3.0.0 ha aggiunto più di 7500 modifiche apportate da 350 sviluppatori. Principali innovazioni di OpenSSL 3.0.0:

  • È stato proposto un nuovo modulo FIPS, inclusa l'implementazione di algoritmi crittografici conformi allo standard di sicurezza FIPS 140-2 (il processo di certificazione per il modulo dovrebbe iniziare questo mese e la certificazione FIPS 140-2 è prevista per il prossimo anno). Il nuovo modulo è molto più semplice da usare e collegarlo a molte applicazioni non sarà più difficile che modificare il file di configurazione. Per impostazione predefinita, il modulo FIPS è disabilitato e richiede che l'opzione abilita-fips sia abilitata.
  • libcrypto implementa il concetto di provider collegabili, che ha sostituito il concetto di motore (l'API ENGINE è stata deprecata). Con l'aiuto dei provider, puoi aggiungere le tue implementazioni di algoritmi per operazioni quali crittografia, decrittografia, generazione di chiavi, calcolo MAC, creazione e verifica delle firme digitali. È possibile sia connetterne di nuovi sia creare implementazioni alternative di algoritmi già supportati (per impostazione predefinita, il provider integrato in OpenSSL viene ora utilizzato per ciascun algoritmo).
  • Aggiunto supporto per il protocollo di gestione dei certificati (RFC 4210), che può essere utilizzato per richiedere certificati da un server CA, aggiornare certificati e revocare certificati. Il lavoro con CMP viene effettuato utilizzando la nuova utility openssl-cmp, che supporta anche il formato CRMF (RFC 4211) e l'invio di richieste tramite HTTP/HTTPS (RFC 6712).
  • È stato implementato un client completo per i protocolli HTTP e HTTPS, che supporta i metodi GET e POST, il reindirizzamento delle richieste, il funzionamento tramite proxy, la codifica ASN.1 e l'elaborazione del timeout.
  • È stato aggiunto un nuovo EVP_MAC (Message Authentication Code API) per semplificare l'aggiunta di nuove implementazioni di inserti fittizi.
  • Viene proposta una nuova interfaccia software per la generazione delle chiavi: EVP_KDF (Key Derivation Function API), che semplifica l'aggiunta di nuove implementazioni di KDF e PRF. La vecchia API EVP_PKEY, attraverso la quale erano disponibili gli algoritmi scrypt, TLS1 PRF e HKDF, è stata riprogettata sotto forma di un livello implementato sopra le API EVP_KDF ed EVP_MAC.
  • L'implementazione del protocollo TLS offre la possibilità di utilizzare il client e il server TLS integrati nel kernel Linux per velocizzare le operazioni. Per abilitare l'implementazione TLS fornita dal kernel Linux, è necessario abilitare l'opzione "SSL_OP_ENABLE_KTLS" o l'impostazione "enable-ktls".
  • Aggiunto supporto per nuovi algoritmi:
    • Gli algoritmi di generazione delle chiavi (KDF) sono “SINGLE STEP” e “SSH”.
    • Gli algoritmi di inserimento simulato (MAC) sono “GMAC” e “KMAC”.
    • Algoritmo di incapsulamento della chiave RSA (KEM) "RSASVE".
    • Algoritmo di crittografia "AES-SIV" (RFC-8452).
    • Aggiunte chiamate all'API EVP con supporto per cifrature inverse utilizzando l'algoritmo AES per crittografare le chiavi (Key Wrap): “AES-128-WRAP-INV”, “AES-192-WRAP-INV”, “AES-256-WRAP- INV”, "AES-128-WRAP-PAD-INV", "AES-192-WRAP-PAD-INV" e "AES-256-WRAP-PAD-INV".
    • Aggiunto il supporto per gli algoritmi di prestito del testo cifrato (CTS) all'API EVP: “AES-128-CBC-CTS”, “AES-192-CBC-CTS”, “AES-256-CBC-CTS”, “CAMELLIA-128-CBC -CTS” ", "CAMELLIA-192-CBC-CTS" e "CAMELLIA-256-CBC-CTS".
    • Aggiunto il supporto per le firme digitali CAdES-BES (RFC 5126).
    • AES_GCM implementa il parametro AuthEnvelopedData (RFC 5083) per abilitare la crittografia e la decrittografia dei messaggi autenticati e crittografati utilizzando la modalità AES GCM.
  • Le funzioni PKCS7_get_octet_string e PKCS7_type_is_other sono state aggiunte all'API pubblica.
  • L'API PKCS#12 sostituisce gli algoritmi predefiniti utilizzati nella funzione PKCS12_create() con PBKDF2 e AES e utilizza l'algoritmo SHA-256 per calcolare il MAC. Per ripristinare il comportamento passato, viene fornita l'opzione "-legacy". Aggiunto un gran numero di nuove chiamate estese a PKCS12_*_ex, PKCS5_*_ex e PKCS8_*_ex, come PKCS12_add_key_ex().PKCS12_create_ex() e PKCS12_decrypt_skey_ex().
  • Per la piattaforma Windows è stato aggiunto il supporto per la sincronizzazione dei thread utilizzando il meccanismo SRWLock.
  • Aggiunta una nuova API di traccia, abilitata tramite il parametro abilita-trace.
  • La gamma di chiavi supportate nelle funzioni EVP_PKEY_public_check() e EVP_PKEY_param_check() è stata ampliata: RSA, DSA, ED25519, X25519, ED448 e X448.
  • Il sottosistema RAND_DRBG è stato rimosso, sostituito dall'API EVP_RAND. Le funzioni FIPS_mode() e FIPS_mode_set() sono state rimosse.
  • Una parte significativa dell'API è stata resa obsoleta: l'utilizzo di chiamate obsolete nel codice del progetto comporterà avvisi durante la compilazione. Le API di basso livello legate a determinate implementazioni di algoritmi (ad esempio AES_set_encrypt_key e AES_encrypt) sono state ufficialmente dichiarate obsolete. Il supporto ufficiale in OpenSSL 3.0.0 è ora fornito solo per le API EVP di alto livello astratte da singoli tipi di algoritmi (questa API include, ad esempio, le funzioni EVP_EncryptInit_ex, EVP_EncryptUpdate e EVP_EncryptFinal). Le API deprecate verranno rimosse in una delle prossime versioni principali. Le implementazioni di algoritmi legacy come MD2 e DES, disponibili tramite l'API EVP, sono state spostate in un modulo "legacy" separato, che è disabilitato per impostazione predefinita.
  • La documentazione e la suite di test sono state notevolmente ampliate. Rispetto al ramo 1.1.1, il volume della documentazione è aumentato del 94% e la dimensione del codice della suite di test è aumentata del 54%.

Fonte: opennet.ru

Aggiungi un commento