Eigentlich ist das recht einfach zu beantworten: möglichst hohe Sicherheit bei akzeptierbarer Performance und Kompatibilität.
Beim Aufbau einer TLS-Verbindung muss man folgende Bereiche unterscheiden: Schlüsselaustausch, Authentifikation, Verschlüsselung und die Authentizität. Der Client startet ein TLS Session mit dem «Client Hello» und bietet eine Cipher Suite Auswahl an, der Server wählte eine aus und der Client bestätigt diese.
Transport Layer Security (TLS 1.2 im Unterschied zu TLS 1.3)
Ein genereller Unterschied ist noch TLS 1.3 und TLS1.2, ältere Versionen sollte man eh ausschliessen.
Bei TLS 1.3 gibt es einen neuen Aufbau der Cipher Suites, da Key Agreement und Server Authentication entkoppelt wurden.
Nach RFC 8446 (TLS 1.3)
Client Server Key ^ ClientHello Exch | + key_share* | + signature_algorithms* | + psk_key_exchange_modes* v + pre_shared_key* --------> ServerHello ^ Key + key_share* | Exch + pre_shared_key* v {EncryptedExtensions} ^ Server {CertificateRequest*} v Params {Certificate*} ^ {CertificateVerify*} | Auth {Finished} v <-------- [Application Data*] ^ {Certificate*} Auth | {CertificateVerify*} v {Finished} --------> [Application Data] <-------> [Application Data] + Indicates noteworthy extensions sent in the previously noted message. * Indicates optional or situation-dependent messages/extensions that are not always sent. {} Indicates messages protected using keys derived from a [sender]_handshake_traffic_secret. [] Indicates messages protected using keys derived from [sender]_application_traffic_secret_N.
Der Key Exchange findet nicht mehr im Client Hello und Server Hello statt, sondern in der
Cryptographic Negotiation. Hier werden nur noch die symmetrischen Algorithmen ausgehandelt.
Im Vergleich zum RFC 5246 (TLS 1.2)
Client Server ClientHello client version (protocol version) random number cipher suite list Compression method [Session ID] --------> ServerHello Certificate* ServerKeyExchange* CertificateRequest* <-------- ServerHelloDone Certificate* ClientKeyExchange CertificateVerify* [ChangeCipherSpec] Finished --------> [ChangeCipherSpec] <-------- Finished Application Data <-------> Application Data
Perfect Forward Secrecy (DSA im Unterschied zu RSA)
Mit Perfect Forward Secrecy, sicherlich eins der wichtigeren Kriterien, damit nicht aufgezeichnete Daten im Nachhinein noch geknackt werden können, ist auch die langfristige Sicherheit gewährleistet. Das heisst die Verschlüsselung des Session Keys ist nicht nur vom Private Key abhängig und wird regelmässig aktuell. Dazu müssten wir mal wieder in die Mathematik abtauchen.
Vielleicht ein kleines vereinfachtes Beispiel anhand von Diffie-Hellman-Merkle:
Da rechnen wir:
p=47, g ist 5 und das i, als Index, durchläuft alle natürlichen Zahlen ab Null. Alice wählt irgendein i und berechnet a, das Bob erhält, das geht fix. Wenn Bob a=41 bekommt, welches i hat dann Alice verwendet? Wer das schnell für Zahlen mit rund 350 Dezimalstellen oder 2048 Bit herausbekommt, der hat das DLP – diskrete Logarithmus Problem geknackt und stellt damit Diffie-Hellman-Merkle, Elgamal, DSA (standartisierter El-Gamal), ECC in Frage.
Zur Anschaulichkeit mal die gesamte zyklishe Gruppe.
Die Anordnung des a ist hier scheinbar zufällig und deshalb kann man nicht so einfach von a auf das verwendete i schliessen. Darauf basiert die Sicherheit bei den genannten Verfahren im Vergleich zu RSA. Dort ist es die Primfaktorenzerlegung.
Wer die p,q herausfindet, die n ergaben, knackt RSA. Gern hier noch mal nachlesen.
Elliptische Kurven
Bei elliptischen Kurven ist es auch ein DLP was gelöst werden muss, um ECC mathematisch zu brechen. Die Berechnung der Elemente der zyklischen Gruppe ist noch etwas komplizierter. Die Punkte (Tupel) liegen dann auf einer dieser Kurven und daher der Name.
Das letzte «E» beim ECDHE oder DHE ist auch zu bevorzugen, da es zufällige Schlüssel garantiert. Diese sollten heute grösser 256 Bit bei elliptischen Kurven und 2048 Bit bei RSA sein. Zu der Anzahl der Bits hatte ich mich ja schon im letzten Jahr ausgelassen: Key length versus life time.
Nun kann man sich über elliptische Kurven und RSA streiten, aber ECC benötigt kürzere Schlüssel und wird, da es performanter ist, gern bei den mobilen Geräten verwendet.
Der Aufbau der Cypher Suiten
Nochmal zum generellen Aufbau: Auf der Website www.ciphersuite.info/cs/ findet man gute Auflistungen, alternative Namen und Erläuterungen.
Aufbau TLS 1.3
TLS_AES_256_GCM_SHA384
Wie oben beschrieben hier und Message Authentication.
Aufbau TLS 1.2
Example: TLS_ECDHE_ECDSA_AES_256_GCM_SHA256
Protocol:
Transport Layer Security (TLS)
Key Exchange:
Elliptic Curve Diffie-Hellman Ephemeral (ECDHE)
Authentication:
Elliptic Curve Digital Signature Algorithm (ECDSA)
Encryption:
Advanced Encryption Standard with 256bit Key in Galois/Counter Mode (AES 256 GCM)
Hash:
Secure Hash Algorithm 256 (SHA256)
Schlüsselvereinbahrung
ECDHE – Asymmetrischer Key Exchange nach dem Diffie-Hellman Protocol basierend auf ECC, um die Session Key Sicherheit zu gewährleisten, Elliptic Curve Diffie Hellman Ephemeral.
Ephemeral unterstreicht hier die Flüchtigkeit der temporären Keys.
Authentication
ECDSA (Signing)
Asymmetrische Authentifizierung des Servers. Der Digital Signature Algorithm ist die standartisierte Variante des Elgamal für Signaturen auch hier basierend auf dem DLP der elliptischen Kurven.
Encryption of Data
AES_256_GCM
Symmetric Encryption der Message Blocks nach AES.
GCM gewährleistet, das nicht Daten-Blöcke ausgetauscht werden können und so die Informationen manipuliert werden.
wikipedia.org/wiki/Galois/Counter_Mode
Message Authentication
Mit den Hash Verfahren wird dann die Authentizität der einzelnen Nachricht bestätigt und die Integrität der Nachricht, aber nicht non-reputation, da hier meist symmetrische Verfahren die Grundlage sind.
Z.B. bei TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 sehen wir jetzt schnell, dass es ein TLS1.2 Cipher mit dem gleichen Key Exchange aber RSA für die Authentifizierung des Servers verwendet wird. Das wird wohl am meisten bei Zertifikaten mit RSA Public Key der Fall sein. SHA384 hat dann mehr Bits aber ist immer noch SHA2.
In der Praxis
Lange Rede kurzer Sinn: Wir machen es so sicher wie möglich, ohne dass wir notwendige Benutzergruppen ausschliessen oder zu grosse Hürden aufbauen. Frei nach Ed Snowden «Encryption works, …», wenn richtig implementiert, deshalb ist die richtige Wahl der Cipher Suites so wichtig. Nicht nur https und TLS – sondern richtig:
-
- DHE mit dem E für Ephemeral – kurzzeitige flüchtige Keys
- AES mit 128 oder 256 Bit – aktuell noch OK, Blowfish, Two-Fish auch OK
- SHA-2 (SHA-256, SHA384 oder SHA-512), sicher kein SHA-1 oder MD5 mehr
- Gern auch schon TLS 1.3 und SHA-3 wenn irgendwie verfügbar
- Bei ECC würde ich auch nicht mehr unter P-256 starten, bei P-521 würde ich gut testen
Sehr hilfreich für die Beurteilung ist immer eine dritte unabhängige Meinung. Das erledigt
ssllabs.com/ssltest für uns.
Wertvoll in den SSLLabs-Reports sind hier nicht nur die Hinweise, welche Cipher Suiten verwendet werden sollen und welche nicht, sondern auch das Agent Probing im Abschnitt Handshake Simulation.
mephisto
mephisto ist Security-Spezialist und langjähriger Mitarbeiter bei AVANTEC. Am liebsten beschäftigt er sich mit Authentication, Encryption und echtem Schutz gegen Malware. mephisto streitet sich gern, um die Lösungen richtig zu verstehen, denn: "Ich bin ein Teil von jener Kraft, die stets das Böse will und stets das Gute schafft."
Ich mag die Art, wie du es beschreibst. Perfekt!
P-256 ist nicht sicher. Siehe https://safecurves.cr.yp.to/. Bzgl. ECC besonders vorsichig sein, weil beim Design gut eine Hintertuer eingebaut werden kann. Besser RSA, auch wenn langsamer, oder wenn schon ECC, dann Curve25519, weil diese eine Hintertuer besonders gut / transparent ausschliesst.
Hi Mortmann,
Danke für den Input. Wnn man das so klar entscheiden und aus den Bezeichnungen herauslesen könnte.
https://security.stackexchange.com/questions/158676/four-ecdsa-p256-csps-are-available-in-windows-which-one-should-i-use
– Beispiel: Windows ECDH_P256, ECDH_P384, ECDH_P521
Das hier P256 – Curve25519 sein soll, findet man, aber da bin ich vorsichtig.
„Curve25519 (the only secure curve in windows that I am aware of, RFC draft-ietf-tls-curve25519, added support in Windows 10, version 1607 and Windows Server 2016)“
Und ganz klar, wir sind froh, wenn die Artikel etwas leben und wir so wichtige Informationen / Argumente für alle teilen können.
Hier noch ein Announcement von RSA für Januar 2022
https://community.rsa.com/t5/rsa-adaptive-authentication/rsa-announces-support-for-strong-ciphers-only-as-of-january-2022/ta-p/610116?emcs_t=S2h8ZW1haWx8Ym9hcmRfc3Vic2NyaXB0aW9ufEtQNDFSSUJBOEpXM0VXfDYxMDExNnxTVUJTQ1JJUFRJT05TfGhL
TLS 1.3 TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384
TLS 1.2 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
In Windows 2022 tut sich was – TLS 1.3 kommt
https://docs.microsoft.com/en-us/windows/win32/secauthn/cipher-suites-in-schannel