This short tutorial will guide you in encrypting a drive with
cryptsetup and LUKS scheme.
Before starting, if the device had previous data on it, it’s best to delete any filesystem signatures that may be on it. Assuming that the drive we operate is
/dev/sda you can use the following command to remove the signatures:
$ sudo wipefs --all /dev/sda --no-act
--no-act flag to actually modify the disk.
The next step is to actually format the drive using LUKS. This is done using the
$ sudo cryptsetup luksFormat --type=luks2 /dev/sda WARNING! ======== This will overwrite data on /dev/sda irrevocably. Are you sure? (Type 'yes' in capital letters): YES Enter passphrase for /dev/sda: Verify passphrase:
The command will prompt you to enter a passphrase for the encryption and should take a few seconds to complete.
The next step is to add an appropriate entry to
crypttab which will simplify starting the dm-crypt mapping later. Add the following line to
archive_crypt UUID=114d42e5-6aeb-4af0-8758-b4cc79dd1ba0 none luks,discard,noauto
where the UUID is obtained through
lsblk /dev/sda -o UUID or a similar command. The
archive_crypt is the name for the mapped device. It will appear as
/dev/mapper/archive_crypt when the device is mapped. The
none parameter specifies that no keyfile is used and the system should prompt for an encryption passphrase instead. The
noauto, means not to attempt to load the device automatically upon boot.
discard should be used if the underlying device is an SSD.
You can test everything works so far by opening and loading the LUKS device:
$ sudo cryptdisks_start archive_crypt
While the device is now encrypted, there is a possible leakage of metadata such as used blocks as an attacker can discern used vs unused blocks by examining the physical drive. This and other side-channel leaks can be mitigated by simply wiping the contents of the encrypted device.
$ openssl rand -hex 32 | openssl enc -chacha20 -in /dev/zero -pass stdin -nosalt | sudo dd if=/dev/stdin of=/dev/mapper/sda_crypt bs=4096 status=progress
We could also have used
/dev/urandom but the above technique is much faster.
Now we can create the actual filesystem.
$ sudo mkfs.btrfs --label archive /dev/mapper/archive_crypt
At this point we’re actually pretty much done. You can add and entry to
/etc/fstab to easily mount the filesystem and you’re done.
/dev/mapper/archive_crypt /home/guyru/archive btrfs noauto,user 0 0