Linux: Cryptography
Data at Rest - File Encryption
GNU Private Guard - GPG
GPG
is a tool used to encrypt, decrypt, and digitally sign files using an asymmetric key
# to generate keys
# the keys are stored in ~/.gnupg
gpg --full-generate-key
# to encrypt a file using a asymmetric key
gpg --encrypt --recipient 'user@demo.com` secrets.txt
# to encrypt a file using a symmetric key
gpg -c secrets.txt
# to decrypt a file with a asymmetric key
gpg --decrypt secrets.txt.gpg
# decrypt a file with a symmetric key
gpg secrets.txt.gpg
# to digitally sign a file
gpg --sign secrets.txt
# to verify a signature
gpg --verify secrets.txt.gpg
A digital signature helps verify the identity of the sender and the integrity of the file.
Data at Rest - Filesystem Encryption
Linux Unified Key Setup version 2 - LUKS2
LUKS2
is a standardized, on-disk encryption container that wraps a filesystem in an impenetrable shell. argon2
is a lock mechanism used by LUKS2 to slow down attackers by requiring significant time and memory to test each passphrase. Argon2 has 3 variants: argon2i
, argon2d
, and argon2id
.
# to install required tools
dnf install cryptsetup
# to check if a device contains a LUKS header
cryptsetup isLuks /dev/sdc2
# to add an extra passphrase or keyfile
cryptsetup luksAddKey /dev/sdc2 ./key.bin
# remove an existing
cryptsetup luksRemoveKey /dev/sdc2
# to view luks header
cryptsetup luksdump /dev/sdc2
# to encrypt a disk/partition
cryptsetup luksFormat --type luks2 /dev/sdc2
# to decrypt/open a disk/partition
# This will creates a mapped device in /dev/mapper/encrypted_disk.
cryptsetup luksOpen /dev/sdc2 encrypted_disk
# close the encrypted device
cryptsetup luksClose encrypted_disk
Data in Transit - OpenSSL
OpenSSL
allows the creation and management of digital certificate and keys used to authenticate user identities.
TLS Certificate
TLS certificate is a like a digital passport for servers. It contains important information about the servers and is signed by a trusted Certificate Authority (CA).
# to generate a self signed certificate
openssl genpkey -algorithm RSA -out server.key
# to create a certificate signing request - CSR
openssl req -new -key server.key -out server.csr
s_client
s_client
is used to probe any TLS-enabled service from the command line.
# to retrieve the server's certificate and verify the issuer, expiry date, and intermediates certs
openssl s_client -connect mail.example.com:993 -showcerts
Protection Methods
TLS Protocol Versions
TLS 1.2 and above are considered safe
LibreSSL
LibreSSL is a fork of the original OpenSSL library designed to be easier to audit and maintain.
# to install LibreSSL
dnf install libressl
WireGuard
WireGuard is a next gen VPN solution that operates inside the Linux kernel to secure entire network tunnels with modern cryptography.
Hashing
A hash function is a cryptographic hash algorithm that converts any size input into a fixed bit digest, ensuring data integrity by making it nearly impossible for two different inputs to produce the same output.
SHA-256
SHA-256
uses 256 bit digest
# to calculate the checksum of a file
sha256sum myfile,txt
Hash-based Message Authentication Code - HMAC
HMAC
combines a secret key with SHA-256 to generate a keyed digest, allowing recipients who share the secret to verify both the integrity of the data and the authenticity of its sender.
# to calculate the hmac using SHA 256
openssl dgst -sha256 -hmac "secretkey" myfile.txt
Removal of Weak Algorithms
-
Defense Information Systems Agency Security Technical Implementation Guides (
DISA STIGs
). DISA STIGs sets the baseline for hardening Linux servers, and that includes explicitly turning off week cryptographic algorithms (disable legacy ciphers such as RC4, 3DES, prohibit MD5-based hashing) -
FIPS 140-2
defines approved cryptographic modules and algorithms for federal systems, and FIPS compliance on a Linux machine ensures only approved algorithms are offered. -
Disable SSHv1
sudo sed -i 's/^#*Protocol.*/Protocol 2/' /etc/ssh/sshd_config && sudo systemctl restart sshd
-
Use
sslsanc
to probe TLS-enable services and flag anything outdated.
Certificate Management
No Cost Trusted Root Certificate
- Let's Encrypt: Free to use
Commercial Root Certificate Authorities
They charge fees in exchange for extended validation procedures, longer certificate lifetimes, insurance warranties, and hands-on support.
-
DigiCert
-
GlobalSign
-
Sectigo
-
Entrust