Hashes — Empreintes cryptographiques
★★★★★
Qu'est-ce qu'un hash ?
Un hash transforme des données de taille quelconque en une chaîne de longueur fixe. Irréversible, déterministe, effet avalanche (1 bit changé = hash complètement différent). Utilisé pour stocker des mots de passe et vérifier l'intégrité de fichiers.
Comparatif des algorithmes
MD5 128 bits CASSÉ (collisions 2004) Ne plus utiliser
SHA1 160 bits CASSÉ (Google 2017) Déprécié
SHA256 256 bits Sûr, standard actuel
SHA512 512 bits Sûr, rapide sur 64 bits
Pour les mots de passe : JAMAIS un hash simple !
bcrypt : lent par conception, résiste aux GPUs
Argon2 : gagnant PHC 2015 (memory-hard)
scrypt : memory-hard, résiste aux ASICs
PBKDF2 : OK si > 100 000 itérations Identifier un hash
hashid "5f4dcc3b5aa765d61d8327deb882cf99"
# -> MD5
hashid "$2b$12$EixZaYVK1fsbw1ZfbX3OXe"
# -> bcrypt
# À la longueur :
32 hex = MD5 40 hex = SHA1
64 hex = SHA256 128 hex = SHA512
$2b$ = bcrypt $6$ = sha512crypt Length Extension Attack
# MD5, SHA1, SHA256 sont vulnérables
# Si vous connaissez HASH(secret + message),
# vous pouvez calculer HASH(secret + message + extra)
# sans connaître le secret !
hashpump -s "HASH_CONNU" -d "données_originales" -a "à_ajouter" -k 16
# Défense : utiliser HMAC
HMAC = HASH(secret XOR opad, HASH(secret XOR ipad, message))