Il Garante per la protezione dei dati personali italiano, nell'applicare il GDPR, ha più volte richiamato le aziende a misure di sicurezza "adeguate allo stato dell'arte" per la conservazione delle password, senza indicare un algoritmo specifico. Da quando Argon2 ha vinto la Password Hashing Competition nel 2015, è diventato lo standard de facto raccomandato da OWASP al posto di bcrypt, ed è già disponibile nativamente in password_hash() di PHP e nella facade Hash di Laravel, framework molto diffuso tra le software house italiane.
Perché la memoria conta quanto il tempo
Bcrypt e PBKDF2 rallentano soltanto il calcolo. Argon2 costringe inoltre ogni tentativo a riservare una quantità configurabile di RAM — è ciò che si chiama funzione memory-hard. Una farm di GPU affittata sul cloud parallelizza calcoli semplici a basso costo, ma parallelizzare l'accesso simultaneo a molta memoria è molto più costoso: la memoria, a differenza dei core di calcolo, è fisicamente limitata per ogni scheda.
Tre varianti: d, i, id
- Argon2d — l'accesso alla memoria dipende dalla password stessa, offrendo la massima resistenza contro GPU ma con un'esposizione teorica ad attacchi side-channel.
- Argon2i — l'accesso alla memoria è indipendente dalla password, il che chiude quella falla al costo di una resistenza leggermente minore contro GPU.
- Argon2id — combina entrambe le strategie in fasi diverse del calcolo. È la variante raccomandata dalla RFC 9106 e predefinita nella maggior parte dei framework.
Tre parametri indipendenti
A differenza dell'unico "cost factor" di bcrypt, Argon2 permette di regolare memoria, iterazioni e parallelismo separatamente. È utile in pratica: una funzione serverless con memoria limitata può compensare aumentando le iterazioni, mentre un server di autenticazione dedicato con RAM abbondante può fare il contrario.
A cosa serve
- Scegliere un algoritmo moderno per un nuovo sistema di autenticazione invece di MD5 o SHA-256 puro.
- Capire perché Argon2 rende specificamente più costosi gli attacchi con hardware GPU affittato o dedicato al mining di criptovalute.
- Pianificare una migrazione da bcrypt o PBKDF2 nell'ambito di un audit di sicurezza.
La trappola del parallelismo
Il parallelismo sembra un guadagno gratuito — più thread, hashing più veloce su un server multi-core. Ma un attaccante con lo stesso hardware multi-core ottiene esattamente lo stesso incremento di velocità a ogni tentativo. Impostare il parallelismo sul numero reale di core del server è sicuro; aumentarlo "per sicurezza" regala all'attaccante solo uno sconto proporzionale.