Bcrypt vs Argon2: liema password hash fl-2026

BcryptuArgon2huma ż-żewġ funzjonijiet tal-hash tal-kelma l-aktar passwords użati llum. It-tnejn huma ddisinjati biex ikunu bil-mod u reżistenti Attakki tal-forza bruta, b'differenza MD5 jew SHA-256 li huma veloċi bil-kostruzzjoni. Argon2a rebaħ il-Password Hashing Competition fl-2015 u issa hija l-għażla rakkomandata mill-OWASP għal applikazzjonijiet ġodda. Bcrypt jibqa’ għażla eċċellenti, matura u appoġġjata b’mod wiesa’. Dan Dan l-artikolu jispjega d-differenzi preċiżament biex jgħinek tiddeċiedi.

Għaliex hash tal-password huwa differenti

Hash kriptografiku klassiku bħal SHA-256 huwa ddisinjat biex ikun mgħaġġel: irridu nagħtu hash GB ta' dejta kull sekonda. Għall-passwords, din il-proprjetà hija default: attakkant li tirkupra l-tabella ta 'l-utenti tiegħek tista' tittestja biljuni ta 'passwords kull sekonda fuq a GPU. Funzjoni ta 'hashing tal-password (PHF), għall-kuntrarju, tfittex li tkun:

  • Bil-mod mill-kostruzzjoni, b'parametru tal-ispiża aġġustabbli
  • Mielħa, biex jipprevjenu tabelli tal-qawsalla u attakki paralleli fuq kontijiet multipli
  • Reżistenti għal ħardwer speċjalizzat (GPU, FPGA, ASIC) biex tillimita t-tħaffif kontradittorju

Il-parametru tal-melħ u tal-ispiża huma maħżunamal-hash, fi string waħda tipikament tal-forma $algo$params$sel$hash. Dan jippermetti li l-ispiża tiżdied maż-żmien mingħajr seħħ migrazzjoni immedjata ta 'hashes qodma.

Bcrypt: 1999, Blowfish, parametru tal-ispiża

Bcrypttfassal minn Niels Provos u David Mazières għal OpenBSD fl-1999. Huwa ibbażat fuq l-algoritmu tal-kriptaġġ Blowfish, li minnu jisfrutta l-ispiża għolja tal-inizjalizzazzjoni tal tabelli. Bcrypt jesponi parametru wieħed, kost (jew rounds), li jiddefinixxi l- numru ta' iterazzjonijiet fil-forma 2^spiża. Iż-żieda fl-ispiża b'1 tirdoppja l-ħin tal-kalkolu.

Format tal-output tipiku:

$2y$12$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy
 |  |  |                      |
 |  |  spiża = 12 melħ + hash fil-bażi64
 |  varjant (2y = openbsd)
 algo bcrypt

Bcrypt jillimita l-input għal 72 bytes: password itwal hija maqtugħa skiet, li hija nassa magħrufa. Is-soluzzjoni tas-soltu hija li pre-hash ma SHA-256 imbagħad base64 encode qabel bcrypt, iżda dan jista' jintroduċi bytes nulli problematiċi fuq xi implimentazzjonijiet. Argon2 m'għandux dan il-limitu.

Argon2: 2015, rebbieħ tal-PHC, 3 varjanti

Argon2tfassal minn Alex Biryukov, Daniel Dinu u Dmitry Khovratovich. Huwa għandu rebaħ il-Password Hashing Competition f'Lulju 2015 u hija standardizzata minn RFC 9106 (2021). Argon2 jesponi tliet parametri:

  • Kost tal-memorja (m): kwantità ta' memorja użata, f'KiB
  • Kost tal-ħin (t): numru ta’ iterazzjonijiet fuq il-blokka tal-memorja
  • Paralleliżmu (p): numru ta' ħjut paralleli

Argon2 jeżisti fi tliet varjanti:

  • Argon2d: aċċess għall-memorja li jiddependi mid-dejta. Aktar reżistenti għall-attakki tal-GPU, iżda suxxettibbli għall-attakki tal-kanali tal-ġenb (timing, cache).
  • Argon2i: aċċess għall-memorja indipendenti mid-dejta. Reżistenti għall-kanali tal-ġenb, kemmxejn inqas reżistenti għall-attakki tal-GPU.
  • Argon2id: ibridu, jibda fil-mod i imbagħad jaqleb għall-mod d. Rakkomandat awtomatikamentminn RFC 9106 u OWASP.

Il-parametri rakkomandati mill-OWASP fl-2026 għal Argon2id: m=19456 KiB (19 MiB), t=2, p=1. Format tal-output tipiku:

$argon2id$v=19$m=19456,t=2,p=1$c2VsX2FsZWF0b2lyZQ$aGFzaF9jYWxjdWxl
 |         |   |                  |                 |
 |         |   parametri tal-melħ base64 base64 hash
 |         verżjoni
 algo argon2id

Għaliex Argon2id huwa rakkomandat

Ir-reżistenza għal tagħmir speċjalizzat illum hija l-kriterju deċiżiv. Bcrypt juża ftit memorja (~ 4 KiB), li tippermetti GPU high-end biex tittestja mijiet ta 'eluf ta' hashes kull sekonda. Argon2id huwa iebsa għall-memorja: seħħ diversi MiB ta 'memorja għal kull tentattiv inaqqas drastikament il-paralleliżmu li jista 'jinkiseb fuq GPU u jagħmel id-disinn ta' ASICs dedikati ekonomikament mhux profittabbli.

Il-mod ibridu ta' Argon2id jipprovdi wkoll protezzjoni kontra attakki fuq il-kanali tal-ġenb matul l-ewwel nofs tal-kalkolu. Hija din il-kombinazzjoni li tiġġustifika l-post tagħha rakkomandazzjoni awtomatika minn OWASP, NIST SP 800-63B (minn ir-reviżjoni 2024) u RFC 9106.

Tabella ta' tqabbil

Prestazzjoni u reżistenza għall-attakki

Fuq server modern, bcrypt bi prezz=12 jieħu madwar 250 ms u argon2id b'parametri OWASP madwar 100-300 ms skond il-magna. Iż-żmien assolut mhuwiex il-kriterju: dak li jgħodd hu il-proporzjon bejn l-ispiża tiegħek (kalkolu wieħed, darba għal kull login) u dik tal-attakkant (biljuni kalkoli fuq GPU biex tkisser dump).

Fuq RTX 4090, hashcat jilħaq madwar 200,000 bcrypt/s bi spiża = 12, meta mqabbel ma 'ftit għexieren eluf ta' argon2id f'19 MiB. Għall-istess ħin ta 'kalkolu tan-naħa tas-server, Argon2id jonqos l-attakkant5 sa 10 darbiet aktarminn bcrypt, u d-distakk qed jikber mal-aħbarijiet ġenerazzjonijiet ta’ GPUs.

Eżempji PHP

PHP jappoġġja kemm b'mod nattiv permezz ta' password_hash() kif ukoll password_verify() peress PHP 7.2 għal Argon2i (u 7.3 għal Argon2id). Il-kostruttur PHP jamministra l-melħ u l-format awtomatikament.

Bcrypt

$hash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);
$ok = password_verify($password, $hash);

jekk (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,
    'ħjut' => 1,
];
$hash = password_hash($password, PASSWORD_ARGON2ID, $opts);
$ok = password_verify($password, $hash);

jekk (password_needs_rehash ($hash, PASSWORD_ARGON2ID, $opts)) {
    $hash = password_hash($password, PASSWORD_ARGON2ID, $opts);
}

Tista 'tiġġenera jew tidentifika hashes ta' kull tip ma 'tagħna ġeneratur tal-hash u l-l-identifikatur tal-hash tagħna.

Rakkomandazzjoni

Għal applikazzjoni ġdida fl-2026, agħżelArgon2idb'settings OWASP bħala linja bażi (m=19456, t=2, p=1), li għandha tiġi aġġustata skont ħin fil-mira (tipikament 250 sa 500 ms). Jekk iżżomm applikazzjoni eżistenti f'bcrypt, dan m'hemm l-ebda urġenza għall-migrazzjoni: bcrypt bi prezz=12 jew aktar jibqa' sigur fl-2026. Ħu vantaġġ minn password_needs_rehash() fil-login li jmiss biex timigra gradwalment l-utenti assi lil Argon2id.

Evita assolutament MD5, SHA-1 u SHA-256 vojta għall-passwords (ara tagħna tqabbil MD5 vs SHA-256). L-ebda wieħed minn dawn l-algoritmi ma huwa ddisinjat għal dan l-użu.

Mistoqsijiet frekwenti

Bcrypt għadu sigur fl-2026?

Iva, sakemm tuża spiża suffiċjenti (12 minimu, 14 jekk possibbli). Bcrypt m'għandux difett kriptografiku magħruf. L-unika dgħjufija tiegħu relattiva għal Argon2id hija l-impronta żgħira tagħha memorja, li tagħmilha aktar aċċessibbli għall-attakki GPU u FPGA.

Għandna nimigraw database bcrypt għal Argon2id?

Mhux urġenti. Migrazzjoni gradwali b'password_needs_rehash() hija l-approċċ rakkomandat: ma' kull login b'suċċess, terġa' tħaffef il-password f'Argon2id. Fl-aħħar ta’ ftit xhur, il-maġġoranza tal-utenti attivi huma emigrati, u tista 'sfurzaw a reset għal kontijiet inattivi.

X'inhu n-numru t-tajjeb ta' ħjut għal Argon2id?

L-OWASP jirrakkomanda p=1 b'mod awtomatiku. Iż-żieda ta' p ma tagħmel xejn jekk tiegħek web server diġà jipproċessa ħafna talbiet b'mod parallel, u jikkomplika l-irfinar. Ipprijoritizza pjuttost iż-żieda ta 'm (memorja) li hija l-lieva ewlenija tar-reżistenza tal-GPU.

X'inhu “bcrypt decrypter”?

M'hemm l-ebda decryptor bcrypt: il-funzjoni hija one-way bil-kostruzzjoni. L-għodod li jsostnu li "jiddeċifraw" bcrypt qed jittestjaw biss dizzjunarji tal-password kurrenti kontra l-hash. Dan huwa eżattament l-istess bħal attakkant li jkollu l-mejda tiegħek.

Argon2i jew Argon2id?

Argon2idfil-każijiet kollha għall-passwords. Argon2i huwa kemmxejn aktar sikur kontra l-kanali tal-ġenb iżda aktar dgħajfa kontra l-attakki tal-GPU. Argon2id jgħaqqad benefiċċji tat-tnejn u huwa rrakkomandat b'mod espliċitu mill-RFC 9106 għall-hashing tal-password.

Għandna nżidu l-bżar flimkien mal-melħ?

Il-melħ huwa biżżejjed għall-maġġoranza l-kbira tal-applikazzjonijiet. Bżar (ċavetta sigrieta maħżuna barra l-bażi tad-data u użat bħala HMAC qabel il-hash) iżid saff fil-każ ta 'tnixxija tad-database mingħajr ma jiġi kompromess is-server tal-applikazzjoni. Argon2id ma jipprovdihiex b'mod nattiv, għandu jkun arloġġ manwalment.

Kriterju Bcrypt Argon2id
Sena19992015
StandardizzazzjoniDe facto, USENIX 1999RFC 9106 (2021)
Parametriispiżamemorja, ħin, paralleliżmu
Memorja użata~4 KiBKonfigurabbli (~19 MiB rakkomandati)
Bil-memorjaLeIva
Reżistenza tal-GPUModerataQawwija
Reżistenza tal-kanal tal-ġenbTajjeb (ħin kostanti)Tajjeb (modalità id)
Limitu tad-dħul72 bytesXejn
Rakkomandazzjoni tal-OWASP 2026AċċettabbliIppreferut
Maturità tal-ekosistemaWesa' ħafnaWesa' mill-~2018