Veröffentlichung der OpenSSL 3.0.0 Cryptographic Library

Nach drei Jahren Entwicklungszeit und 19 Testversionen wurde die OpenSSL 3.0.0-Bibliothek mit der Implementierung der SSL/TLS-Protokolle und verschiedenen Verschlüsselungsalgorithmen veröffentlicht. Der neue Zweig enthält Änderungen, die die Abwärtskompatibilität auf API- und ABI-Ebene beeinträchtigen. Die Änderungen wirken sich jedoch nicht auf den Betrieb der meisten Anwendungen aus, die für die Migration von OpenSSL 1.1.1 eine Neuerstellung erfordern. Der bisherige Zweig von OpenSSL 1.1.1 wird bis September 2023 unterstützt.

Eine wesentliche Änderung der Versionsnummer ist auf den Übergang zur traditionellen Nummerierung „Major.Minor.Patch“ zurückzuführen. Von nun an ändert sich die erste Ziffer (Major) in der Versionsnummer nur, wenn die Kompatibilität auf API/ABI-Ebene unterbrochen wird, und die zweite (Minor) ändert sich, wenn die Funktionalität erhöht wird, ohne die API/ABI zu ändern. Korrektive Updates werden mit einer Änderung der dritten Ziffer (Patch) ausgeliefert. Die Nummer 3.0.0 unmittelbar nach 1.1.1 wurde gewählt, um Überschneidungen mit dem derzeit in der Entwicklung befindlichen FIPS-Modul für OpenSSL zu vermeiden, für das die 2.x-Nummerierung verwendet wurde.

Die zweite wichtige Änderung für das Projekt war der Übergang von einer Doppellizenz (OpenSSL und SSLeay) zur Apache 2.0-Lizenz. Die vorherige proprietäre OpenSSL-Lizenz basierte auf dem Text der alten Apache 1.0-Lizenz und erforderte eine ausdrückliche Erwähnung von OpenSSL in Marketingmaterialien bei der Verwendung von OpenSSL-Bibliotheken sowie einen besonderen Hinweis, wenn OpenSSL als Teil des Produkts bereitgestellt wurde. Aufgrund dieser Anforderungen war die alte Lizenz nicht mit der GPL kompatibel, was die Verwendung von OpenSSL in GPL-lizenzierten Projekten erschwerte. Um diese Inkompatibilität zu umgehen, wurden GPL-Projekte gezwungen, bestimmte Lizenzvereinbarungen zu verwenden, in denen der Haupttext der GPL durch eine Klausel ergänzt wurde, die ausdrücklich die Verknüpfung der Anwendung mit der OpenSSL-Bibliothek erlaubte und erwähnte, dass die Anforderungen der GPL dies nicht taten gelten für die Verknüpfung mit OpenSSL.

Im Vergleich zum OpenSSL 1.1.1-Zweig wurden bei OpenSSL 3.0.0 mehr als 7500 Änderungen hinzugefügt, die von 350 Entwicklern beigesteuert wurden. Wichtigste Neuerungen von OpenSSL 3.0.0:

  • Es wurde ein neues FIPS-Modul vorgeschlagen, einschließlich der Implementierung kryptografischer Algorithmen, die dem Sicherheitsstandard FIPS 140-2 entsprechen (der Zertifizierungsprozess für das Modul soll diesen Monat beginnen, und die FIPS 140-2-Zertifizierung wird für nächstes Jahr erwartet). Das neue Modul ist viel einfacher zu verwenden und die Anbindung an viele Anwendungen wird nicht schwieriger sein als das Ändern der Konfigurationsdatei. Standardmäßig ist das FIPS-Modul deaktiviert und erfordert die Aktivierung der Option „enable-fips“.
  • libcrypto implementiert das Konzept der steckbaren Anbieter, das das Konzept der Engines ersetzt (die ENGINE-API ist veraltet). Mithilfe von Anbietern können Sie Ihre eigenen Implementierungen von Algorithmen für Vorgänge wie Verschlüsselung, Entschlüsselung, Schlüsselgenerierung, MAC-Berechnung sowie Erstellung und Überprüfung digitaler Signaturen hinzufügen. Es ist möglich, sowohl neue anzubinden als auch alternative Implementierungen bereits unterstützter Algorithmen zu erstellen (standardmäßig wird jetzt für jeden Algorithmus der in OpenSSL integrierte Anbieter verwendet).
  • Unterstützung für das Certificate Management Protocol (RFC 4210) hinzugefügt, das zum Anfordern von Zertifikaten von einem CA-Server, zum Aktualisieren von Zertifikaten und zum Widerrufen von Zertifikaten verwendet werden kann. Die Arbeit mit CMP erfolgt über das neue Dienstprogramm openssl-cmp, das auch das CRMF-Format (RFC 4211) und das Senden von Anfragen über HTTP/HTTPS (RFC 6712) unterstützt.
  • Es wurde ein vollwertiger Client für die Protokolle HTTP und HTTPS implementiert, der die Methoden GET und POST, die Anforderungsumleitung, die Arbeit über einen Proxy, die ASN.1-Codierung und die Timeout-Verarbeitung unterstützt.
  • Eine neue EVP_MAC (Message Authentication Code API) wurde hinzugefügt, um das Hinzufügen neuer Implementierungen von Mock-Inserts zu erleichtern.
  • Es wird eine neue Softwareschnittstelle zum Generieren von Schlüsseln vorgeschlagen – EVP_KDF (Key Derivation Function API), die das Hinzufügen neuer Implementierungen von KDF und PRF vereinfacht. Die alte EVP_PKEY-API, über die die Algorithmen Scrypt, TLS1 PRF und HKDF verfügbar waren, wurde in Form einer Ebene neu gestaltet, die auf den APIs EVP_KDF und EVP_MAC implementiert ist.
  • Die Implementierung des TLS-Protokolls bietet die Möglichkeit, den im Linux-Kernel integrierten TLS-Client und -Server zu verwenden, um Vorgänge zu beschleunigen. Um die vom Linux-Kernel bereitgestellte TLS-Implementierung zu aktivieren, müssen Sie die Option „SSL_OP_ENABLE_KTLS“ oder die Einstellung „enable-ktls“ aktivieren.
  • Unterstützung für neue Algorithmen hinzugefügt:
    • Schlüsselgenerierungsalgorithmen (KDF) sind „SINGLE STEP“ und „SSH“.
    • Simulierte Einfügungsalgorithmen (MAC) sind „GMAC“ und „KMAC“.
    • RSA-Schlüsselkapselungsalgorithmus (KEM) „RSASVE“.
    • Verschlüsselungsalgorithmus „AES-SIV“ (RFC-8452).
    • Aufrufe an die EVP-API hinzugefügt, die inverse Verschlüsselungen mit dem AES-Algorithmus für die Schlüsselverschlüsselung (Key Wrap) unterstützen: „AES-128-WRAP-INV“, „AES-192-WRAP-INV“, „AES-256-WRAP-INV“. ” , „AES-128-WRAP-PAD-INV“, „AES-192-WRAP-PAD-INV“ und „AES-256-WRAP-PAD-INV“.
    • Unterstützung für Ciphertext Borrowing (CTS)-Algorithmen zur EVP-API hinzugefügt: „AES-128-CBC-CTS“, „AES-192-CBC-CTS“, „AES-256-CBC-CTS“, „CAMELLIA-128-CBC“. -CTS“, „CAMELLIA-192-CBC-CTS“ und „CAMELLIA-256-CBC-CTS“.
    • Unterstützung für digitale CAdES-BES-Signaturen (RFC 5126) hinzugefügt.
    • AES_GCM implementiert den Parameter AuthEnvelopedData (RFC 5083), um die Verschlüsselung und Entschlüsselung von Nachrichten zu ermöglichen, die mit dem AES-GCM-Modus authentifiziert und verschlüsselt wurden.
  • Die Funktionen PKCS7_get_octet_string und PKCS7_type_is_other wurden der öffentlichen API hinzugefügt.
  • Die PKCS#12-API ersetzt die in der Funktion PKCS12_create() verwendeten Standardalgorithmen durch PBKDF2 und AES und verwendet den SHA-256-Algorithmus zur Berechnung des MAC. Um früheres Verhalten wiederherzustellen, wird die Option „-legacy“ bereitgestellt. Eine große Anzahl neuer erweiterter Aufrufe zu PKCS12_*_ex, PKCS5_*_ex und PKCS8_*_ex hinzugefügt, wie z. B. PKCS12_add_key_ex().PKCS12_create_ex() und PKCS12_decrypt_skey_ex().
  • Für die Windows-Plattform wurde Unterstützung für die Thread-Synchronisierung mithilfe des SRWLock-Mechanismus hinzugefügt.
  • Es wurde eine neue Tracing-API hinzugefügt, die über den Parameter „enable-trace“ aktiviert wird.
  • Der Bereich der in den Funktionen EVP_PKEY_public_check() und EVP_PKEY_param_check() unterstützten Schlüssel wurde erweitert: RSA, DSA, ED25519, X25519, ED448 und X448.
  • Das RAND_DRBG-Subsystem wurde entfernt und durch die EVP_RAND-API ersetzt. Die Funktionen FIPS_mode() und FIPS_mode_set() wurden entfernt.
  • Ein erheblicher Teil der API wurde veraltet – die Verwendung veralteter Aufrufe im Projektcode führt zu Warnungen während der Kompilierung. Das Einbeziehen von Low-Level-APIs, die an bestimmte Implementierungen von Algorithmen gebunden sind (z. B. AES_set_encrypt_key und AES_encrypt), wurde offiziell für veraltet erklärt. Offizielle Unterstützung in OpenSSL 3.0.0 wird jetzt nur für High-Level-EVP-APIs bereitgestellt, die von einzelnen Algorithmustypen abstrahiert sind (diese API umfasst beispielsweise die Funktionen EVP_EncryptInit_ex, EVP_EncryptUpdate und EVP_EncryptFinal). Veraltete APIs werden in einer der nächsten Hauptversionen entfernt. Implementierungen von Legacy-Algorithmen wie MD2 und DES, die über die EVP-API verfügbar sind, wurden in ein separates „Legacy“-Modul verschoben, das standardmäßig deaktiviert ist.
  • Die Dokumentation und Testsuite wurden deutlich erweitert. Im Vergleich zu Zweig 1.1.1 ist der Dokumentationsumfang um 94 % und die Größe des Testsuite-Codes um 54 % gestiegen.

Source: opennet.ru

Kommentar hinzufügen