Mengapa hasil benchmarking Truecrypt and cryptsetup (LUKS) sangat berbeda?

10

Saya ingin mengenkripsi bagian dari HDD saya. Tetapi sebelum itu saya ingin membandingkan berbagai algoritma yang tersedia bertanya-tanya apakah saya harus memilih aes-xts-256atau aes-xts-512.

Catatan: Saya tidak memiliki aesakselerasi perangkat keras. Tolok ukur diulang beberapa kali tanpa banyak perubahan. Saya ingin menyatakan dengan jelas bahwa tolok ukur ini hanya berlaku di komputer saya (Debian, core 2 duo). Ini tidak dimaksudkan sebagai perbandingan LUKS-TrueCrypt yang lengkap.

TL; DR: pergi ke bagian 4


1- Cryptsetup

Jadi saya mengunduh cryptsetup v1.6.0untuk menggunakan cryptsetup benchmarkperintah baru .

Perintah

$cryptsetup benchmark

Hasil

 #  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

Pikiran

  • Dalam cbcmode, serpentsecara mengejutkan cepat mendekripsi!
  • Dalam xtsmode, serpentjelas yang tercepat.
  • Ukuran kunci tampaknya hampir tidak memiliki efek nyata .serpent twofish
  • aes tidak berperilaku baik ketika ukuran kunci ditingkatkan.

Pembaruan dari VM


2- TrueCrypt

Saya sangat terkejut karena aesdikenal sebagai yang tercepat (bahkan tanpa akselerasi perangkat keras). Jadi saya mengunduh TrueCryptuntuk memeriksa ulang hasil ini. TrueCryptmenggunakan xtsmode secara default jadi saya menganggapnya juga menggunakannya dalam tolok ukurnya.

metode

  1. Alat> Tolok Ukur
  2. Pilih ukuran buffer (di sini, 5MB)
  3. Klik pada "Tolok Ukur"

Hasil

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

Pikiran

Hasil ini lebih sesuai dengan apa yang diharapkan tetapi tidak cocok dengan cryptsetuphasil.


3- Pikiran umum

  • cryptsetupmemberikan kinerja umum yang lebih baik daripada TrueCryptdalam hal ini. Ini bisa dijelaskan dengan cara berikut:
    • cryptsetupdikompilasi di sistem saya dengan rutinisasi optimasi kompiler sementara TrueCryptsudah dikompilasi dengan cara yang umum;
    • AFAIK cryptsetupmenggunakan modul kernelspace crypto sambil TrueCryptmenggunakan rutin pengguna ruang crypto.
  • Namun, saya tidak bisa menjelaskan mengapa serpent-xts-512tampaknya menjadi cara untuk pergi cryptsetupsementara aes-xtssatu-satunya cipher layak digunakan.

4 - Pertanyaan

cryptsetupdan TrueCryptmemberikan perbedaan kualitatif (kecepatan cipher relatif) dan kuantitatif (kecepatan aktual dari masing-masing cipher) yang sama sekali berbeda, menghasilkan tolok ukur dalam-RAM.

  • Apakah itu sesuatu yang sudah Anda perhatikan?
  • Haruskah saya percaya cryptsetupdan menggunakan serpent-xts-512sandi untuk kecepatan?

sumber

Jawaban:

5

Anda tidak memiliki akselerasi perangkat keras AES, dan menjalankan tes di mesin virtual. Tidak mungkin bahwa hasil pengujian Anda akan mencerminkan hasil dunia nyata, karena kecepatan enkripsi / dekripsi sangat bergantung pada CPU & beban disk saat ini. Taruhan terbaik Anda adalah membuat dua partisi Truecrypt independen, dan melakukan benchmark manual dengan menyalin beberapa file besar ke / dari setiap partisi.

LUKS dan Truecrypt juga memiliki implementasi yang sedikit berbeda, dan seperti yang Anda katakan, "tolok ukur ini hanya berlaku di komputer saya". Anda harus benar-benar menguji keduanya pada sistem Anda dengan transfer file aktual untuk menentukan kinerja yang sebenarnya.


Adapun perbedaannya, Truecrypt menggunakan FUSE untuk mengimplementasikan filesystem userspace, sedangkan LUKS biasanya dilakukan di kernel aktual. Untuk alasan ini, kemungkinan Anda akan mendapatkan throughput yang lebih baik di sistem Linux menggunakan LUKS / dm-crypt / cryptsetup sebagai lawan Truecrypt, meskipun opsi mana yang Anda pilih tergantung pada persyaratan enkripsi Anda (misalnya partisi Truecrypt dapat ditransfer antara operasi sistem jika diperlukan).

Penerobosan
sumber
Aneh: Saya mencoba langsung di sistem saya dan pada dasarnya semuanya berdiri kecuali serpentyang menjadi jauh lebih lambat. Jadi masalah dengan ular terpecahkan. Twofishmasih lebih cepat dari aespada cryptsetup dan lebih lambat TrueCrypt. Dan saya tidak punya aesakselerasi perangkat keras sama sekali ... ini bukan hal VM ...
Saya memperbarui hasilnya.
@Gael cryptsetupakan lebih cepat daripada yang TrueCryptdiberikan algoritma enkripsi yang sama sejak TrueCryptberjalan di bawah FUSE(sistem file pengguna-ruang), sedangkan cryptsetupmenggunakan LUKS, yang merupakan modul kernel. Saya menyebutkan mesin virtual seolah-olah Anda menjalankan program lain di bawah OS host Anda (bahkan tugas latar belakang), itu akan mempengaruhi hasil tolok ukur Anda.
Terobosan
1

Kernel Linux memiliki modul Serpent SSE2 dan AVX yang dioptimalkan untuk mempercepat beban kerja yang dapat diparalelkan (seperti dekripsi CBC dan XTS enc & dec).

Performa Ular dalam dekripsi CBC dan XTS dengan modul yang dimuat harus mendekati tingkat yang sama dengan perangkat lunak AES dan Twofish (sedikit lebih cepat atau lebih lambat tergantung pada model CPU Anda yang tepat).

pengguna215314
sumber
0

Perhatikan juga bahwa kode SSE2 dijalankan oleh kernel tamu di beberapa VM jauh lebih lambat dari pada kernel host. Saya telah mengalami ini dengan Oracle VirtualBox. Jadi hasil untuk Serpent on VM mungkin tidak selalu berkorelasi dengan kinerja yang diharapkan pada host yang sebenarnya.

pengguna215314
sumber