Ich schreibe ein VPN-System, das seinen Datenverkehr über das Netz verschlüsselt (AES256).
Grundsätzlich möchte ich meine Gedanken an Ihnen vorbeiziehen lassen, um sicherzustellen, dass ich dies in der richtigen Reihenfolge tue.
Momentan werden Pakete nur vor dem Versenden verschlüsselt, aber ich möchte ihnen eine gewisse Komprimierungsstufe hinzufügen, um den Datentransfer ein wenig zu optimieren. Keine starke Komprimierung - Ich möchte nicht die ganze Zeit die CPU auslasten, aber ich möchte sicherstellen, dass die Komprimierung so effizient wie möglich ist.
Meiner Meinung nach sollte ich die Pakete vor dem Verschlüsseln komprimieren, da ein unverschlüsseltes Paket besser komprimiert wird als ein verschlüsseltes. Oder umgekehrt?
Ich werde wahrscheinlich Zlib für die Komprimierung verwenden.
Lesen Sie mehr im Super User Blog .
quelle
Antworten:
Wenn die Verschlüsselung richtig durchgeführt wird, sind die Ergebnisse im Grunde zufällige Daten. Die meisten Komprimierungsschemata funktionieren, indem Muster in Ihren Daten gefunden werden, die auf irgendeine Weise ausgeschlossen werden können, und dank der Verschlüsselung gibt es jetzt keine. Die Daten sind vollständig inkomprimierbar.
Komprimieren Sie, bevor Sie verschlüsseln.
quelle
Vor der Verschlüsselung komprimieren. Komprimierte Daten können bei kleinen Änderungen der Quelldaten erheblich variieren, was die Durchführung einer differenziellen Kryptoanalyse sehr schwierig macht.
Wie Mr.Alpha hervorhebt, ist das Ergebnis sehr schwer zu komprimieren, wenn Sie es zuerst verschlüsseln.
quelle
Auch wenn es vom konkreten Anwendungsfall abhängt, würde ich Encrypt-then-Compress empfehlen. Andernfalls könnte ein Angreifer Informationen aus der Anzahl der verschlüsselten Blöcke verlieren.
Wir gehen davon aus, dass ein Benutzer eine Nachricht an den Server sendet und ein Angreifer die Möglichkeit hat, vor dem Senden Text an die Nachricht des Benutzers anzuhängen (z. B. über Javascript). Der Benutzer möchte einige sinnvolle Daten an den Server senden, und der Angreifer möchte diese Daten abrufen. So kann er versuchen, verschiedene Nachrichten an die Daten anzuhängen, die der Benutzer an den Server sendet. Anschließend komprimiert der Benutzer seine Nachricht und den vom Angreifer angehängten Text. Wir gehen von einer DEFLATE LZ77-Komprimierung aus, daher ersetzt die Funktion dieselben Informationen durch einen Zeiger auf das erste Erscheinungsbild. Wenn der Angreifer also den gesamten Klartext reproduzieren kann, reduziert die Komprimierungsfunktion die Größe des Klartextes auf die ursprüngliche Größe und einen Zeiger. Und nach der Verschlüsselung kann der Angreifer die Anzahl der Chiffrierblöcke zählen, um festzustellen, ob seine angehängten Daten mit den Daten übereinstimmen, die der Benutzer an den Server gesendet hat. Auch wenn dieser Fall ein wenig konstruiert klingt, handelt es sich bei TLS um ein ernstes Sicherheitsproblem. Diese Idee wird von einem Angriff namens CRIME verwendet, um Cookies in einer TLS-Verbindung zu lecken und Sitzungen zu stehlen.
Quelle: http://www.ekoparty.org/archive/2012/CRIME_ekoparty2012.pdf
quelle
Wenn Sie eine Nachricht komprimieren, projizieren Sie sie in eine niedrigere Dimension, sodass weniger Bits vorhanden sind. Dies bedeutet, dass die komprimierte Nachricht (unter der Annahme einer verlustfreien Komprimierung) dieselben Informationen in weniger Bits enthält (diejenigen, die Sie entfernt haben, waren redundant). ) Sie haben also mehr Informationen pro Bit und folglich mehr Entropie pro Bit, aber die gleiche Gesamtentropie wie zuvor, als die Nachricht nicht komprimiert wurde. Zufälligkeit ist nun eine andere Sache, und hier können die Muster bei der Komprimierung einen Schraubenschlüssel werfen.
quelle
Die Komprimierung sollte vor der Verschlüsselung erfolgen. Ein Benutzer möchte keine Zeit damit verbringen, auf die Übertragung von Daten zu warten, sondern muss diese sofort ausführen, ohne Zeit zu verlieren.
quelle
Komprimierung vor der Verschlüsselung, wie bereits erwähnt. Die Komprimierung sucht nach einer Struktur, die komprimiert werden kann. Die Verschlüsselung verschlüsselt die Daten, um zu verhindern, dass Strukturen erkannt werden. Wenn Sie zuerst komprimieren, ist die Wahrscheinlichkeit, dass Sie eine kleinere Datei haben und somit weniger Nutzdaten übertragen müssen, sehr viel höher. Die Verschlüsselung wird ihre Aufgabe unabhängig davon erfüllen, ob sie komprimiert ist oder nicht. Wie bereits erwähnt, ist es wahrscheinlich schwieriger, eine differenzielle Kryptoanalyse für eine komprimierte Datei durchzuführen.
quelle
Komprimierung reduziert die Informationsentropie. Maximale Komprimierung minimiert die Entropie. Für perfekt verschlüsselte Daten (Rauschen) ist die maximale und minimale Entropie gleich.
quelle