Aller au contenu
Sylvain Joffraud l4w
Retour

Argon2 dans LUKS : moins de mémoire ≠ moins sûr

Quand on tape --pbkdf-memory 131072 au lieu du défaut 1 GB, l’intuition est : « moins memory-hard donc moins coûteux pour l’attaquant, mais plus rapide pour moi ». Fausse à moitié — ça m’a fait réfléchir une heure.

Ce que cryptsetup calibre vraiment

Argon2id dérive le master key en faisant deux choses : allouer un gros tableau RAM (--pbkdf-memory) et itérer dessus avec des accès pseudo-aléatoires. Coût total = mémoire × itérations. Cryptsetup ne fixe ni l’un ni l’autre : il fixe une cible temporelle, ~2s sur la machine qui exécute luksFormat (--iter-time, défaut 2000 ms). Il benchmarke :

Même temps total sur ta machine. Coût attaquant : même ordre de grandeur (~2s/essai). Réduire la mémoire ne réduit pas le coût total, ça le redistribue entre mémoire et itérations CPU.

Sécurité réelle

Le memory-hard pénalise les attaques massivement parallèles (FPGA/GPU/ASIC). Sur une carte 16 GB :

ConfigTemps/essaiMémoireParallélisme/16 GB
1 GB / 4 iter~2s1 GB16 essais
128 MB / 47 iter~2s128 MB125 essais

Donc 128 MB est ~8x plus parallélisable. Mais avec une passphrase diceware 5 mots (~65 bits), même 1000 essais simultanés = 250 millions d’années. La différence « 16 vs 125 » est noyée dans l’entropie de la passphrase.

L’attaque réaliste sur LUKS n’est jamais le brute-force du master key. C’est : passphrase faible, keyfile qui fuit, cold boot machine unlock, oubli de unmount (clé en RAM kernel), faille cryptsetup/kernel. Sur ces vecteurs, 128 MB ou 1 GB ne change rien.

Quand 1 GB devient un piège

Ça compte sur la machine qui DÉCHIFFRE. Chiffrer sur un PC 16 GB (4 iter × 1 GB = 2s), unlock sur un NAS 1 GB : Argon2 réclame 1 GB → 600 MB en swap → chaque accès = 50% de page fault → le KDF passe de 2s à 30 min de swap I/O (cf lkd 48). Avec 128 MB / 47 iter, tout reste en RAM physique, ~30s (CPU lent de l’Atom D510, sans la pénalité du swap).

Lessons learned


Partager cet article :

Article précédent
Coolify + Apache front TLS : le certresolver fait du 502
Article suivant
Argon2 : le KDF par défaut piège les cibles à 1 GB de RAM