Dlaczego wyniki testów porównawczych Truecrypt i cryptsetup (LUKS) są tak różne?

10

Chcę zaszyfrować część mojego dysku twardego. Ale wcześniej chciałem przetestować inny dostępny algorytm, zastanawiając się, czy powinienem wybrać aes-xts-256czy aes-xts-512.

Uwaga: nie mam aesakceleracji sprzętowej. Testy zostały powtórzone wiele razy bez większych zmian. Chciałbym wyraźnie powiedzieć, że te testy porównawcze są ważne tylko na moim komputerze (Debian, duet Core 2). To nie jest zamierzone pełne porównanie LUKS-TrueCrypt.

TL; DR: przejdź do części 4


1- Cryptsetup

Pobrałem więc, cryptsetup v1.6.0aby skorzystać z nowego cryptsetup benchmarkpolecenia.

Komenda

$cryptsetup benchmark

Wyniki

 #  Algorithm | Key | Encryption |  Decryption
     aes-cbc   128b   128,2 MiB/s   157,2 MiB/s
 serpent-cbc   128b    49,6 MiB/s    57,7 MiB/s
 twofish-cbc   128b   138,0 MiB/s   183,8 MiB/s
     aes-cbc   256b    97,5 MiB/s   121,9 MiB/s
 serpent-cbc   256b    51,8 MiB/s    57,7 MiB/s
 twofish-cbc   256b   139,0 MiB/s   183,8 MiB/s
     aes-xts   256b   156,4 MiB/s   157,8 MiB/s
 serpent-xts   256b    55,7 MiB/s    58,7 MiB/s
 twofish-xts   256b   161,5 MiB/s   165,9 MiB/s
     aes-xts   512b   120,5 MiB/s   120,9 MiB/s
 serpent-xts   512b    55,7 MiB/s    58,5 MiB/s
 twofish-xts   512b   161,5 MiB/s   165,3 MiB/s

Myśli

  • W cbctrybie serpentzaskakująco szybko odszyfrowuje!
  • W xtstrybie serpentjest zdecydowanie najszybszy.
  • Rozmiar klucza wydaje się nie mieć prawie żadnego zauważalnego wpływu .serpent twofish
  • aes nie zachowuje się dobrze po zwiększeniu rozmiaru klucza.

Aktualizacje poza maszyną wirtualną


2 - TrueCrypt

Byłem naprawdę zaskoczony, ponieważ aeswiadomo, że jest najszybszy (nawet bez przyspieszenia sprzętowego). Pobrałem więc, TrueCryptaby dokładnie sprawdzić te wyniki. TrueCryptużywa xtsdomyślnie trybu, więc zakładam, że używa go również w testach porównawczych.

metoda

  1. Narzędzia> Benchmark
  2. Wybierz dowolny rozmiar bufora (tutaj, 5 MB)
  3. Kliknij „Benchmark”

Wyniki

 #  Algorithm | Encryption |  Decryption
         AES     106 MB/s      107 MB/s
     Twofish      78 MB/s       76 MB/s
     Serpent      41 MB/s       42 MB/s

Myśli

Wyniki te odpowiadają znacznie więcej niż oczekiwano, ale nie pasują dobrze do cryptsetupwyników.


3- Ogólne myśli

  • cryptsetupzapewnia lepszą ogólną wydajność niż TrueCryptw tym przypadku. Można to wyjaśnić w następujący sposób:
    • cryptsetupzostał skompilowany w moim systemie za pomocą procedur optymalizacji kompilatora, podczas gdy TrueCryptzostał już skompilowany w sposób ogólny;
    • AFAIK cryptsetupużywa modułów TrueCryptkryptograficznych przestrzeni jądra, podczas gdy używa procedur kryptograficznych przestrzeni użytkownika.
  • Nie potrafię jednak wyjaśnić, dlaczego serpent-xts-512wydaje się, że jest to właściwy sposób, cryptsetuppodczas aes-xtsgdy jedyny warty użycia szyfr.

4-pytanie

cryptsetupi TrueCryptpodać całkowicie różne jakościowe (względne prędkości szyfrowania) i ilościowe (rzeczywiste prędkości każdego szyfru) wyniki testów porównawczych w pamięci RAM.

  • Czy to już zauważyłeś?
  • Czy powinienem ufać cryptsetupi używać serpent-xts-512szyfru dla szybkości?

źródło

Odpowiedzi:

5

Nie masz akceleracji sprzętowej AES i przeprowadzałeś testy na maszynie wirtualnej. Jest mało prawdopodobne, aby wyniki testu odzwierciedlały rzeczywiste wyniki, ponieważ prędkości szyfrowania / deszyfrowania w dużej mierze zależą od bieżącego obciążenia procesora i dysku. Najlepszym rozwiązaniem jest utworzenie dwóch niezależnych partycji Truecrypt i wykonanie ręcznych testów porównawczych poprzez skopiowanie dużych plików do / z każdej partycji.

LUKS i Truecrypt mają również nieco inne implementacje i, jak powiedziałeś, „te testy są ważne tylko na moim komputerze”. Musisz faktycznie przetestować oba w systemie z rzeczywistymi transferami plików, aby ustalić prawdziwą wydajność.


Jeśli chodzi o różnice, Truecrypt używa FUSE do implementacji systemu plików przestrzeni użytkownika, podczas gdy LUKS jest zwykle wykonywany w rzeczywistym jądrze. Z tego powodu jest prawdopodobne, że uzyskasz lepszą przepustowość w systemie Linux za pomocą LUKS / dm-crypt / cryptsetup w przeciwieństwie do Truecrypt, chociaż wybór opcji zależy od wymagań twojego szyfrowania (np. Partycje Truecrypt można przenosić między operacjami systemy w razie potrzeby).

Przełom
źródło
Dziwne: próbowałem bezpośrednio w moim systemie i zasadniczo wszystko stoi, z wyjątkiem tych, serpentktóre stały się znacznie wolniejsze. Problem z wężem został rozwiązany. Twofishjest jeszcze szybsza niż aesw cryptsetup i wolniej TrueCrypt. I wcale nie mam aesakceleracji sprzętowej ... to nie jest sprawa VM ...
Zaktualizowałem wyniki.
@Gael cryptsetupbędzie szybszy niż TrueCryptpodane te same algorytmy szyfrowania, ponieważ TrueCryptdziała w FUSE(system plików przestrzeni użytkownika), podczas gdy cryptsetupużywa LUKS, który jest modułem jądra. Wspomniałem o maszynie wirtualnej, jakbyś uruchamiał inne programy w systemie operacyjnym hosta (nawet zadania w tle), to wpłynęłoby na wyniki twoich testów porównawczych.
Przełom
1

Jądro Linux ma zoptymalizowane pod kątem SSE2 i AVX moduły Serpent w celu przyspieszenia równoległych obciążeń (takich jak deszyfrowanie CBC i kodowanie i dekodowanie XTS).

Wydajność Serpent w odszyfrowywaniu CBC i XTS z załadowanymi modułami powinna być prawie na tym samym poziomie co oprogramowanie AES i Twofish (nieco szybsze lub wolniejsze w zależności od konkretnego modelu procesora).

użytkownik215314
źródło
0

Zauważ też, że kod SSE2 uruchamiany przez jądro gościa na niektórych maszynach wirtualnych jest znacznie wolniejszy niż na jądrze hosta. Doświadczyłem tego z Oracle VirtualBox. Dlatego wyniki dla Serpent na VM mogą niekoniecznie korelować z oczekiwaną wydajnością na rzeczywistym hoście.

użytkownik215314
źródło