Tag Archives: crypto

Filesystem cifrati (parte 2)

Su un PC con CPU Intel i7-4790K (dotata di accelerazione hardware per l’algoritmo di cifratura aes), 16GB di RAM ed hard disk Seagate Barracuda 7200 da 500GB il supporto per la cifratura integrato nel filesystem ext4 è stato quello che si è comportato meglio in assoluto, con velocità in scrittura praticamente identiche a quelle di ext4 con la cifratura disabilitata. dm-crypt/LUKS è stato più veloce di ZFS con file sotto ai 5 GB. gocryptfs come prevedibile, in quanto strumento user-space, è stato il filesystem più lento tra i 4.

Dettagli del test

Sono state create 3 partizioni sul disco:

  • una formattata con ext4 (con due cartelle da cifrare rispettivamente con FScrypt e gocryptfs),
  • un volume dm-crypt/LUKS formattato in ext4
    # cryptsetup luksFormat --cipher aes-xts-plain64 --key-size 512 --hash sha512 --iter-time 5000 /dev/sdc2
    # cryptsetup open /dev/sdc2 lukspart

    # mkfs.ext4 /dev/mapper/lukspart
  • un pool ZFS col dataset cifrato
    zpool create tank /dev/sdc3
    zfs create -o encryption=aes-256-gcm -o keyformat=passphrase -o keylocation=prompt tank/encrypted_data
    zfs load-key tank/encrypted_data
    zfs mount tank/encrypted_data

Ho generato con dd 3 file rispettivamente da 1GB, 5GB e 10GB contenenti bit casuali

dd if=/dev/urandom of=testfile1G bs=1G count=1 oflag=direct
dd if=/dev/urandom of=testfile5G bs=1M count=5120 oflag=direct
dd if=/dev/urandom of=testfile10G bs=2M count=5120 oflag=direct

Con rsync ho misurato la velocità di trasferimento di questi file nelle varie partizioni o directory cifrate e per confronto anche con la semplice copia in una partizione ext4 non cifrata. Dopo ogni copia, per pulire la cache ho lanciato il comando “echo 3 > /proc/sys/vm/drop_caches”

time rsync --progress testfile1G /mnt/filesystemcifrato
time rsync --progress testfile5G /mnt/filesystemcifrato
time rsync --progress testfile10G /mnt/filesystemcifrato

Velocità in lettura

Per completezza ho misurato anche le velocità di lettura col comando:

time dd if=testfile5G of=/dev/null bs=1G count=1