Encryption is the art of encoding messages in a way that only the intended, authorized person may read it. According to Edward Snowden, strong, tested cryptographic encryption systems were said to be one of the few remaining things that work (i.e. haven't been compromised by the NSA), and that people can still rely on.
Encryption covers many areas of computing and covers many levels of Security. While there are no Silver Bullets to protect yourself, you can guard against many adversaries via encryption techniques.
It is recommended that you define your adversary before continuing, because encryption is a defensive tactic and is only useful against known offensive tactics. In short:
- Against whom do you want your data protected?
Full disk encryption
Full Disk Encryption (FDE) is the process of turning your regular HDD stored files into cyphertext, so that anyone gaining access to your physical HDD (e.g. Thieves stealing your PC, LEA kicking your door in) cannot read the contents of your hard drive without knowing an encryption key.
Full Disk Encryption is useless when your PC is running. Once your FDE drive is unlocked/deciphered any running program or user can read everything in it.
Warning: Windows, since Windows NT Workstation 4, has contained a well-known NSA back door. However, Windows 7 and below are considered relatively safe (if you remove the telemetry updates). Windows 10 is highly malicious, and has been proven time and time again to not only datamine and steal user information, but it has been designed to do this. Continue at your own risk.
Bitlocker was reported to have been attacked in 2010 through ElectroMagnetic leaking of cryptographic keys from the TPM chip. archive-part1 archived-part2 Bruce Schneier archived and The Intercept still recommend the software. archived Do your own research.
Since Microsoft's operating system is proprietary software, it is possible that the Bitlocker encryption is backdoored.
TrueCrypt has been abandoned since 05/2014. A crypto audit completed in 05/2015 reports it as 'a well-designed piece of software with only minor issues'. VeraCrypt, a fork from TrueCrypt, continues its development. This is technically illegal (as the TrueCrypt software license does not allow forks), but there is little chance of the original TrueCrypt developers launching a lawsuit against VeraCrypt.
Much like Windows, there is no safe option for bulk symmetric encryption on OS X. FileVault, while offering strong encryption, is only acceptable if you're hiding files from thieves and simple adversaries. This is because Apple's FileVault is, of course, proprietary software.
Warning: GNU/Linux FDE does not encrypt the /boot directory of your hard drive for the sole purpose of decryption. This is susceptible to an extended Evil Maid Attack. This can be prevented by making a bootable flash drive hold your bootloader and /boot directory, and setting up your computer to boot off of your flash drive. Make sure you mount /boot (sudo mount /dev/usbdevice /boot (this may be done automatically by your distro) on your flash drive when updating your repositories with your package manager, it will write data to files in /boot.
dm-crypt + LUKS
dm-crypt + LUKS is the recommended encryption solution for GNU/Linux. It usually comes with the kernel. Since version 1.6, cryptsetup supports TrueCrypt containers natively, so there's no need to install TrueCrypt or tc-play.
Take note of the --iter-time parameter while creating a dm-crypt volume. This creates a time delay to guard against brute force attacks, which the FBI have shown archived that they have problems attacking. archived
The Arch Linux Wiki maintains a fantastic guide on dm-crypt which is applicable to most Linux distributions.
tc-play A FOSS Truecrypt implementation to replace the official version. Supports most of Truecrypt's features. Nowadays useful only for reading your Truecrypt volume and migrating it to dm-crypt.
VeraCrypt, TrueCrypt's successor. Is cross-platform and has a TrueCrypt compatibility mode for those with old TC disks.
Both stock and third party (e.g. cyanogenmod, omnirom) Android Roms allow for device encryption. They all use the linux kernel dm_crypt encryption options. This will keep out most non-lea actors.
Be aware that any phone which can be flashed with a custom rom can also be flashed with a malicious rom (i.e. any phone which cyanogenmod can be flashed on can also be flashed with fbi-nsa-fiveeyes.rom). Any phone locked to a telco provider (e.g. AT&T only) is probably compromised by US LEA too.
The best defense is a good password.
iPhone are widely regarded as the most secure phones/pads, so long as you trust Apple. 2016 FBI vs Apple debate
Cryptowars 2.0 began in February 2016 over a terrorist who owned an iPhone. The FBI demanded that Apple provided a custom firmware to flash upon the terrorist's phone which would:
- Allow more than 10 password guesses per hour.
- Not allow the phone to wipe itself after 10 bad guesses.
- Allow guesses to be made via usb/whatever interface, rather than the touchscreen.
i.e. circumvent all the regular iPhone protections against a brute force attack on it's password.
This has been widely seen as an attempt to set a judicial precedent by the US government so that future criminal/"criminal" cases can allow encyption to be bypassed/criminalised.
As of 2016.5.5, It has been released that the FBI paid Dark Net Tor hackers almost one million USD to hack into and unlock the phone. The FBI has been very vague about this, with some agents saying they bought a 0day to use, while some specifically say they paid hackers themselves to get into the iPhone. The 0day, which is specific to an iPhone 5C running iOS 9.2, has been patched already by a recent update, making it defunct to any phones with that update.
Single file encryption
Beyond Full Disk Encryption, a single file can be encrypted with ease. Several programs such as 7Zip, WinRAR and WinZip can encrypt one or more files.
Tomb, a script by Dyne, can be used to create PGP encrypted containers with ease. It can also hide keys in JPEGs using steghide, providing a layer of obfuscation. Tarballs can be obtained here, installation instructions if you don't know how to use make can be found here.
- Creating a 10mb tomb named "tbp": $ sudo tomb dig -s 10 tbp.tomb
- Creating a key for our new tomb: $ sudo tomb forge tbp.tomb.key
- Locking our tomb with our newly created key: $ sudo tomb lock tbp.tomb -k tbp.tomb.key
- Opening our locked tomb with our new key (opens in /media/): $ sudo tomb open tbp.tomb -k tbp.tomb.key
- Hiding a key in a JPEG (original file is untouched): $ sudo tomb bury picture.jpg -k tbp.tomb.key
GPG is a simple command line tool aimed to be used in tandem with email to create secure encrypted messages. It uses an asymmetric keyset of RSA public and private keys that it uses to encrypt and decrypt emails (and files). It also can encrypt single files using a passphrase.
- Creating a public and private keyset using GPG: $ gpg --gen-key
You will be asked for which key type you want to create, to create an encryption and decryption keyset, choose RSA and RSA. For the highest amount of security, choose the largest bit size possible (4096). You can choose how long this key will last, along with an email address and name associated with it (you can put false information if you'd wish, but use easily-readable stuff like "firstname.lastname@example.org" and "John Doe", since GPG recognizes recipents by their email address). USE A STRONG PASSPHRASE! Use an easily remembered one like large words randomly chosen with dice.
- Encrypting a file to yourself (using a keypair): $ gpg -e -r email@example.com yourfilehere
The file you encrypted will be created with a ".gpg" at the end of it's name to distingush encrypted files from unencrypted files. After encrypting your file, it would be wise to securely delete your unencrypted file (using srm) to prevent spies.
- Decrypting a file to yourself (using a keypair): $ gpg --output yourfilehere -d yourfilehere.gpg
This will decrypt your encrypted file as "yourfilehere". This decrypted file will overwrite any file with the same name.
Alternatively, you can encrypt a single file with a passphrase.
- Encrypting a single file with a passphrase: $ gpg -c yourfilehere
You will be asked for a password and your encrypted file will be made with a ".gpg" extension in the name. USE A STRONG PASSPHRASE! Use an easily remembered one like large words randomly chosen with dice. After encrypting your file, it would be wise to securely delete your unencrypted file (using srm) to prevent spies.
- Decrypting a single file with a passphrase: $ gpg --output yourfilehere -d yourfilehere.pgp
This will decrypt your encrypted file as "yourfilehere". This decrypted file will overwrite any file with the same name.
Everything you view/submit to a website is readable by third parties without encryption. The standard encryption method is HTTPS (HTTP Secure) which uses SSL/TLS encryption to communicate with a website. This is the standard encryption protocol which your GMail/Online Banking/eBay interactions use.
HTTPS is dependant upon Certificate Authorities (CAs), such as Comodo and Verisign which cryptographically sign Certificates to confirm that the website you're connecting to is who it says it is, rather than some random hacker. Your operating system/browser has a number of certificates which it trusts, and those trusted certificates are compared against the website that you're accessing.
If the website you're visiting gives an invalid certificate, your browser will complain.
- IE and Chrome/Chromium use the System Certificate store.
- Firefox uses it's own Certificate store.
Beyond file encryption there is communication encryption, which is essentially file-in-transit encrption. This sections covers technologies referring to chats/texts/email/similar.
There are generally two types of communication encryption:
Serverside encryption encrypts your message to the server only, and then out to yout recipient. This method relies completely on trusting the server to not read your message and not be compromised by a third party.
End to End encryption works on the principal that only the sender and recipient can understand the message being sent. Any third party (including any server the message is sent through) will not be able to decrypt the message. This is the preferred method for all communications.
PGP allows for secure message bodies within email. Sender/Recipients are still plaintext, which is enough to kill you.
Wikipedia maintains a great article on Encryption. Stuff you've probably heard of:
- AES, the standard web encryption protocol which is publicly available to use and was the winner of the AES competition (originally known as Rijndael).
- Twofish, a competitior of AES.
- Serpent, the more secure but more CPU intensive cipher that competed for the AES title.
Cryptology in applications
The best and easiest to use public key crypto library is NaCl. Don't even try creating your own crypto algorithm or using another shitty library. The important part with crypto is always use enough randomness in your keys. If you don't, this happens (you can't really have this problem with NaCl though). The other important part is always use a unique nonce.
NaCl is real easy to use, just use crypto_box_keypair() to generate a public/private keypair, use crypto_box() to encrypt data and use crypto_box_open() to decrypt it (This is the only function that you need to check the return value, it returns -1 if the decryption failed). Why does crypto_box() use your private key to encrypt a message you ask? That's so the other can check if that encrypted message really came from you, the same reason why crypto_box_open() takes the public guy of the guy who sent you the encrypted data.
If you have a grain of intelligence, before using NaCl for anything you will read everything on the website, especially this page.
- Why NaCl?
- It's secure (Authentication, protection against timing attacks, etc..)
- It's fast (RSA is very slow, and the RSA was backdoored by the NSA).
- The keys are only 256 bits (It's ECC), and it's as secure as RSA 3072.
This Crunchbang forum post archived (named "The Paranoid Crunchbang Security Guide") has tools and techniques that specifically apply to #!++ (Crunchbang Plus-Plus), but easily applies to other distros as well. Very good resource.
Also check Fucko for other tips.