# Cryptography Cheatsheet | Category | Algorithm/Method | Description | Example Usage | Security Level | |----------|------------------|-------------|--------------|----------------| | **Symmetric Encryption** ||||| | Block Ciphers | AES-256 | Advanced Encryption Standard | `openssl enc -aes-256-cbc -in plain.txt -out encrypted.bin` | Strong (Recommended) | | | AES-128 | AES with 128-bit key | `openssl enc -aes-128-cbc -in plain.txt -out encrypted.bin` | Adequate | | | 3DES | Triple Data Encryption Standard | `openssl enc -des3 -in plain.txt -out encrypted.bin` | Legacy (Avoid) | | Stream Ciphers | ChaCha20 | Modern stream cipher | `openssl enc -chacha20 -in plain.txt -out encrypted.bin` | Strong | | | RC4 | Rivest Cipher 4 | `openssl enc -rc4 -in plain.txt -out encrypted.bin` | Broken (Avoid) | | Operation Modes | GCM | Galois/Counter Mode (authenticated) | `openssl enc -aes-256-gcm -in plain.txt -out encrypted.bin` | Strong (Recommended) | | | CBC | Cipher Block Chaining | `openssl enc -aes-256-cbc -in plain.txt -out encrypted.bin` | Adequate with proper IV | | | ECB | Electronic Codebook | `openssl enc -aes-256-ecb -in plain.txt -out encrypted.bin` | Weak (Avoid) | | | CTR | Counter Mode | `openssl enc -aes-256-ctr -in plain.txt -out encrypted.bin` | Strong with unique nonce | | **Asymmetric Encryption** ||||| | Key Exchange | RSA-2048+ | Rivest-Shamir-Adleman | `openssl genrsa -out private.pem 4096` | Strong (≥2048 bits) | | | ECC (P-256) | Elliptic Curve Cryptography | `openssl ecparam -genkey -name prime256v1 -out ecc.key` | Strong (≥256 bits) | | | DH | Diffie-Hellman | `openssl dhparam -out dhparams.pem 2048` | Strong (≥2048 bits) | | | ECDH | Elliptic Curve Diffie-Hellman | Used in TLS handshakes | Strong | | Modern Standards | X25519 | Curve25519 for key exchange | Used in Signal Protocol | Very Strong | | | Ed25519 | Edwards-curve for signatures | `ssh-keygen -t ed25519` | Very Strong | | **Hashing Algorithms** ||||| | Modern | SHA-256 | Secure Hash Algorithm 256-bit | `openssl dgst -sha256 file.txt` | Strong | | | SHA-3 | Secure Hash Algorithm 3 | `openssl dgst -sha3-256 file.txt` | Very Strong | | | BLAKE2 | Fast secure hash function | `b2sum file.txt` | Very Strong | | Legacy | SHA-1 | Secure Hash Algorithm 1 | `openssl dgst -sha1 file.txt` | Broken (Avoid) | | | MD5 | Message Digest 5 | `openssl dgst -md5 file.txt` | Broken (Avoid) | | Password Hashing | Argon2id | Memory-hard function | `argon2 password -id -t 3 -m 16 -p 4` | Strongest (Recommended) | | | bcrypt | Blowfish-based hash | `htpasswd -B -C 12 passfile user` | Strong | | | PBKDF2 | Key derivation function | `openssl pkeyutl -kdf PBKDF2` | Adequate (high iterations) | | | Scrypt | Memory-hard function | `scrypt password salt 16384 8 1 32` | Strong | | **Message Authentication** ||||| | HMAC | HMAC-SHA256 | Hash-based Message Authentication | `openssl dgst -sha256 -hmac "key" file.txt` | Strong | | Authenticated Encryption | AES-GCM | Encryption with built-in auth | `openssl enc -aes-256-gcm -in file.txt` | Strong (Recommended) | | | ChaCha20-Poly1305 | Authenticated stream cipher | Used in TLS 1.3 | Strong (Recommended) | | **Digital Signatures** ||||| | RSA-based | RSA-PSS | Probabilistic Signature Scheme | `openssl dgst -sha256 -sign key.pem -sigopt rsa_padding_mode:pss file` | Strong | | | PKCS#1 v1.5 | Traditional RSA signature | `openssl dgst -sha256 -sign key.pem file` | Adequate | | EC-based | ECDSA | Elliptic Curve Digital Signature | `openssl dgst -sha256 -sign ec.key file` | Strong | | | Ed25519 | Edwards-curve Digital Signature | `openssl dgst -sign ed.key file` | Very Strong (Recommended) | | **Key Derivation** ||||| | Password-based | PBKDF2 | Password-Based Key Derivation | `openssl pkeyutl -kdf PBKDF2 -kdflen 32` | Adequate (≥10k iterations) | | | Argon2 | Memory-hard KDF | `argon2 password -id -t 3 -m 16 -p 4` | Strong (Recommended) | | | scrypt | Memory-hard KDF | `openssl kdf -kdf scrypt -password pass -key-length 32` | Strong | | Key-based | HKDF | HMAC-based Extract-and-Expand | `openssl kdf -kdf hkdf -salt salt -key key -out output.key` | Strong | | **Random Number Generation** ||||| | Cryptographic PRNGs | /dev/urandom | OS random source (Unix) | `dd if=/dev/urandom of=rand bs=32 count=1` | Strong | | | CryptGenRandom | Windows API | Used via programming languages | Strong | | | RDRAND | CPU instruction | Used in newer CPUs | Strong when combined | | **Protocols & Standards** ||||| | TLS | TLS 1.3 | Transport Layer Security | `openssl s_client -tls1_3 -connect example.com:443` | Strong (Recommended) | | | TLS 1.2 | Transport Layer Security | `openssl s_client -tls1_2 -connect example.com:443` | Adequate | | | SSL 3.0, TLS 1.0/1.1 | Legacy protocols | Disable in configurations | Weak (Avoid) | | SSH | SSH-2 | Secure Shell v2 | `ssh -o "Protocol 2" user@host` | Strong | | | SSH-1 | Legacy Secure Shell | Disable in configurations | Broken (Avoid) | | PGP/GPG | GPG | GNU Privacy Guard | `gpg --encrypt --recipient user@example.com file` | Strong | ## Common Cryptographic Operations | Operation | OpenSSL Command | Example | |-----------|-----------------|---------| | Generate RSA key pair | `openssl genrsa` | `openssl genrsa -out private.pem 4096` | | Extract public key | `openssl rsa` | `openssl rsa -in private.pem -pubout -out public.pem` | | Generate ECC key | `openssl ecparam` | `openssl ecparam -genkey -name prime256v1 -out ec.key` | | Create CSR | `openssl req` | `openssl req -new -key private.pem -out cert.csr` | | Sign file | `openssl dgst` | `openssl dgst -sha256 -sign private.pem -out sig.bin file.txt` | | Verify signature | `openssl dgst` | `openssl dgst -sha256 -verify public.pem -signature sig.bin file.txt` | | Encrypt file (symmetric) | `openssl enc` | `openssl enc -aes-256-gcm -salt -in file.txt -out file.enc` | | Decrypt file | `openssl enc` | `openssl enc -d -aes-256-gcm -in file.enc -out file.txt` | | Generate random bytes | `openssl rand` | `openssl rand -base64 32` | ## Key Length Recommendations (2023+) | Algorithm Type | Minimum Secure Length | Recommended Length | Notes | |----------------|------------------------|-------------------|-------| | AES | 128 bits | 256 bits | No known practical attacks | | RSA | 2048 bits | 4096 bits | Increases computational cost | | ECC | 256 bits | 384 bits | NIST P-256 or Curve25519 | | Hash functions | 256 bits | 384+ bits | SHA-256 or stronger | | HMAC | 256 bits | 384+ bits | Based on the underlying hash | | Symmetric key | 128 bits | 256 bits | For long-term security | ## Common Vulnerabilities & Mitigations | Vulnerability | Description | Mitigation | |---------------|-------------|------------| | Padding Oracle | Leaks info about padding validity | Use authenticated encryption (GCM, ChaCha20-Poly1305) | | Key Reuse | Same key for multiple messages | Use unique keys/IVs for each encryption | | Weak RNG | Predictable random numbers | Use cryptographically secure RNGs (/dev/urandom, CryptGenRandom) | | Side-Channel Attacks | Timing, power analysis | Use constant-time implementations | | Downgrade Attacks | Force use of weaker protocols | Disable legacy protocols, use strict configurations | | Known Plaintext | Predictable plaintext locations | Add randomization where possible | | Insufficient Key Size | Too small keys are brute-forceable | Follow key length recommendations above | | Certificate Issues | Invalid/expired certificates | Automate certificate management, use HSTS | | Hash Collisions | Finding two inputs with same hash | Use collision-resistant algorithms (SHA-256+) |