Chiffrement symétrique
Une seule clé pour chiffrer et déchiffrer.
| Algorithme | Taille de clé | Usage |
|---|---|---|
| AES-256-GCM | 256 bits | Standard actuel, chiffrement au repos |
| ChaCha20-Poly1305 | 256 bits | Alternative à AES, mobile |
| 56 bits | Obsolète — ne pas utiliser | |
| 168 bits | Déprécié — ne pas utiliser |
$openssl enc -aes-256-cbc -salt -in fichier.txt -out fichier.enc
Chiffrer un fichier avec AES-256
$openssl enc -d -aes-256-cbc -in fichier.enc -out fichier.txt
Déchiffrer
Chiffrement asymétrique
Paire de clés : publique (chiffrer) et privée (déchiffrer).
| Algorithme | Usage | Taille recommandée |
|---|---|---|
| RSA | Chiffrement, signatures | 4096 bits |
| ECDSA | Signatures (plus rapide) | P-256 ou P-384 |
| Ed25519 | Signatures SSH/TLS | 256 bits |
| X25519 | Échange de clés | 256 bits |
$ssh-keygen -t ed25519 -C '[email protected]'
Générer une clé SSH Ed25519
$openssl genrsa -out private.pem 4096
Générer une clé RSA 4096 bits
$openssl rsa -in private.pem -pubout -out public.pem
Extraire la clé publique
Hashing
Fonction à sens unique : impossible de retrouver l'entrée à partir du hash.
| Algorithme | Taille | Usage |
|---|---|---|
| SHA-256 | 256 bits | Vérification d'intégrité |
| SHA-3 | Variable | Nouvelle génération |
| BLAKE3 | 256 bits | Rapide, moderne |
| 128 bits | Casse — ne pas utiliser | |
| 160 bits | Casse — ne pas utiliser |
$sha256sum fichier.iso
Calculer le hash SHA-256 d'un fichier
Hashing de mots de passe
Les fonctions de hashing classiques (SHA-256) sont trop rapides pour les mots de passe. Utiliser des fonctions conçues pour être lentes :
| Algorithme | Recommandation |
|---|---|
| Argon2id | Recommandé (winner PHC) |
| bcrypt | Bon choix, largement supporté |
| scrypt | Alternative solide |
| Acceptable si pas d'alternative |
Signatures numériques
Prouver l'authenticité et l'intégrité d'un message.
1. Alice hash le message → H
2. Alice chiffre H avec sa clé privée → Signature
3. Alice envoie message + signature
4. Bob déchiffre la signature avec la clé publique d'Alice → H'
5. Bob hash le message reçu → H''
6. Si H' == H'' → message authentique et intègre
$openssl dgst -sha256 -sign private.pem -out signature.bin message.txt
Signer un fichier
$openssl dgst -sha256 -verify public.pem -signature signature.bin message.txt
Vérifier une signature
TLS (Transport Layer Security)
Handshake TLS 1.3
Client Server
│ │
├── ClientHello (ciphers, key) ────→ │
│ │
│ ←── ServerHello + Certificate ─────┤
│ ←── Finished ──────────────────────┤
│ │
├── Finished ──────────────────────→ │
│ │
│ ←═══ Encrypted traffic ══════════→ │
- TLS 1.3 : 1-RTT handshake, forward secrecy obligatoire
- TLS 1.2 : acceptable mais 2-RTT
TLS 1.0/1.1: déprécié, à désactiverSSL: obsolète depuis 2015
PKI et certificats
Chaîne de confiance
Root CA (auto-signé, stocké dans l'OS/navigateur)
└── Intermediate CA (signé par Root CA)
└── Certificat serveur (signé par Intermediate CA)
$openssl x509 -in cert.pem -text -noout
Examiner un certificat
$openssl s_client -connect example.com:443 -servername example.com
Vérifier le certificat d'un serveur
Let's Encrypt (ACME)
$certbot certonly --standalone -d example.com
Obtenir un certificat gratuit Let's Encrypt
Bonnes pratiques
- AES-256-GCM ou ChaCha20 pour le chiffrement symétrique
- Ed25519 pour les clés SSH
- Argon2id pour les mots de passe
- TLS 1.3 minimum pour le trafic réseau
- Ne jamais implémenter sa propre cryptographie
- Rotation régulière des clés et certificats