Çfarë kushton një fjalëkalim në pajisje modeste
Për përmbajtjen dhe kontrollin e saj
Në këtë artikull
Faqet e statistikave këtu mund të mbrohen me fjalëkalim. Llogaritja e hash-it të tij është i vetmi veprim në këtë shërbim që duhet të jetë i ngadaltë — kjo e bën të kushtueshëm sulmin ndaj një hash-i të vjedhur. Pyetja është sa i ngadaltë, në këtë pajisje.
E matur në makinën ku punon ky uebsajt, PHP 8:
PASSWORD_DEFAULT | 560 ms | (përcaktohet si kosto 12) |
| kosto 12 | 595 ms | |
| kosto 11 | 277 ms | |
| kosto 10 | 138 ms |
Parametri cost i bcrypt është eksponent: çdo hap dyfishon punën. Matjet tregojnë pikërisht këtë dyfishim, shenjë e mirë se asgjë tjetër nuk po ndërhyn.
Pse parazgjedhja është e gabuar këtu
PHP e rriti koston e parazgjedhur të bcrypt nga 10 në 12. Në një server me pajisje të një kompjuteri tryeze kjo është përmirësim i arsyeshëm — disa dhjetëra milisekonda. Në pajisje modeste është më shumë se gjysmë sekonde vetëm CPU, në një makinë që në të njëjtën kohë vizaton figura numëruesish për të gjithë të tjerët.
Gjysmë sekonde për hyrje është keq edhe më vete. Është më keq si ftesë: kushdo mund të thërrasë pikën e hyrjes dhe çdo thirrje shpenzon 560 ms nga CPU-ja që i shërben të gjithë uebsajtit. Kjo e kthen verifikimin e fjalëkalimit në rrugën më të lirë të disponueshme për një sulm mohimi shërbimi.
Prandaj kostoja fiksohet në 10, në vend që të lihet te parazgjedhja. Kjo është qëllimisht më e dobët se zgjedhja e tanishme e PHP dhe duhet thënë qartë, jo fshehur: sulmi ndaj një hash-i me kosto 10 është katër herë më i lirë se ndaj një hash-i me kosto 12. Kompensimi qëndron tek ajo që mbron vërtet fjalëkalimi — dukshmëria e një faqeje me numra vizitash, jo llogari, para apo identitet. Pas saj nuk ka asgjë për të marrë nën kontroll.
Pjesa që mund të mos vihet re
PASSWORD_DEFAULT është vlerë që ndryshon me qëllim. Kodi i shkruar vite më parë që e përdor do të ngadalësohet në heshtje me çdo përditësim të PHP — i njëjti burim, të njëjtat të dhëna hyrëse, disa herë më shumë kohë ekzekutimi. Kjo është sjellja e synuar dhe e duhur për shumicën e programeve.
Është e gabuar vetëm kur makina nuk e përballon dot dhe nuk ka paralajmërim kur nuk mundet. Përditësimi kryhet, testet kalojnë, faqja ende punon. Thjesht merr gjysmë sekonde më shumë dhe askush nuk e sheh atë numër pa shkuar ta masë.