Wie viel Overhead verursacht SSL?

168

Ich weiß, dass es keine eindeutige Antwort gibt, aber gibt es eine generische Näherungsschätzung für die Größenordnung des Verschlüsselungsaufwands von SSL im Vergleich zur unverschlüsselten Socket-Kommunikation? Ich spreche nur über die Kommunikationsverarbeitung und die Verkabelungszeit, ohne die Verarbeitung auf Anwendungsebene.

Aktualisieren

Es gibt eine Frage zu HTTPS im Vergleich zu HTTP , aber ich bin daran interessiert, im Stapel tiefer zu schauen.

(I ersetzt den Begriff „Größenordnung“ Um Verwirrung zu vermeiden, ich war es , als informeller Jargon und nicht im formalen Sinn CompSci Natürlich , wenn ich. Hatte es formal gemeint, als ein echter Geek würde ich denken binär gewesen , anstatt Dezimal! ;-)

Aktualisieren

Angenommen, es handelt sich bei einer Anfrage im Kommentar um Nachrichten mit guter Größe (Bereich von 1 bis 10 KB) über dauerhafte Verbindungen. Der Verbindungsaufbau und der Paket-Overhead sind also keine wesentlichen Probleme.

joel.neely
quelle
Sie können sich diese ähnliche Frage ansehen .
Darin Dimitrov
1
Können Sie Ihre Anwendung etwas genauer charakterisieren? Stellt es zum Beispiel viele kurzlebige Verbindungen her? Wie groß ist eine einzelne Nachricht, wenn sie verbunden ist? (Vielleicht spülen Sie jeden Tastendruck mit Telnet über einen SSL-Tunnel oder kopieren 1-TB-Protokolldateien.)
erickson

Antworten:

178

Größenordnung: Null.

Mit anderen Worten, wenn Sie TLS hinzufügen, wird Ihr Durchsatz nicht halbiert oder ähnliches. Die Antworten auf die Frage "Duplizieren" konzentrieren sich stark auf die Anwendungsleistung und den Vergleich zum SSL-Overhead. Diese Frage schließt die Anwendungsverarbeitung ausdrücklich aus und versucht, nur Nicht-SSL mit SSL zu vergleichen. Während es sinnvoll ist, bei der Optimierung eine globale Sicht auf die Leistung zu haben, ist dies nicht das, was diese Frage stellt.

Der Hauptaufwand von SSL ist der Handshake. Hier findet die teure asymmetrische Kryptographie statt. Nach der Verhandlung werden relativ effiziente symmetrische Chiffren verwendet. Aus diesem Grund kann es sehr hilfreich sein, SSL-Sitzungen für Ihren HTTPS-Dienst zu aktivieren, bei dem viele Verbindungen hergestellt werden. Für eine langlebige Verbindung ist dieser "Endeffekt" nicht so bedeutend und Sitzungen sind nicht so nützlich.


Hier ist eine interessante Anekdote. Als Google Google Mail auf HTTPS umstellte, waren keine zusätzlichen Ressourcen erforderlich. Keine Netzwerkhardware, keine neuen Hosts. Die CPU-Auslastung wurde nur um ca. 1% erhöht.

erickson
quelle
6
Wie aktivieren Sie "SSL-Sitzungen für Ihren HTTPS-Dienst"? Was ist eine gute Ressource, um mehr darüber zu erfahren?
Justin Vincent
1
Das Aktivieren von SSL-Sitzungen ist serverspezifisch. Lesen Sie das Handbuch für Ihren Server.
Erickson
7
@Bart van Heukelom - Keep-Alive hilft dabei, einen Socket (und die SSL-Verbindung) länger offen zu halten, was hilft. Bei SSL-Sitzungen werden die ausgehandelten kryptografischen Parameter jedoch von Socket zu Socket "gespeichert". HTTP Keep-Alive wäre also nützlich, um eine einzelne Webseite mit dem referenzierten Inhalt zu laden, aber nach einigen Sekunden wird diese Verbindung geschlossen. Drei Minuten später, beispielsweise wenn eine andere Seite abgerufen wird, kann durch eine SSL-Sitzung die SSL-Verbindung wiederhergestellt werden, ohne den vollständigen Handshake zu wiederholen. Insbesondere kann der langsame Schlüsselaustausch mit Krypto mit öffentlichem Schlüssel übersprungen werden.
Erickson
2
@Tony Haben Sie Beispiele aus der Praxis, bei denen TLS mehr als ein paar Prozent Overhead verursacht? Meine Antwort ist so allgemein wie die Frage. Wenn Sie eine andere Einstellung haben, teilen Sie diese bitte mit.
Erickson
3
@ Tony Ich habe gesehen, dass einfache Sockets SSL-Sockets beim Schreiben von jeweils einem Byte um den Faktor 42 übertreffen, was der schlimmste Fall ist. Noch nie 250x gesehen. Ich habe ein umfangreiches Experiment über das Internet mit 1700 Datenpunkten durchgeführt, bei dem das allgemeine Ergebnis war, dass Klartext-Sockets nicht besser als dreimal so schnell wie SSL waren, wobei die Programmierung nicht ausgefeilter war als das Puffern und Löschen. JSSE, wahrscheinlich Java 5 angesichts des Datums des Experiments.
Marquis von Lorne
39

Ich zweite @erickson: Die reine Datenübertragungsgeschwindigkeitsstrafe ist vernachlässigbar. Moderne CPUs erreichen einen Krypto / AES-Durchsatz von mehreren hundert MBit / s. Wenn Sie sich also nicht auf einem System mit eingeschränkten Ressourcen (Mobiltelefon) befinden, ist TLS / SSL schnell genug, um Daten herumzuschleudern.

Beachten Sie jedoch, dass die Verschlüsselung das Caching und den Lastausgleich erheblich erschwert. Dies kann zu einem enormen Leistungsverlust führen.

Aber der Verbindungsaufbau ist für viele Anwendungen wirklich ein Show-Stopper. Bei Verbindungen mit geringer Bandbreite, hohem Paketverlust und hoher Latenz (mobiles Gerät auf dem Land) können die von TLS benötigten zusätzlichen Hin- und Rückflüge etwas Langsames zu etwas Unbrauchbarem machen.

Zum Beispiel mussten wir die Verschlüsselungsanforderungen für den Zugriff auf einige unserer internen Web-Apps fallen lassen - sie waren fast unbrauchbar, wenn sie aus China verwendet wurden.

max
quelle
20
Mit 4 Jahren Rückblick: China hat möglicherweise auch absichtlich den gesamten SSL / TLS-Verkehr durcheinander gebracht.
Max
3
Chinas Zensur des Internets und der Versuch, am Verkehr aller zu riechen, sind nicht gerade neu. Nach 4 Jahren würde man meinen, es sei die NSA MITMing auf dem Weg zu Ihrer Website.
Eugene Beresovsky
Der Schlüssel bei flockigen Verbindungen besteht darin, die Verschlüsselung einmal einzurichten und dann Neuverhandlungen zu vermeiden, sofern dies nicht wirklich erforderlich ist, und es beiden Seiten zu ermöglichen, ihre IP-Adressen jederzeit zu ändern, ohne ein Auge zu blinzeln. (OpenVPN unterstützt dies.) IT hilft, Fragmentierung zu ermöglichen, da die MTU sehr unzuverlässig und geradezu unehrlich sein kann.
Evi1M4chine
12

Angenommen, Sie zählen den Verbindungsaufbau nicht (wie in Ihrem Update angegeben), hängt dies stark von der gewählten Verschlüsselung ab. Der Netzwerk-Overhead (in Bezug auf die Bandbreite) ist vernachlässigbar. Der CPU-Overhead wird von der Kryptografie dominiert. Auf meinem mobilen Core i5 kann ich mit RC4 auf einem einzelnen Core etwa 250 MB pro Sekunde verschlüsseln. (RC4 ist das, was Sie für maximale Leistung wählen sollten.) AES ist langsamer und bietet "nur" etwa 50 MB / s. Wenn Sie also die richtigen Chiffren auswählen, wird es Ihnen nicht gelingen, einen einzelnen aktuellen Kern mit dem Krypto-Overhead zu beschäftigen, selbst wenn Sie eine voll ausgelastete 1-Gbit-Leitung haben. [ Bearbeiten : RC4 sollte nicht verwendet werden, da es nicht mehr sicher ist. Die Unterstützung von AES-Hardware ist mittlerweile in vielen CPUs vorhanden, wodurch die AES-Verschlüsselung auf solchen Plattformen sehr schnell ist.]

Der Verbindungsaufbau ist jedoch anders. Abhängig von der Implementierung (z. B. Unterstützung für TLS-Fehlstart) werden Roundtrips hinzugefügt, die zu spürbaren Verzögerungen führen können. Darüber hinaus findet beim ersten Verbindungsaufbau eine teure Krypto statt (die oben erwähnte CPU konnte nur 14 Verbindungen pro Kern und Sekunde akzeptieren, wenn Sie törichterweise 4096-Bit-Schlüssel und 100, wenn Sie 2048-Bit-Schlüssel verwenden). Bei nachfolgenden Verbindungen werden frühere Sitzungen häufig wiederverwendet, wodurch die teure Krypto vermieden wird.

Um es zusammenzufassen:

Übertragung bei hergestellter Verbindung:

  • Verzögerung: fast keine
  • CPU: vernachlässigbar
  • Bandbreite: vernachlässigbar

Erster Verbindungsaufbau:

  • Verspätung: zusätzliche Hin- und Rückfahrten
  • Bandbreite: mehrere Kilobyte (Zertifikate)
  • CPU auf Client: mittel
  • CPU auf Server: hoch

Nachfolgende Verbindungsaufbauten:

  • Verzögerung: zusätzliche Hin- und Rückfahrt (nicht sicher, ob eine oder mehrere umsetzungsabhängig sind)
  • Bandbreite: vernachlässigbar
  • CPU: fast keine
Jan Schejbal
quelle
Wichtiger Hinweis: Niemand sollte RC4 jemals wieder verwenden. Das Protokoll muss als fehlerhaft angesehen werden, und die RC4-Übertragung mit diesem Protokoll muss zumindest aus Sicherheitsgründen vor Spionageorganisationen als gleichwertig mit der unverschlüsselten Übertragung angesehen werden. Heutzutage wird so etwas wie chacha20-poly1305 aufgrund seiner Unabhängigkeit von solchen Organisationen dringend für die Massenverschlüsselung empfohlen.
Evi1M4chine