Kiek kainuoja slaptažodis kuklioje aparatinėje įrangoje
Šiame straipsnyje
Čia esančius statistikos puslapius galima apsaugoti slaptažodžiu. To slaptažodžio maišos skaičiavimas yra vienintelė šios paslaugos operacija, kuri turi būti lėta — dėl to pavogtą maišos reikšmę brangu atakuoti. Klausimas, kiek lėta šioje aparatinėje įrangoje.
Išmatuota šią svetainę aptarnaujančiame kompiuteryje, PHP 8:
PASSWORD_DEFAULT | 560 ms | (atitinka 12 sąnaudų lygį) |
| 12 sąnaudų lygis | 595 ms | |
| 11 sąnaudų lygis | 277 ms | |
| 10 sąnaudų lygis | 138 ms |
bcrypt sąnaudų parametras yra laipsnio rodiklis: kiekvienas žingsnis padvigubina darbą. Matavimai rodo būtent tokį dvigubėjimą – geras ženklas, kad niekas kitas netrukdo.
Kodėl numatytoji reikšmė čia netinkama
PHP pakėlė numatytąjį bcrypt sąnaudų lygį nuo 10 iki 12. Staliniame kompiuteryje veikiančiame serveryje tai prasmingas patobulinimas — kelios dešimtys milisekundžių. Kuklioje aparatinėje įrangoje tai daugiau nei pusė sekundės gryno procesoriaus laiko, kompiuteryje, kuris tuo pat metu piešia skaitiklių paveikslėlius visiems kitiems.
Pusė sekundės kiekvienam prisijungimui savaime blogai. Kaip kvietimas – dar blogiau: bet kas gali kreiptis į prisijungimo galinį tašką, o kiekvienas kreipimasis sunaudoja 560 ms procesoriaus, aptarnaujančio visą svetainę. Taip slaptažodžio tikrinimas tampa pigiausia prieinama paslaugos trikdymo galimybe.
Todėl sąnaudų lygis fiksuotas ties 10, o ne paliktas numatytasis. Tai sąmoningai silpniau, nei dabar parenka PHP, ir verta pasakyti aiškiai, o ne slėpti: 10 sąnaudų lygio maišą atakuoti keturis kartus pigiau nei 12 lygio. Tai atsveria tai, ką iš tiesų saugo slaptažodis — apsilankymų skaičių puslapio matomumą, o ne paskyrą, pinigus ar tapatybę. Už jo nėra nieko, ką būtų galima perimti.
Dalis, kurią lengva praleisti
PASSWORD_DEFAULT yra sąmoningai kintanti reikšmė. Prieš daugelį metų parašytas ją naudojantis kodas su kiekvienu PHP atnaujinimu tyliai lėtės — tas pats kodas, ta pati įvestis, kelis kartus ilgesnis vykdymas. Taip ir numatyta, ir daugumai programinės įrangos tai teisinga.
Tai netinka tik tada, kai kompiuteris negali to atlaikyti, ir jokio įspėjimo tuomet nėra. Atnaujinimas pavyksta, testai sėkmingi, puslapis tebeveikia. Jis tiesiog užtrunka puse sekundės ilgiau, ir niekas į tą skaičių nežiūri, kol nenueina išmatuoti.