Bcrypt vs Argon2: kura parole ir sajaukta 2026. gadā
Bcrypt un Argon2 ir divas vārdu jaucējfunkcijas mūsdienās visbiežāk izmantotās paroles. Abi ir izstrādāti tā, lai tie būtu lēni un izturīgi pret Brutāla spēka uzbrukumi, atšķirībā no MD5 vai SHA-256, kas pēc konstrukcijas ir ātri. Argons2a 2015. gadā uzvarēja paroļu jaukšanas konkursā un tagad ir OWASP ieteiktā izvēle jauniem lietojumiem. Bcrypt joprojām ir lieliska, nobriedusi un plaši atbalstīta izvēle. Šis Šajā rakstā ir precīzi izskaidrotas atšķirības, lai palīdzētu jums izlemt.
Kāpēc paroles sajaukšana atšķiras
Klasisks kriptogrāfijas jaucējs, piemēram, SHA-256, ir izstrādāts tā, lai tas būtu ātrs: mēs vēlamies jaukt GB datu sekundē. Parolēm šis rekvizīts ir noklusējuma rekvizīts: uzbrucējs kas izgūst jūsu lietotāju tabulu, var pārbaudīt miljardus paroļu sekundē uz a GPU. Paroles jaukšanas funkcija (PHF), gluži pretēji, cenšas būt:
- Lēns pēc uzbūves ar regulējamu izmaksu parametru
- Sāļš, lai novērstu varavīksnes tabulas un paralēlus uzbrukumus vairākiem kontiem.
- Izturīga pret specializētu aparatūru (GPU, FPGA, ASIC), lai ierobežotu pretrunīgo ātrumu
Sāls un izmaksu parametrs parasti tiek saglabāts kopā ar vienā virknē
formā $algo$params$sel$hash. Tas ļauj izmaksām laika gaitā palielināties bez
piespiest tūlītēju veco jaucēju migrāciju.
Bcrypt: 1999, Blowfish, izmaksu parametrs
Bcrypt izstrādāja Nīls Provoss un Deivids Mazjērs priekš OpenBSD 1999. gadā. Tā ir
pamatojoties uz Blowfish šifrēšanas algoritmu, kurā tiek izmantotas augstās inicializācijas izmaksas.
tabulas. Bcrypt atklāj vienu parametru cost (vai rounds), kas nosaka
iterāciju skaits formā 2^maksa. Izmaksu palielināšana par 1 dubulto aprēķina laiku.
Tipisks izvades formāts:
$2y$12$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
| | | |
| | izmaksas = 12 sāls + hash in base64
| variants (2y = openbsd)
algo bcrypt
Bcrypt ierobežo ievadi līdz 72 baitiem: garāka parole tiek klusi saīsināta, kas ir zināms lamatas. Parastais risinājums ir iepriekš jaukt ar SHA-256 un pēc tam base64 kodēt pirms tam bcrypt, taču tas dažās implementācijās var radīt problemātiskus nulles baitus. Argon2 šī ierobežojuma nav.
Argon2: 2015, PHC uzvarētājs, 3 varianti
Argon2 izstrādāja Alekss Birjukovs, Daniels Dinu un Dmitrijs Khovratovičs. Viņam ir jūlijā uzvarēja paroļu jaukšanas konkursā. 2015, un to standartizē RFC 9106 (2021). Argon2 atklāj trīs parametrus:
- Atmiņas izmaksas (
m): izmantotās atmiņas daudzums, KiB - Laika izmaksas (
t): atkārtojumu skaits atmiņas blokā - Paralēlisms (
p): paralēlo pavedienu skaits
Argon2 pastāv trīs variantos:
- Argon2d: no datiem atkarīga piekļuve atmiņai. Izturīgāks pret GPU uzbrukumiem, taču jutīgs pret sānu kanālu uzbrukumiem (laiks, kešatmiņa).
- Argon2i: no datiem neatkarīga piekļuve atmiņai. Izturīgs pret sānu kanāliem, nedaudz mazāk izturīgs pret GPU uzbrukumiem.
- Argon2id: hibrīds, sākas režīmā i, pēc tam pārslēdzas uz režīmu d. Ieteica pēc noklusējuma RFC 9106 un OWASP.
OWASP ieteiktie parametri 2026. gadā argon2id: m=19456 KiB (19 MiB),
t=2, p=1. Tipisks izvades formāts:
$argon2id$v=19$m=19456,t=2,p=1$c2VsX2FsZWF0b2lyZQ$aGFzaF9jYWxjdWxl
| | | | |
| | base64 sāls parametri base64 hash
| versija
algo argon2id
Kāpēc ieteicams lietot Argon2id
Izturība pret specializētu aprīkojumu mūsdienās ir izšķirošais kritērijs. Bcrypt izmanto maz atmiņa (~ 4 KiB), kas ļauj augstākās klases GPU pārbaudīt simtiem tūkstošu jaucēju sekundē. Argon2id ir cieta atmiņa: piespiediet vairākus MiB atmiņas vienā mēģinājumā krasi samazina paralēlismu, kas sasniedzams GPU, un padara īpašu ASIC dizainu ekonomiski neizdevīgi.
Argon2id hibrīdrežīms papildus nodrošina aizsardzību pret sānu kanālu uzbrukumiem aprēķina pirmajā pusē. Tieši šī kombinācija attaisno tās vietu Noklusējuma ieteikums no OWASP, NIST SP 800-63B (kopš 2024. gada pārskatīšanas) un RFC 9106.
Salīdzināšanas tabula
| Kritērijs | Bcrypt | Argon2id |
|---|---|---|
| Gads | 1999 | 2015 |
| Standartizācija | De facto, USENIX 1999 | RFC 9106 (2021) |
| Parametri | maksā | atmiņa, laiks, paralēlisms |
| Izmantotā atmiņa | ~4 KiB | Konfigurējama (ieteicams aptuveni 19 MiB) |
| Nepietiekama atmiņa | Nē | Jā |
| GPU pretestība | Mērena | Spēcīga |
| Sānu kanāla pretestība | Laba (pastāvīgs laiks) | Laba (id režīms) |
| Ievades ierobežojums | 72 baiti | Nav |
| OWASP ieteikums 2026. gadam | Pieņemams | Vēlams |
| Ekosistēmas briedums | Ļoti plaša | Plaša kopš aptuveni 2018. gada |
Veiktspēja un izturība pret uzbrukumiem
Mūsdienīgā serverī bcrypt ar izmaksu = 12 aizņem apmēram 250 ms un argon2id ar parametriem OWASP aptuveni 100-300 ms atkarībā no iekārtas. Absolūtais laiks nav kritērijs: tas, kas ir svarīgs, ir attiecība starp jūsu izmaksām (viens aprēķins, vienu reizi par pieteikšanos) un uzbrucēja izmaksām (miljardi aprēķini par GPU, lai pārtrauktu izgāztuvi).
Izmantojot RTX 4090, hashcat sasniedz aptuveni 200 000 bcrypt/s par maksu = 12, salīdzinot ar dažiem desmitiem tūkstošiem argon2id ar ātrumu 19 MiB. Tajā pašā servera puses aprēķina laikā Argon2id palēninās uzbrucējs 5 līdz 10 reizes vairāk nekā bcrypt, un atšķirība ar ziņām palielinās GPU paaudzes.
PHP piemēri
PHP atbalsta gan sākotnēji, izmantojot password_hash() un password_verify().
kopš PHP 7.2 priekš Argon2i (un 7.3 priekš Argon2id). PHP konstruktors pārvalda sāli un formātu
automātiski.
Bcrypt
$hash = password_hash($parole, PASSWORD_BCRYPT, ['maksa' => 12]);
$ok = password_verify($parole, $jaucējs);
if (password_needs_rehash($hash, PASSWORD_BCRYPT, ['cost' => 12])) {
$hash = password_hash($parole, PASSWORD_BCRYPT, ['maksa' => 12]);
}
Argon2id
$opts = [
'atmiņas_maksa' => 19456, // 19 MiB
'time_cost' => 2,
'pavedieni' => 1,
];
$hash = password_hash($parole, PASSWORD_ARGON2ID, $opts);
$ok = password_verify($parole, $jaucējs);
if (password_needs_rehash($hash, PASSWORD_ARGON2ID, $opts)) {
$hash = password_hash($parole, PASSWORD_ARGON2ID, $opts);
}
Ar mūsu palīdzību jūs varat ģenerēt vai identificēt visu veidu jaukumus jaucēju ģenerators un mūsu jaukšanas identifikators.
Ieteikums
Jaunai lietojumprogrammai 2026. gadā izvēlieties Argon2id ar iestatījumiem
OWASP kā bāzes līnija (m=19456, t=2, p=1), kas jāpielāgo atbilstoši
mērķa laiks (parasti no 250 līdz 500 ms). Ja saglabājat esošu programmu bcrypt, tas
nav steidzami migrēt: bcrypt par maksu = 12 vai vairāk saglabās drošību 2026. gadā. Izmantojiet priekšrocības, ko sniedz
password_needs_rehash() nākamajā pieteikšanās reizē, lai pakāpeniski migrētu lietotājus
aktīvus Argon2id.
Pilnīgi izvairieties no MD5, SHA-1 un tukšas SHA-256 parolēm (skatiet mūsu MD5 un SHA-256 salīdzinājums). Neviens no šiem algoritmiem nav paredzēts šim lietojumam.
Bieži uzdotie jautājumi
Vai Bcrypt joprojām ir drošs 2026. gadā?
Jā, ja izmantojat pietiekamas izmaksas (minimālais 12, ja iespējams, 14). Bcrypt nav zināms kriptogrāfijas defekts. Tās vienīgais trūkums salīdzinājumā ar Argon2id ir tā mazais nospiedums atmiņa, kas padara to pieejamāku GPU un FPGA uzbrukumiem.
Vai mums vajadzētu migrēt bcrypt datu bāzi uz Argon2id?
Nav steidzami. Pakāpeniska migrācija ar password_needs_rehash() ir pieeja.
ieteicams: ar katru veiksmīgu pieteikšanos jūs atkārtoti sajaucat paroli programmā Argon2id. Beigās
pēc dažiem mēnešiem lielākā daļa aktīvo lietotāju tiek migrēti, un jūs varat piespiest a
atiestatīt neaktīviem kontiem.
Kāds ir pareizais Argon2id pavedienu skaits?
OWASP pēc noklusējuma iesaka p=1. p palielināšana neko nedara, ja jūsu
tīmekļa serveris jau paralēli apstrādā daudz pieprasījumu un apgrūtina regulēšanu. Noteikt prioritāti
drīzāk m (atmiņas) palielināšana, kas ir galvenā GPU pretestības svira.
Kas ir “šifrēšanas atšifrētājs”?
Nav bcrypt atšifrētāja: funkcija pēc konstrukcijas ir vienvirziena. Instrumenti kuri apgalvo, ka “atšifrē” bcrypt, tikai pārbauda paroļu vārdnīcas straumes pret hash. Tas ir tieši tas pats, kas uzbrucējam ir jūsu galds.
Argon2i vai Argon2id?
Argon2id visos gadījumos parolēm. Argon2i ir nedaudz vairāk drošs pret sānu kanāliem, bet vājāks pret GPU uzbrukumiem. Argon2id kombaini Abu priekšrocības, un RFC 9106 to īpaši iesaka paroles jaukšanai.
Vai papildus sālim jāpievieno pipari?
Lielākajai daļai lietojumu pietiek ar sāli. Pipari (slepenā atslēga, kas tiek glabāta ārpus pamatnes datu un izmantots kā HMAC pirms jaukšanas) pievieno slāni datu bāzes noplūdes gadījumā neapdraudot lietojumprogrammu serveri. Argon2id to nenodrošina sākotnēji, tā tam ir jābūt sastādiet manuāli.