Symmetric vs Asymmetric Cryptography
All encryption falls into two families. Symmetric cryptography uses one secret key for both encryption and decryption; asymmetric (public-key) cryptography uses a pair - a public key that encrypts or verifies, and a private key that decrypts or signs. Understanding the trade-off between them explains every real-world design: they are almost always combined.
Comparison
| Symmetric | Asymmetric | |
|---|---|---|
| Keys | one shared secret | public + private pair |
| Speed | very fast (AES: gigabytes/s) | 100-1000x slower |
| Key distribution | hard: both sides need the secret | easy: public key can be shared openly |
| Uses | bulk encryption, password hashing, MACs | key exchange, signatures, small-data encryption |
| Examples | AES, ChaCha20, Fernet, PBKDF2 | RSA, ECDSA, Ed25519, Diffie-Hellman |
The Key Distribution Problem
Symmetric encryption is fast, but Alice and Bob must somehow agree on a secret without an eavesdropper learning it. Public keys solve that: Bob publishes his public key, Alice encrypts a random session key with it, and Bob decrypts it with his private key. From then on the actual data moves with fast symmetric encryption. That hybrid is exactly what TLS does for every HTTPS request, and the same pattern scales to file encryption and messaging apps.
Signing vs Encrypting
The two key families also differ in how they prove identity:
- Encrypting with a public key gives confidentiality: only the private-key holder can decrypt.
- Signing with a private key gives authenticity: anyone with the public key can verify the signature. Signing is not encryption - the message is not hidden, only authenticated.
# conceptually, with the cryptography library
from cryptography.hazmat.primitives.asymmetric import rsa, padding
private_key = generate_rsa_private_key()
public_key = private_key.public_key()
ciphertext = public_key.encrypt(secret, padding.OAEP(...)) # only private key decrypts
signature = private_key.sign(message, padding.PSS(...)) # anyone with public key verifies
Rule of Thumb
Use asymmetric cryptography to exchange keys and to sign, and symmetric cryptography for everything that moves in volume. If you find yourself encrypting a large file with RSA, the design is wrong - wrap a random AES key instead.
Summary
Symmetric ciphers are fast but need a shared secret; public-key ciphers solve key exchange and add signatures, at a heavy speed cost. Production systems combine both: asymmetric to agree on a session key, symmetric to carry the data.