Piszę system VPN, który szyfruje (AES256) jego ruch w sieci (po co pisać własne, skoro 1000 000 innych już tam jest? Cóż, mój jest specjalny do konkretnego zadania, którego żaden inny nie pasuje).
Zasadniczo chcę przebiec obok ciebie, aby upewnić się, że robię to w odpowiedniej kolejności.
W tej chwili pakiety są po prostu szyfrowane przed wysłaniem, ale chcę dodać do nich pewien poziom kompresji, aby nieco zoptymalizować przesyłanie danych. Nie ciężka kompresja - nie chcę cały czas maksymalizować procesora, ale chcę się upewnić, że kompresja będzie tak wydajna, jak to możliwe.
Więc myślę, że powinienem kompresować pakiety przed szyfrowaniem, ponieważ pakiet nieszyfrowany będzie kompresował się lepiej niż pakiet zaszyfrowany? Albo na odwrót?
Prawdopodobnie będę używał zlib do kompresji.
Przeczytaj więcej na blogu Super User .
źródło
Odpowiedzi:
Jeśli szyfrowanie jest wykonane poprawnie, wynikiem są w zasadzie losowe dane. Większość schematów kompresji polega na znajdowaniu w danych wzorców, które można w jakiś sposób rozłożyć na czynniki, a dzięki szyfrowaniu nie ma ich obecnie; dane są całkowicie nieściśliwe.
Kompresuj przed zaszyfrowaniem.
źródło
Kompresuj przed szyfrowaniem. Skompresowane dane mogą się znacznie różnić w przypadku niewielkich zmian w danych źródłowych, co bardzo utrudnia przeprowadzenie różnicowej kryptoanalizy.
Ponadto, jak zauważa Mr.Alpha, jeśli najpierw zaszyfrujesz, wynik jest bardzo trudny do skompresowania.
źródło
Nawet jeśli zależy to od konkretnego przypadku użycia, radziłbym Encrypt-then-Compress. W przeciwnym razie osoba atakująca może wyciec informacje z liczby zaszyfrowanych bloków.
Zakładamy, że użytkownik wysyła wiadomość na serwer i atakujący z możliwością dołączenia tekstu do wiadomości użytkownika przed wysłaniem (np. Przez javascript). Użytkownik chce wysłać pewne sensowne dane na serwer, a atakujący chce je uzyskać. Może więc spróbować dołączyć różne wiadomości do danych wysyłanych przez użytkownika na serwer. Następnie użytkownik kompresuje swoją wiadomość i dołączony tekst od atakującego. Zakładamy kompresję DEFLATE LZ77, więc funkcja zastępuje te same informacje wskaźnikiem do pierwszego pojawienia się. Jeśli więc osoba atakująca może odtworzyć zwykły tekst dziury, funkcja kompresji zmniejsza rozmiar zwykłego tekstu do oryginalnego rozmiaru i wskaźnika. Po szyfrowaniu atakujący może policzyć liczbę bloków szyfrów, dzięki czemu może zobaczyć, czy jego dołączone dane były takie same, jak dane wysłane przez użytkownika na serwer. Nawet jeśli ta sprawa wydaje się nieco skonstruowana, jest to poważny problem bezpieczeństwa w TLS. Pomysł ten jest wykorzystywany przez atak o nazwie CRIME do wycieku plików cookie w połączeniu TLS w celu kradzieży sesji.
źródło: http://www.ekoparty.org/archive/2012/CRIME_ekoparty2012.pdf
źródło
Moim zdaniem, kiedy kompresujesz komunikat, wyświetlasz go do niższego wymiaru, a zatem jest mniej bitów, co oznacza, że skompresowany komunikat (zakładając bezstratną kompresję) zawiera te same informacje w mniejszej liczbie bitów (te, których się pozbyłeś, były zbędne! ) Więc masz więcej informacji na bit, a co za tym idzie więcej entropii na bit, ale taką samą całkowitą entropię, jak poprzednio, gdy wiadomość nie była kompresowana. Teraz losowość to kolejna sprawa i właśnie tam wzorce kompresji mogą rzucić klucz małpki.
źródło
Kompresję należy wykonać przed szyfrowaniem. użytkownik nie chce tracić czasu na przesyłanie danych, ale musi to zrobić natychmiast, bez marnowania czasu.
źródło
Kompresja przed szyfrowaniem, jak wskazano wcześniej. Kompresja szuka struktury, którą może skompresować. Szyfrowanie szyfruje dane, aby uniknąć wykrycia struktury. Kompresując najpierw, znacznie bardziej prawdopodobne jest, że będziesz mieć mniejszy plik, a tym samym mniejszą ładowność do przesłania. Szyfrowanie wykona swoje zadanie bez względu na to, czy jest skompresowane czy nie, i, jak już wspomniano wcześniej, prawdopodobnie trudniej będzie przeprowadzić różnicową kryptoanalizę w skompresowanym pliku.
źródło
Kompresja zmniejsza entropię informacji. Maksymalna kompresja powoduje, że entropia jest minimalna. Dla doskonale zaszyfrowanych danych (szumów) maksymalna i minimalna entropia jest taka sama.
źródło