Bcrypt vs Argon2: milline parooliräsi 2026. aastal
Bcrypt ja Argon2 on kaks sõna räsifunktsiooni tänapäeval enimkasutatavad paroolid. Mõlemad on kavandatud olema aeglased ja vastupidavad Toores jõu rünnakud, erinevalt MD5-st või SHA-256-st, mis on ehituselt kiired. Argoon2a võitis 2015. aastal parooliräsikonkursi ja on nüüd OWASP-i soovitatud valik uute rakenduste jaoks. Bcrypt on endiselt suurepärane, küps ja laialdaselt toetatud valik. See See artikkel selgitab täpselt erinevusi, et aidata teil otsustada.
Miks parooliräsi on erinev
Klassikaline krüptograafiline räsi, nagu SHA-256, on loodud olema kiire: me tahame räsida GB andmemahtu sekundis. Paroolide puhul on see atribuut vaikimisi: ründaja mis otsib teie kasutajate tabelit, saab testida miljardeid paroole sekundis a GPU. Parooli räsifunktsioon (PHF), vastupidi, püüab olema:
- Ehituse poolest aeglane, reguleeritava kuluparameetriga
- Soolane, et vältida vikerkaaretabeleid ja paralleelseid rünnakuid mitmele kontole
- Vastupidav spetsiaalsele riistvarale (GPU, FPGA, ASIC), et piirata võistlevat kiirust
Soola ja kulu parameeter salvestatakse koos räsiga, tavaliselt ühes stringis
kujul $algo$params$sel$hash. See võimaldab kulul aja jooksul ilma
sunnib vanade räside kohest migratsiooni.
Bcrypt: 1999, Blowfish, kuluparameeter
Bcrypt kujundasid Niels Provos ja David Mazières OpenBSD jaoks 1999. aastal. See on
põhineb Blowfishi krüpteerimisalgoritmil, mille lähtestamise kõrge hind kasutab ära
tabelid. Bcrypt paljastab ühe parameetri cost (või rounds), mis määrab
iteratsioonide arv kujul 2^kulu. Kulude suurendamine 1 võrra kahekordistab arvutusaega.
Tüüpiline väljundvorming:
$2y$12$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
| | | |
| | maksumus = 12 soola + räsi baasis64
| variant (2y = openbsd)
algo bcrypt
Bcrypt piirab sisendit 72 baidiga: pikem parool kärbitakse vaikselt, mis on tuntud lõks. Tavaline lahendus on eelräsimine SHA-256-ga ja seejärel base64 kodeerimine bcrypt, kuid see võib mõnel rakendusel tekitada probleemseid nullbaite. Argon2-l seda piiri pole.
Argon2: 2015, PHC võitja, 3 varianti
Argon2 kujundasid Alex Biryukov, Daniel Dinu ja Dmitri Khovratovitš. Tal on võitis juulis paroolide räsimise konkursi 2015 ja seda standardib RFC 9106 (2021). Argon2 paljastab kolm parameetrit:
- Mälukulu (
m): kasutatud mälu kogus, KiB - Ajakulu (
t): iteratsioonide arv mäluplokis - Parallelism (
p): paralleelsete lõimede arv
Argon2 on olemas kolmes variandis:
- Argon2d: andmetest sõltuv juurdepääs mälule. Vastupidavam GPU rünnakutele, kuid vastuvõtlik külgkanalite rünnakutele (ajastus, vahemälu).
- Argon2i: andmetest sõltumatu juurdepääs mälule. Vastupidav külgkanalitele, veidi vähem vastupidav GPU rünnakutele.
- Argon2id: hübriid, käivitub režiimis i, seejärel lülitub režiimile d. Vaikimisi soovitatud RFC 9106 ja OWASP.
OWASP poolt 2026. aastal Argon2id jaoks soovitatud parameetrid: m=19456 KiB (19 MiB),
t=2, p=1. Tüüpiline väljundvorming:
$argon2id$v=19$m=19456,t=2,p=1$c2VsX2FsZWF0b2lyZQ$aGFzaF9jYWxjdWxl
| | | | |
| | base64 soola parameetrid base64 räsi
| versioon
algo argon2id
Miks Argon2id on soovitatav?
Vastupidavus eriseadmetele on tänapäeval otsustavaks kriteeriumiks. Bcrypt kasutab vähe mälu (~ 4 KiB), mis võimaldab tipptasemel GPU-l testida sadu tuhandeid räsi sekundis. Argon2id on mälukõva: sunnib mitu MiB mälu katse kohta vähendab drastiliselt GPU-s saavutatavat paralleelsust ja muudab spetsiaalsete ASIC-ide disaini majanduslikult kahjumlik.
Argon2id hübriidrežiim pakub lisaks kaitset külgkanalite rünnakute eest arvutamise esimesel poolel. Just see kombinatsioon õigustab selle koha vaikesoovitus OWASP-lt, NIST SP 800-63B (alates 2024. aasta versioonist) ja RFC 9106.
Võrdlustabel
| Kriteerium | Bcrypt | Argon2id |
|---|---|---|
| Aasta | 1999 | 2015 |
| Standardeerimine | De facto, USENIX 1999 | RFC 9106 (2021) |
| Parameetrid | maksavad | mälu, aega, paralleelsust |
| Kasutatud mälu | ~4 KiB | Seadistatav (soovitatav ~19 MiB) |
| Mälu on raske | Ei | Jah |
| GPU takistus | Mõõdukas | Tugev |
| Külgkanali takistus | Hea (pidev aeg) | Hea (id-režiim) |
| Sisestuspiirang | 72 baiti | Puudub |
| OWASP soovitus 2026 | Vastuvõetav | Eelistatud |
| Ökosüsteemi küpsus | Väga lai | Alates ~2018. aastast |
Jõudlus ja vastupidavus rünnakutele
Kaasaegses serveris kulub bcrypt hinnaga = 12 umbes 250 ms ja argon2id parameetritega OWASP olenevalt masinast umbes 100-300 ms. Absoluutne aeg ei ole kriteerium: see, mis loeb, on teie kulu (üks arvutus, üks kord sisselogimise kohta) ja ründaja kulu (miljardid graafikaprotsessori arvutused, et murda).
RTX 4090 puhul saavutab hashcat umbes 200 000 bcrypt/s hinnaga = 12, võrreldes mõnekümnega tuhandeid argon2id 19 MiB juures. Sama serveripoolse arvutusaja puhul aeglustub Argon2id ründaja 5–10 korda rohkem kui bcrypt ja vahe suureneb koos uudisega GPU põlvkonnad.
PHP näited
PHP toetab nii natiivselt password_hash() kui ka password_verify()
alates PHP 7.2 Argon2i jaoks (ja 7.3 Argon2id jaoks). PHP-konstruktor haldab soola ja vormingut
automaatselt.
Krüpt
$hash = password_hash($parool, PASSWORD_BCRYPT, ['kulu' => 12]);
$ok = parool_verify($parool, $räsi);
if (password_needs_rehash($hash, PASSWORD_BCRYPT, ['cost' => 12])) {
$räsi = password_hash($parool, PASSWORD_BCRYPT, ['kulu' => 12]);
}
Argon2id
$opts = [
'mälu_kulu' => 19456, // 19 MiB
'time_cost' => 2,
'lõimed' => 1,
];
$räsi = password_hash($parool, PASSWORD_ARGON2ID, $opts);
$ok = parool_verify($parool, $räsi);
if (password_needs_rehash($hash, PASSWORD_ARGON2ID, $opts)) {
$räsi = password_hash($parool, PASSWORD_ARGON2ID, $opts);
}
Meie abil saate luua või tuvastada igat tüüpi räsi räsigeneraator ja meie räsiidentifikaator.
Soovitus
Uue rakenduse jaoks 2026. aastal valige seadetega Argon2id
OWASP baasjoonena (m=19456, t=2, p=1), mida tuleb kohandada vastavalt
sihtaeg (tavaliselt 250–500 ms). Kui säilitate olemasoleva rakenduse bcryptis, siis see
migreerumine pole kiireloomuline: bcrypt hinnaga = 12 või rohkem jääb 2026. aastal turvaliseks. Kasutage ära
password_needs_rehash() järgmisel sisselogimisel kasutajate järkjärguliseks üleviimiseks
varad Argon2idile.
Vältige paroolide jaoks kindlasti MD5, SHA-1 ja paljalt SHA-256 (vaadake meie MD5 ja SHA-256 võrdlus). Ükski neist algoritmidest pole selleks kasutuseks mõeldud.
Korduma kippuvad küsimused
Kas Bcrypt on 2026. aastal endiselt turvaline?
Jah, eeldusel, et kasutate piisavat kulu (minimaalselt 12, võimalusel 14). Bcryptil pole teadaolev krüptograafiline viga. Selle ainus nõrkus võrreldes Argon2idiga on väike jalajälg mälu, mis muudab selle GPU ja FPGA rünnakutele paremini ligipääsetavaks.
Kas me peaksime migreerima bcrypt-andmebaasi Argon2id-i?
Mitte kiiresti. Järkjärguline üleviimine koodiga password_needs_rehash() on lähenemisviis
soovitatav: iga eduka sisselogimise korral räsite parooli Argon2idis uuesti. Aasta lõpus
mõne kuu pärast viiakse enamik aktiivseid kasutajaid üle ja saate sundida a
seisvate kontode lähtestamine.
Kui suur on Argon2id jaoks õige lõimede arv?
OWASP soovitab vaikimisi p=1. p suurendamine ei tee midagi, kui teie
veebiserver töötleb juba paljusid päringuid paralleelselt ja muudab häälestamise keerulisemaks. Esikohale seada
pigem m (mälu) suurenemine, mis on GPU takistuse peamine hoob.
Mis on "krüpti dekrüptija"?
Bcrypt decryptor puudub: funktsioon on ehituselt ühesuunaline. Tööriistad kes väidavad, et nad "dekrüpteerivad" krüpti, testivad lihtsalt paroolisõnastikke voolud räsi vastu. See on täpselt sama, kui ründajal on teie laud.
Argon2i või Argon2id?
Argon2id kõigil juhtudel paroolide jaoks. Argon2i on veidi rohkem ohutu külgkanalite vastu, kuid nõrgem GPU rünnakute vastu. Argon2id kombineerib mõlema eelised ja RFC 9106 soovitab seda paroolide räsimiseks.
Kas lisaks soolale peaks lisama ka pipart?
Sool on piisav enamiku rakenduste jaoks. Paprika (salajane võti, mida hoitakse väljaspool alust andmetest ja seda kasutatakse HMAC-na enne räsi) lisab andmebaasi lekke korral kihi ilma rakendusserverit kahjustamata. Argon2id ei paku seda natiivselt, see peab olema vali käsitsi.