Argon2 è una funzione di derivazione della chiave o KDF. È progettato per essere computazionalmente costoso e richiede una grande quantità di memoria di lavoro per rendere più difficili gli attacchi di forza bruta. Internamente, Argon2 utilizza una funzione di hash rapida crittograficamente protetta chiamata Blake2b .
Una funzione di hash prende un input di lunghezza arbitraria (il messaggio ) e lo mappa su un output di lunghezza fissa (il digest ). Quando un singolo bit nel messaggio cambia, il 50% dei bit nel digest dovrebbe cambiare. Ciò significa in effetti che qualsiasi modifica apportata all'input produce risultati completamente diversi. Poiché il digest è di dimensioni fisse, il principio di pigeonhole stabilisce che ci saranno alcuni messaggi distinti che inevitabilmente si tradurranno nello stesso output digerire. Una funzione hash crittograficamente protetta garantisce che non ci sia un modo matematico per prevedere quali input genereranno output identici. Qualsiasi tecnica che renda facile trovare tali uscite identiche è un attacco di collisione.
Un attacco di collisione è qualsiasi attacco contro una funzione di hash f dove viene trovata una coppia di input m ≠ m ' e f (m) = f ( m ') . Un output con codifica Base64 a 43 caratteri è costituito da 256 bit di dati. A causa del compleanno paradosso , la resistenza alla collisione di un digestione n bit (un digest con uno spazio tasti di 2 n ) è 2 n / 2 . Ciò significa che la resistenza di collisione di un digest a 256 bit sarà 2 256/2 = 2 128 . Una spiegazione più matematica delle collisioni delle funzioni di hash e il paradosso dei compleanni è fornito su Crypto.SE .
In senso informativo-teorico, sarebbe più sicuro usare un output digest più grande in quanto lo spazio di output sarebbe più grande. In pratica , la resistenza di collisione a 128 bit è più che sufficiente.