We are still actively working on the spam issue.
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.
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?
- 1 Full Disk Encryption
- 2 Single File Encryption
- 3 Web Encryption
- 4 Communication Encryption
- 5 Encryption Standards
- 6 Cryptology in Applications
- 7 Other Links
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.
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.
dm-crypt + LUKS
dm-crypt + LUKS is the recommended encryption solution for GNU/Linux. It 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.
Your pincode sucks btw.
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.
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 of more files.
OpenSSL File Encryption
The standard linux utility openssl can encrypt files:
- Encoding: $ openssl enc -aes-256-cbc -in plaintext.file -out cyphertext.file
- Decoding: $ openssl enc -aes-256-cbc -d -in cyphertext.file > plaintext.file
You will be prompted for a password.
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.
- For e.g. The wiki.installgentoo.com is signed/verified by Let's Encrypt.
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
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.
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.