Nástroj hesiel Späť na generátor

Bezpečnostná príručka

Prečo Math.random nie je bezpečné pre heslá

Zistite, prečo je Math.random vhodné pre UI efekty, ale nie pre heslá, resetovacie kódy, tokeny alebo iné bezpečnostne citlivé tajomstvá.

Zhrnutie

Math.random() je všeobecná JavaScriptová pseudo-náhodná funkcia. Je užitočná pre animácie, náhodné správanie UI, príklady, hry a simulácie. Nie je určená pre kryptografickú bezpečnosť a nemala by sa používať na generovanie hesiel, resetovacích kódov, API tajomstiev, podpisových kľúčov alebo obnovovacích tokenov.

Problém

Generátor hesiel potrebuje nepredvídateľnosť voči útočníkovi, nielen hodnoty, ktoré sa používateľovi zdajú rôznorodé. Math.random() neposkytuje záruku kryptografickej bezpečnosti podľa štandardov prehliadača a implementácie sa môžu líšiť medzi enginmi.

Bezpečnejšia možnosť v prehliadači

Moderné prehliadače poskytujú crypto.getRandomValues() prostredníctvom Web Crypto API. PwdGen používa toto rozhranie a metódu odmietacieho vzorkovania, ktorá zabraňuje skresleniu pri výbere znakov. Ak toto API nie je k dispozícii, bezpečným správaním je zastaviť generovanie a vysvetliť požiadavku na kompatibilitu.

Ako skontrolovať generátor

Vyhľadajte v zdrojovom kóde Math.random. Seriózny generátor hesiel by ho nemal používať pre znaky hesla. Môže sa vyskytovať v dokumentácii vysvetľujúcej, prečo je nebezpečný, ale nie v ceste generovania.

Podrobné usmernenie

Táto príručka sa zameriava na to, prečo je Math.random nevhodné pre heslá a tajomstvá. Je určená pre vývojárov, študentov a používateľov nástrojov, ktorí kontrolujú, či generátor používa bezpečnú náhodnosť, takže praktickým cieľom nie je vytvoriť dramatické bezpečnostné tvrdenie. Cieľom je vybrať si návyk na heslá, ktorý prežije každodenné používanie: prihlasovacie formuláre, správcovia hesiel, mobilné klávesnice, obnova účtu, zdieľané zariadenia a občasná služba s podivnými validačnými pravidlami. Bezpečné odporúčanie je užitočné len vtedy, ak ho skutočný človek dokáže konzistentne dodržiavať.

Najbezpečnejším východiskovým bodom je náhodnosť plus jedinečnosť. Náhodnosť znamená, že hodnota je vybraná z veľkého priestoru kryptograficky vhodným náhodným zdrojom, nie vymyslená z narodenín, mena domáceho maznáčika, vzoru na klávesnici alebo obľúbeného citátu. Jedinečnosť znamená, že rovnaké heslo nie je použité nikde inde. Dlhé, ale znovu použité heslo môže zlyhať rýchlo po jednom nesúvisiacom úniku, zatiaľ čo jedinečné náhodné heslo obmedzí škodu na jediný účet, kde bolo použité.

Pre túto tému je praktickým prednastavením crypto.getRandomValues s odmietacím vzorkovaním namiesto Math.random. Toto prednastavenie môžete aplikovať pomocou príručky k Web Crypto API a potom uložiť výslednú hodnotu do dôveryhodného správcu hesiel. PwdGen generuje hodnoty lokálne v prehliadači pomocou Web Crypto; vygenerované heslo nie je odoslané na server PwdGen. Tento lokálny dizajn znižuje vystavenie na strane servera, ale nechráni pred každou hrozbou. Škodlivé rozšírenie prehliadača, kompromitované zariadenie, phishingová stránka alebo nebezpečné zaobchádzanie so schránkou môžu tajomstvo odhaliť aj po jeho vygenerovaní.

Najčastejšie problémy, ktorým sa treba vyhnúť, sú predvídateľné pseudo-náhodné sekvencie, modulové skreslenie, vlastné náhodné funkcie a demo kód skopírovaný do produkcie. Tieto problémy sú dôležité, pretože útočníci len zriedka musia brute-forceovať všetky možné heslá, keď im ľudské návyky poskytnú skratku. Credential stuffing, phishing, uniknuté zoznamy hesiel a zneužitie obnovy účtu sú často realistickejšie ako čisto matematické vyhľadávanie. Preto najlepšia rada kombinuje kvalitu hesla s kontrolami na úrovni účtu, ako sú MFA, prístupové kľúče, ukladanie obnovovacích kódov a pravidelná kontrola obnovovacieho e-mailu alebo telefónneho nastavenia.

Použite tento kontrolný zoznam pri aplikácii odporúčania:

Ak webová stránka odmietne ideálne nastavenie, nenuťte heslo do slabšieho vzoru ručne. Upravte jednu premennú naraz. Ak sú symboly odmietnuté, ponechajte veľké písmená, malé písmená a čísla povolené a zvýšte dĺžku. Ak je maximálna dĺžka nízka, použite najväčšiu akceptovanú dĺžku a uistite sa, že hodnota je jedinečná. Ak musí byť heslo čítané nahlas, tlačené alebo písané na televíznej či routerovej obrazovke, zvážte vylúčenie mätúcich znakov a zvýšenie dĺžky na kompenzáciu menšej abecedy.

Nakoniec si pamätajte hranice rady o heslách. Silné heslo je jedna vrstva obrany, nie záruka. Nemôže urobiť phishingovú stránku bezpečnou, opraviť malvér alebo kompenzovať službu, ktorá uchováva prihlasovacie údaje zle. Užitočný návyk je nudný, ale trvácny: vygenerujte jedinečnú hodnotu, bezpečne ju uložte, chráňte cestu obnovy a rýchlo ju vymeňte, ak máte podozrenie na odhalenie.

Bezpečný ďalší krok

Po prečítaní tejto príručky urobte jeden malý audit účtu namiesto toho, aby ste sa snažili opraviť všetko naraz. Vyberte účet, ktorý by spôsobil najviac problémov, keby bol prevzatý, potvrďte, že jeho heslo je jedinečné, a skontrolujte obnovovací e-mail, obnovovací telefón, metódu MFA a ukladanie záložných kódov. Ak je niektorá časť tohto reťazca slabá, zlepšite túto časť predtým, ako prejdete na účty s nižším rizikom. Toto poradie udržuje prácu zvládnuteľnú a chráni účty, ktoré útočníci s najväčšou pravdepodobnosťou použijú ako odrazový mostík. Prečo math.random nie je bezpečné pre heslá, najlepším výsledkom je opakovateľný návyk: generovať lokálne, starostlivo ukladať a vyhýbať sa opätovnému použitiu.

Často kladené otázky

Je Math.random niekedy v poriadku?

Áno, pre vizuálne efekty, simulácie a bežnú náhodnosť UI, ale nie pre prihlasovacie údaje alebo bezpečnostné tokeny.

Čo by mali generátory hesiel používať namiesto toho?

Mali by používať kryptografický náhodný zdroj, ako je crypto.getRandomValues() v prehliadači.

Prepína PwdGen na Math.random?

Nie. Ak Web Crypto nie je k dispozícii, PwdGen zobrazí varovanie o kompatibilite a negeneruje heslá pomocou Math.random().

Zdroje