Veröffentlichung der kryptografischen Bibliothek OpenSSL 3.0.0

Nach drei Jahren Entwicklung und 19 Testversionen wurde die Library OpenSSL 3.0.0 veröffentlicht, die die Protokolle SSL/TLS und verschiedene Verschlüsselungsalgorithmen implementiert. Der neue Branch umfasst Änderungen, die die Rückwärtskompatibilität auf API- und ABI-Ebene beeinträchtigen, allerdings werden diese Änderungen die Funktionalität der meisten Anwendungen nicht beeinträchtigen. Für den Übergang von OpenSSL 1.1.1 genügt eine Neubau. Der Support für die vorherige Version OpenSSL 1.1.1 wird bis September 2023 gewährleistet.

Die signifikante Änderung der Versionsnummer hängt mit dem Wechsel zu der traditionellen Zählweise "Major.Minor.Patch" zusammen. Die erste Ziffer (Major) in der Versionsnummer wird zukünftig nur bei Verletzung der Kompatibilität auf API/ABI-Ebene geändert, während die zweite Ziffer (Minor) bei der Erweiterung der Funktionalität ohne Änderung von API/ABI geändert wird. Fehlerbehebungs-Updates werden mit einer Änderung der dritten Ziffer (Patch) bereitgestellt. Die Nummer 3.0.0 wurde direkt nach 1.1.1 gewählt, um Überschneidungen mit dem sich in Entwicklung befindlichen FIPS-Modul für OpenSSL zu vermeiden, für das die Nummerierung 2.x verwendet wurde.

Eine der wichtigsten Änderungen für das Projekt war der Wechsel von der doppelten Lizenzierung (OpenSSL und SSLeay) zu einer Lizenz unter Apache 2.0. Die zuvor verwendete eigene Lizenz von OpenSSL basierte auf dem Text der veralteten Lizenz Apache 1.0 und verlangte eine explizite Nennung von OpenSSL in Werbematerialien bei der Verwendung der OpenSSL-Bibliotheken sowie die Hinzufügung eines speziellen Hinweises, falls OpenSSL im Rahmen eines Produkts geliefert wurde. Solche Anforderungen machten die alte Lizenz mit der GPL inkompatibel, was die Verwendung von OpenSSL in GPL-lizenzierten Projekten erschwerte. Um diese Inkompatibilität zu umgehen, sahen GPL-Projekte gezwungen, spezifische 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 darauf hinwies, dass die Anforderungen der GPL nicht auf die Verknüpfung mit OpenSSL Anwendung finden.

Im Vergleich zur OpenSSL-Version 1.1.1 wurden in OpenSSL 3.0.0 über 7500 Änderungen vorgenommen, die von 350 Entwicklern vorbereitet wurden. Die wichtigsten Neuerungen in OpenSSL 3.0.0:

  • Ein neues FIPS-Modul wurde angeboten, das die Implementierung kryptografischer Algorithmen gemäß dem Sicherheitsstandard FIPS 140-2 umfasst (der Zertifizierungsprozess des Moduls wird in diesem Monat begonnen, die FIPS 140-2-Zertifizierung wird im nächsten Jahr erwartet). Das neue Modul ist wesentlich benutzerfreundlicher, und die Integration in zahlreiche Anwendungen erfordert nicht mehr als eine Anpassung der Konfigurationsdatei. Standardmäßig ist das FIPS-Modul deaktiviert und benötigt die Angabe der Option enable-fips, um aktiviert zu werden.
  • In libcrypto wurde das Konzept von Plug-in-Anbietern implementiert, das das veraltete ENGINE API ersetzt. Mit Hilfe der Anbieter können eigene Implementierungen von Algorithmen für Vorgänge wie Verschlüsselung, Entschlüsselung, Schlüsselerzeugung, MAC-Berechnung sowie Erstellen und Überprüfen digitaler Signaturen hinzugefügt werden. Sowohl die Anbindung neuer Algorithmen als auch die Erstellung alternativer Implementierungen bereits unterstützter Algorithmen ist möglich (für jeden Algorithmus wird standardmäßig der in OpenSSL integrierte Anbieter verwendet).
  • Die Unterstützung des Certificate Management Protocol (CMP, RFC 4210) wurde hinzugefügt, das zur Anforderung von Zertifikaten bei Server der Zertifizierungsstelle, zur Aktualisierung von Zertifikaten und zum Widerruf von Zertifikaten verwendet werden kann. Die Arbeit mit CMP erfolgt über das neue Tool openssl-cmp, das auch die Unterstützung des CRMF-Formats (RFC 4211) und die Übertragung von Anfragen über HTTP/HTTPS (RFC 6712) implementiert.
  • Ein vollwertiger Client für die Protokolle HTTP und HTTPS wurde implementiert, der die Methoden GET und POST, das Umleiten von Anfragen, das Arbeiten über Proxy, die ASN.1-Codierung und die Verwaltung von Timeouts unterstützt.
  • Eine neue API EVP_MAC (Message Authentication Code API) wurde hinzugefügt, die die Implementierung neuer Message Authentication Codes vereinfacht.
  • Eine neue Schnittstelle zur Schlüsselgenerierung—EVP_KDF (Key Derivation Function API)—wurde vorgeschlagen, die das Hinzufügen neuer KDF- und PRF-Implementierungen erleichtert. Die alte API EVP_PKEY, über die die Algorithmen scrypt, TLS1 PRF und HKDF verfügbar waren, wurde in Form einer Schicht über der API EVP_KDF und EVP_MAC neu gestaltet.
  • Im TLS-Protokoll wurde die Möglichkeit implementiert, die im Linux-Kernel integrierten TLS-Clients und -Server zu verwenden, um die Abläufe zu beschleunigen. Um die vom Linux-Kernel bereitgestellte TLS-Implementierung zu aktivieren, muss die Option "SSL_OP_ENABLE_KTLS" oder die Einstellung "enable-ktls" aktiviert werden.
  • Neue Algorithmen wurden hinzugefügt:
    • Schlüsselerzeugungsalgorithmen (KDF) – „SINGLE STEP“ und „SSH“.
    • Integritätsprüfungsalgorithmen (MAC) – „GMAC“ und „KMAC“.
    • RSA-Schlüsselverpackungsalgorithmus (KEM) „RSASVE“.
    • Verschlüsselungsalgorithmus „AES-SIV“ (RFC-8452).
    • Im EVP-API wurden Aufrufe zur Unterstützung inverser Verschlüsselungen hinzugefügt, die den Algorithmus AES zur Schlüsselverschlüsselung verwenden (Key Wrap): „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“.
    • Im EVP-API wurde die Unterstützung für Algorithmen zur Wiederverwendung von Chiffretext (CTS) 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“.
    • Die Unterstützung für digitale Signaturen CAdES-BES (RFC 5126) wurde hinzugefügt.
    • In AES_GCM wurde der Parameter AuthEnvelopedData (RFC 5083) implementiert, der es ermöglicht, Nachrichten zu verschlüsseln und zu entschlüsseln, die authentifiziert und mit dem AES GCM-Modus verschlüsselt wurden.
  • Im öffentlichen API wurden die Funktionen PKCS7_get_octet_string und PKCS7_type_is_other bereitgestellt.
  • Im PKCS#12 API wurden die standardmäßig verwendeten Algorithmen in der Funktion PKCS12_create() auf PBKDF2 und AES umgestellt, und für die MAC-Berechnung wird der Algorithmus SHA-256 eingesetzt. Um das frühere Verhalten wiederherzustellen, gibt es die Option „-legacy“. Eine Vielzahl neuer erweiterter Aufrufe wie PKCS12_*_ex, PKCS5_*_ex und PKCS8_*_ex wurde hinzugefügt, darunter PKCS12_add_key_ex(), PKCS12_create_ex() und PKCS12_decrypt_skey_ex().
  • Für die Windows-Plattform wurde die Unterstützung für die Synchronisierung von Threads über den SRWLock-Mechanismus hinzugefügt.
  • Eine neue API zum Tracing wurde hinzugefügt, die über den Parameter enable-trace aktiviert werden kann.
  • Der Umfang 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 stattdessen die EVP_RAND-API eingeführt. Die Funktionen FIPS_mode() und FIPS_mode_set() wurden entfernt.
  • Ein erheblicher Teil der API wurde als veraltet eingestuft – die Verwendung veralteter Aufrufe im Code von Projekten wird eine Warnung bei der Kompilierung ausgeben. Dazu gehören auch offizielle Erklärungen über die Veralterung von Low-Level-APIs, die an bestimmte Implementierungen von Algorithmen gebunden sind (zum Beispiel AES_set_encrypt_key und AES_encrypt). Offizielle Unterstützung in OpenSSL 3.0.0 wird nun nur noch für die hochrangigen APIs EVP bereitgestellt, die von einzelnen Algorithmustypen abstrahiert sind (zu diesen APIs gehören beispielsweise die Funktionen EVP_EncryptInit_ex, EVP_EncryptUpdate und EVP_EncryptFinal). In einer der nächsten bedeutenden Versionen werden die veralteten APIs entfernt. Implementierungen veralteter Algorithmen wie MD2 und DES, die über die EVP-API verfügbar sind, wurden in ein separates Modul "legacy" verschoben, das standardmäßig deaktiviert ist.
  • Die Dokumentation und der Testumfang wurden erheblich erweitert. Im Vergleich zur Version 1.1.1 hat sich das Dokumentationsvolumen um 94% erhöht und die Größe des Testcodeumfangs um 54%.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster