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
Gads19992015
StandartizācijaDe facto, USENIX 1999RFC 9106 (2021)
Parametrimaksāatmiņa, laiks, paralēlisms
Izmantotā atmiņa~4 KiBKonfigurējama (ieteicams aptuveni 19 MiB)
Nepietiekama atmiņa
GPU pretestībaMērenaSpēcīga
Sānu kanāla pretestībaLaba (pastāvīgs laiks)Laba (id režīms)
Ievades ierobežojums72 baitiNav
OWASP ieteikums 2026. gadamPieņemamsVēlams
Ekosistēmas briedumsĻoti plašaPlaš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.