Să presupunem că vreau să folosesc un cifr cu o cheie mare, cum ar fi ISAAC, care acceptă cheia ogf de 8192 de biți.
Pot hash cu sha-256 sau sha-512 și pot itera până ajunge la dimensiunea cheii, dar nu voi obține 8192 de biți de securitate, deoarece starea internă a acestor funcții de hash este limitată la 256 sau 512 de biți.
Pot hash cu un XOF (eXtendable Output Function) precum Skein, SHAKE, KangarooTwelve, Blake3 sau Blake2x, dar din nou problema este starea internă care este mică și bazată pe iterații în funcția de compresie, nu oferă o securitate mai mare decât 256/512 biți chiar dacă ieșirea este aleasă în mod arbitrar.
Poate fi folosită o funcție KDF specializată, cum ar fi Argon2 sau Scrypt.
Întrebarea mea este specifică despre Argon2.
Documentația acestuia spune că acceptă intrări mari pentru mesaj, săruri și dimensiunea sa digerată poate fi aleasă în mod arbitrar.
Am compilat un program de execuție argon2 pentru a hash fișiere în terminal, cum ar fi fotografii, și nu pot vedea diferența de timpi când dimensiunea de ieșire este mică sau mare.
$ time cat ~/some_file | argon2-static 00000000 -d -t 2000000 -m 3 -p 1 -r -l 32 &>/dev/null
0m6.334s reale
utilizator 0m6.329s
sys 0m0.004s
$ time cat ~/some_file | argon2-static 00000000 -d -t 2000000 -m 3 -p 1 -r -l 1024 &>/dev/null
0m6.455s reale
utilizator 0m6.443s
sys 0m0.008s
Ambele dimensiuni de ieșire de 32 de octeți (256 de biți) și 1024 (8192 de biți) au timpi aproape egali atunci când se efectuează hashing cu Argon2.
Asta îmi permite să mă îndoiesc.
Are starea internă a lui Argon2 de aceeași dimensiune a ieșirii? Sau poate singurele sale iterații ale funcției hash?
Întreb acest lucru deoarece Argon2 folosește Blake2b ca funcție hash și are 512 biți de stare internă, nu 8192 pe care îl vreau.
Voi avea 8192 de biți de securitate dacă o intrare cu entropie mare (egale sau mai mare decât ieșirea) este procesată la această dimensiune de ieșire în Argon2?