Bcrypt vs Argon2: kateri hash gesla leta 2026
Bcrypt in Argon2 sta funkciji zgoščevanja besed najbolj uporabljena gesla danes. Oba sta zasnovana tako, da sta počasna in odporna na Napadi s surovo silo, za razliko od MD5 ali SHA-256, ki so po konstrukciji hitri. Argon2a zmagal na tekmovanju za zgoščevanje gesel leta 2015 in je zdaj priporočena izbira OWASP za nove aplikacije. Bcrypt ostaja odlična, zrela in široko podprta izbira. to Ta članek natančno pojasnjuje razlike, da vam pomaga pri odločitvi.
Zakaj je zgoščena vrednost gesla drugačna
Klasično kriptografsko zgoščevanje, kot je SHA-256, je zasnovano tako, da je hitro: želimo zgoščevati GB podatkov na sekundo. Za gesla je ta lastnost privzeta: napadalec ki pridobi vašo tabelo uporabnikov, lahko preizkusi milijarde gesel na sekundo na a GPU. Funkcija zgoščevanja gesel (PHF) si nasprotno prizadeva biti:
- Počasna konstrukcija, s prilagodljivim parametrom stroškov
- Salty, za preprečevanje mavričnih tabel in vzporednih napadov na več računov
- Odporen na specializirano strojno opremo (GPU, FPGA, ASIC) za omejevanje tekmovalne pospešitve
Parameter soli in stroškov sta shranjena z zgoščeno vrednostjo, običajno v enem nizu
v obliki $algo$params$sel$hash. To omogoča, da se stroški sčasoma povečajo brez
vsili takojšnjo selitev starih zgoščenih vrednosti.
Bcrypt: 1999, Blowfish, stroškovni parameter
Bcrypt sta leta 1999 oblikovala Niels Provos in David Mazières za OpenBSD. Je
temelji na šifrirnem algoritmu Blowfish, katerega izkorišča visoke stroške inicializacije
mize. Bcrypt izpostavi en sam parameter, cost (ali rounds), ki definira
število ponovitev v obliki 2^strošek. Povečanje stroškov za 1 podvoji čas izračuna.
Tipičen izhodni format:
$2y$12$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
| | | |
| | cena = 12 soli + hash v base64
| različica (2y = openbsd)
algo bcrypt
Bcrypt omeji vnos na 72 bajtov: daljše geslo se tiho skrajša, kar je znana past. Običajna rešitev je predhodno zgoščevanje s SHA-256 in nato kodiranje base64 bcrypt, vendar lahko to pri nekaterih izvedbah povzroči problematične ničelne bajte. Argon2 nima te meje.
Argon2: 2015, zmagovalec PHC, 3 variante
Argon2 so oblikovali Alex Biryukov, Daniel Dinu in Dmitry Khovratovich. Ima julija zmagal na tekmovanju za zgoščevanje gesel 2015 in je standardiziran z RFC 9106 (2021). Argon2 izpostavlja tri parametre:
- Stroški pomnilnika (
m): količina uporabljenega pomnilnika v KiB - Časovni stroški (
t): število ponovitev v pomnilniškem bloku - Vzporednost (
p): število vzporednih niti
Argon2 obstaja v treh različicah:
- Argon2d: dostop do pomnilnika, odvisen od podatkov. Bolj odporen na napade GPE, vendar dovzeten za napade stranskih kanalov (čas, predpomnilnik).
- Argon2i: dostop do pomnilnika, neodvisen od podatkov. Odporen na stranske kanale, nekoliko manj odporen na napade GPU.
- Argon2id: hibrid, začne se v načinu i in nato preklopi v način d. Privzeto priporočeno z RFC 9106 in OWASP.
Parametri, ki jih leta 2026 priporoča OWASP za Argon2id: m=19456 KiB (19 MiB),
t=2, p=1. Tipičen izhodni format:
$argon2id$v=19$m=19456,t=2,p=1$c2VsX2FsZWF0b2lyZQ$aGFzaF9jYWxjdWxl
| | | | |
| | parametri soli base64 base64 hash
| različica
algo argon2id
Zakaj se priporoča Argon2id
Odpornost na specializirano opremo je danes odločilno merilo. Bcrypt uporablja malo pomnilnik (~4 KiB), ki omogoča vrhunskemu grafičnemu procesorju, da testira več sto tisoč zgoščenih vrednosti na sekundo. Argon2id je pomnilniški: prisilite več MiB pomnilnika na poskus drastično zmanjša vzporednost, ki jo je mogoče doseči na GPU, in omogoča oblikovanje namenskih ASIC-jev ekonomsko nedonosna.
Hibridni način Argon2id dodatno zagotavlja zaščito pred napadi stranskega kanala v prvi polovici izračuna. Prav ta kombinacija upravičuje svoje mesto Privzeto priporočilo iz OWASP, NIST SP 800-63B (od revizije 2024) in RFC 9106.
Primerjalna tabela
| Merilo | Bcrypt | Argon2id |
|---|---|---|
| Leto | 1999 | 2015 |
| Standardizacija | De facto, USENIX 1999 | RFC 9106 (2021) |
| Parametri | cena | pomnilnik, čas, vzporednost |
| Uporabljen pomnilnik | ~4 KiB | Nastavljivo (priporočeno ~19 MiB) |
| S pomnilnikom | Ne | Da |
| Odpornost GPE | Zmerna | Močna |
| Odpornost stranskega kanala | Dobro (konstanten čas) | Dobro (način ID) |
| Omejitev vnosa | 72 bajtov | Brez |
| Priporočilo OWASP 2026 | Sprejemljivo | Zaželeno |
| Zrelost ekosistema | Zelo široko | Široko od ~2018 |
Zmogljivost in odpornost na napade
Na sodobnem strežniku bcrypt pri ceni = 12 traja približno 250 ms in argon2id s parametri OWASP približno 100-300 ms, odvisno od stroja. Absolutni čas ni merilo: tisto, kar šteje, je razmerje med vašimi stroški (en izračun, enkrat na prijavo) in stroški napadalca (milijarde izračuni na GPU za prekinitev odlagališča).
Na RTX 4090 hashcat doseže približno 200.000 bcrypt/s pri ceni = 12 v primerjavi z nekaj desetinami na tisoče argon2id pri 19 MiB. Za enak čas izračuna na strani strežnika se Argon2id upočasni napadalec 5- do 10-krat več kot bcrypt, vrzel pa se z novicami povečuje generacije grafičnih procesorjev.
Primeri PHP
PHP podpira izvorno prek password_hash() in password_verify()
od PHP 7.2 za Argon2i (in 7.3 za Argon2id). Konstruktor PHP upravlja sol in format
samodejno.
Bcrypt
$hash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);
$ok = password_verify($geslo, $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($geslo, PASSWORD_ARGON2ID, $opts);
$ok = password_verify($geslo, $hash);
if (password_needs_rehash($hash, PASSWORD_ARGON2ID, $opts)) {
$hash = password_hash($geslo, PASSWORD_ARGON2ID, $opts);
}
Z našimi lahko ustvarite ali identificirate zgoščene vrednosti vseh vrst generator zgoščenih vrednosti in naš hash identifikator.
Priporočilo
Za novo aplikacijo leta 2026 izberite Argon2id z nastavitvami
OWASP kot izhodišče (m=19456, t=2, p=1), ki se prilagodi glede na
ciljni čas (običajno 250 do 500 ms). Če vzdržujete obstoječo aplikacijo v bcrypt, jo
selitev ni nujna: bcrypt po ceni = 12 ali več ostane varen v letu 2026. Izkoristite
password_needs_rehash() ob naslednji prijavi za postopno selitev uporabnikov
sredstva za Argon2id.
Absolutno se izogibajte MD5, SHA-1 in golemu SHA-256 za gesla (glejte naše primerjava MD5 proti SHA-256). Noben od teh algoritmov ni zasnovan za to uporabo.
Pogosta vprašanja
Ali je Bcrypt leta 2026 še varen?
Da, pod pogojem, da uporabljate zadostno ceno (najmanj 12, 14, če je mogoče). Bcrypt nima znana kriptografska napaka. Njegova edina slabost v primerjavi z Argon2id je majhen odtis pomnilnik, zaradi česar je bolj dostopen napadom GPU in FPGA.
Ali naj preselimo bazo podatkov bcrypt v Argon2id?
Ne nujno. Pristop je postopna selitev s password_need_rehash()
priporočljivo: ob vsaki uspešni prijavi znova zgoščite geslo v Argon2id. Na koncu
nekaj mesecev je večina aktivnih uporabnikov preseljenih in lahko prisilite a
ponastavitev za mirujoče račune.
Kakšno je pravo število niti za Argon2id?
OWASP privzeto priporoča p=1. Povečanje p ne naredi nič, če vaš
spletni strežnik že obdeluje veliko zahtev vzporedno in otežuje nastavitev. Določite prednost
namesto povečanja m (pomnilnika), ki je glavni vzvod odpornosti GPE.
Kaj je »bcrypt decrypter«?
Ni dekriptorja bcrypt: funkcija je po konstrukciji enosmerna. Orodja ki trdijo, da "dešifrirajo" bcrypt, samo preizkušajo slovarje gesel tokovi proti hashu. To je popolnoma enako, kot če bi napadalec imel vašo mizo.
Argon2i ali Argon2id?
Argon2id v vseh primerih za gesla. Argon2i je nekoliko več varen pred stranskimi kanali, vendar šibkejši pred napadi GPE. Argon2id združuje prednosti obeh in ga RFC 9106 izrecno priporoča za zgoščevanje gesel.
Ali naj poleg soli dodamo še poper?
Sol zadostuje za veliko večino aplikacij. Poper (skrivni ključ, shranjen zunaj baze podatkov in se uporablja kot HMAC pred zgoščevanjem) doda plast v primeru uhajanja baze podatkov brez ogrožanja aplikacijskega strežnika. Argon2id ga ne zagotavlja izvorno, mora biti pokličite ročno.