Bcrypt vs Argon2: koji hash lozinke u 2026
Bcrypt i Argon2 dvije su funkcije raspršivanja riječi najkorištenije lozinke danas. Oba su dizajnirana da budu spora i otporna na Napadi grubom silom, za razliku od MD5 ili SHA-256 koji su brzi po konstrukciji. Argon2a pobijedio je na natjecanju za hashiranje lozinki 2015. i sada je izbor koji preporučuje OWASP za nove aplikacije. Bcrypt ostaje izvrstan, zreo i široko podržan izbor. Ovo Ovaj članak objašnjava razlike upravo kako bi vam pomogao u donošenju odluke.
Zašto je hash zaporke drugačiji
Klasični kriptografski hash kao što je SHA-256 dizajniran je da bude brz: želimo hashirati GB podataka u sekundi. Za lozinke, ovo je svojstvo zadano: napadač koji dohvaća vašu korisničku tablicu može testirati milijarde lozinki u sekundi na a GPU. Funkcija raspršivanja lozinke (PHF), naprotiv, nastoji biti:
- Sporo u izgradnji, s podesivim parametrom cijene
- Slano, za sprječavanje duginih tablica i paralelnih napada na više računa
- Otporan na specijalizirani hardver (GPU, FPGA, ASIC) za ograničavanje konkurentskog ubrzanja
Parametar soli i cijene pohranjeni su s hashom, obično u jednom nizu
u obliku $algo$params$sel$hash. To omogućuje povećanje troškova tijekom vremena bez
prisiliti trenutnu migraciju starih hashova.
Bcrypt: 1999, Blowfish, troškovni parametar
Bcrypt dizajnirali su Niels Provos i David Mazières za OpenBSD 1999. godine.
temelji se na algoritmu šifriranja Blowfish, od kojeg iskorištava visoku cijenu inicijalizacije
stolovi. Bcrypt izlaže jedan parametar, cost (ili rounds), koji definira
broj ponavljanja u obliku 2^trošak. Povećanje cijene za 1 udvostručuje vrijeme izračuna.
Tipični izlazni format:
$2y$12$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
| | | |
| | cijena = 12 soli + hash u bazi64
| varijanta (2y = openbsd)
algo bcrypt
Bcrypt ograničava unos na 72 bajta: dulja lozinka se tiho skraćuje, što je poznata zamka. Uobičajeno rješenje je prethodno hashirati sa SHA-256, a zatim base64 kodirati prije bcrypt, ali to može uvesti problematične nulte bajtove u nekim implementacijama. Argon2 nema tu granicu.
Argon2: 2015, PHC pobjednik, 3 varijante
Argon2 dizajnirali su Alex Biryukov, Daniel Dinu i Dmitry Khovratovich. On ima pobijedio na Natjecanju za raspršivanje zaporki u srpnju 2015. i standardiziran je prema RFC 9106 (2021). Argon2 izlaže tri parametra:
- Troškovi memorije (
m): količina korištene memorije, u KiB - Vremenski trošak (
t): broj ponavljanja u memorijskom bloku - Paralelizam (
p): broj paralelnih niti
Argon2 postoji u tri varijante:
- Argon2d: pristup memoriji ovisan o podacima. Otporniji na napade GPU-a, ali osjetljivi na napade sporednih kanala (vremenski raspored, predmemorija).
- Argon2i: pristup memoriji neovisan o podacima. Otporan na sporedne kanale, malo manje otporan na GPU napade.
- Argon2id: hibrid, počinje u načinu rada i, a zatim prelazi u način rada d. Preporučeno prema zadanim postavkama RFC 9106 i OWASP.
Parametri koje je OWASP preporučio 2026. za Argon2id: m=19456 KiB (19 MiB),
t=2, p=1. Tipični izlazni format:
$argon2id$v=19$m=19456,t=2,p=1$c2VsX2FsZWF0b2lyZQ$aGFzaF9jYWxjdWxl
| | | | |
| | base64 parametri soli base64 hash
| verzija
algo argon2id
Zašto se preporučuje Argon2id
Otpornost na specijaliziranu opremu danas je odlučujući kriterij. Bcrypt koristi malo memorije (~4 KiB), što omogućuje vrhunskom GPU-u testiranje stotina tisuća hashova u sekundi. Argon2id je memorijski težak: forsirajte nekoliko MiB memorije po pokušaju drastično smanjuje paralelizam koji se može postići na GPU-u i čini dizajn namjenskih ASIC-ova ekonomski neisplativo.
Argon2id hibridni način rada dodatno pruža zaštitu od napada sa strane kanala tijekom prve polovice izračuna. Upravo ova kombinacija opravdava svoje mjesto zadana preporuka od OWASP-a, NIST SP 800-63B (od revizije 2024.) i RFC 9106.
Usporedna tablica
| Kriterij | Bcrypt | Argon2id |
|---|---|---|
| Godina | 1999 | 2015 |
| Standardizacija | De facto, USENIX 1999 | RFC 9106 (2021) |
| Parametri | cijena | memorija, vrijeme, paralelizam |
| Iskorištena memorija | ~4 KiB | Može se konfigurirati (preporučeno ~19 MiB) |
| Memorijski teško | Ne | Da |
| Otpor GPU-a | Umjeren | Jak |
| Otpor sporednog kanala | Dobar (konstantno vrijeme) | Dobar (id mod) |
| Ograničenje unosa | 72 bajta | Ništa |
| OWASP preporuka 2026 | Prihvatljivo | Preferirano |
| Zrelost ekosustava | Vrlo široko | Široko od ~2018 |
Izvedba i otpornost na napade
Na modernom poslužitelju, bcrypt na cijeni=12 traje oko 250 ms i argon2id s parametrima OWASP oko 100-300 ms ovisno o stroju. Apsolutno vrijeme nije kriterij: ono što se računa jest omjer između vašeg troška (jedan izračun, jednom po prijavi) i napadača (milijarde izračuni na GPU-u za razbijanje dumpa).
Na RTX 4090, hashcat doseže oko 200.000 bcrypt/s po cijeni=12, u usporedbi s nekoliko desetaka tisuće argon2id na 19 MiB. Za isto vrijeme izračuna na strani poslužitelja, Argon2id usporava napadač 5 do 10 puta više od bcrypta, a jaz se povećava s vijestima generacije GPU-a.
PHP primjeri
PHP podržava dva izvorna načina putem password_hash() i password_verify()
umjesto PHP 7.2 za Argon2i (i 7.3 za Argon2id). PHP konstruktor je odabran u formatu
automatiquement.
Bcrypt
$hash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);
$ok = password_verify($password, $hash);
if (password_needs_rehash($hash, PASSWORD_BCRYPT, ['cost' => 12])) {
$hash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);
}
Argon2id
$opts = [
'memory_cost' => 19456, // 19 MiB
'time_cost' => 2,
'niti' => 1,
];
$hash = password_hash($password, PASSWORD_ARGON2ID, $opts);
$ok = password_verify($password, $hash);
if (password_needs_rehash($hash, PASSWORD_ARGON2ID, $opts)) {
$hash = password_hash($password, PASSWORD_ARGON2ID, $opts);
}
Vous pouvez générer ili identifier des hashs de tous types avec notre générateur de hash et notre identifieur de hash.
Preporuka
Za novu aplikaciju u 2026. odaberite Argon2id s postavkama
OWASP kao osnovna linija (m=19456, t=2, p=1), treba se prilagoditi prema
ciljno vrijeme (obično 250 do 500 ms). Ako održavate postojeću aplikaciju u bcryptu, ona
nema hitnosti za migraciju: bcrypt po cijeni=12 ili više ostaje siguran u 2026. Iskoristite
password_needs_rehash() pri sljedećoj prijavi za postupnu migraciju korisnika
sredstva za Argon2id.
Apsolutno izbjegavajte MD5, SHA-1 i goli SHA-256 za lozinke (pogledajte našu usporedba MD5 i SHA-256). Nijedan od ovih algoritama nije dizajniran za ovu upotrebu.
Često postavljana pitanja
Je li Bcrypt još uvijek siguran 2026.?
Da, pod uvjetom da koristite dovoljnu cijenu (12 najmanje, 14 ako je moguće). Bcrypt nema poznata kriptografska greška. Njegova jedina slabost u odnosu na Argon2id je njegov mali otisak memorije, što je čini pristupačnijom GPU i FPGA napadima.
Trebamo li migrirati bcrypt bazu podataka na Argon2id?
Ne hitno. Pristup je postupna migracija s password_need_rehash()
preporučeno: sa svakom uspješnom prijavom, ponovno raspršite lozinku u Argon2id. Na kraju
nekoliko mjeseci, većina aktivnih korisnika je migrirana i možete prisiliti a
reset za neaktivne račune.
Koji je pravi broj niti za Argon2id?
OWASP prema zadanim postavkama preporučuje p=1. Povećanje p ne čini ništa ako vaš
web poslužitelj već paralelno obrađuje puno zahtjeva i komplicira podešavanje. Postavite prioritete
nego povećanje m (memorije) što je glavna poluga otpora GPU-a.
Što je “bcrypt decrypter”?
Ne postoji bcrypt dekriptor: funkcija je jednosmjerna po konstrukciji. Alati koji tvrde da "dekriptiraju" bcrypt samo testiraju rječnike zaporki struje protiv hash. To je potpuno isto kao da napadač ima vaš stol.
Argon2i ili Argon2id?
Argon2id u svim slučajevima za lozinke. Argon2i je nešto više siguran protiv sporednih kanala, ali slabiji protiv GPU napada. Argon2id spaja koristi oboje i izričito ga preporučuje RFC 9106 za raspršivanje lozinki.
Trebamo li osim soli dodati i papar?
Sol je dovoljna za veliku većinu primjena. Paprika (tajni ključ pohranjen izvan baze podataka i koristi se kao HMAC prije raspršivanja) dodaje sloj u slučaju curenja baze podataka bez ugrožavanja aplikacijskog poslužitelja. Argon2id to ne pruža izvorno, mora biti birajte ručno.