Biztonsági útmutató
Miért nem biztonságos a Math.random jelszavakhoz
Ismerje meg, miért alkalmas a Math.random felhasználói felület effektusokhoz, de nem jelszavakhoz, visszaállító kódokhoz, tokenekhez vagy más biztonsági szempontból érzékeny titkokhoz.
Összefoglaló
A Math.random() egy általános JavaScript pszeudo-véletlen függvény. Hasznos animációkhoz, véletlenszerű UI-viselkedéshez, példákhoz, játékokhoz és szimulációkhoz. Nem kriptográfiai biztonságra tervezték, és nem használható jelszavak, visszaállító kódok, API-titkok, aláíró kulcsok vagy helyreállítási tokenek generálására.
A probléma
Egy jelszógenerátornak kiszámíthatatlanságra van szüksége egy támadóval szemben, nem csupán olyan értékekre, amelyek a felhasználó számára változatosnak tűnnek. A Math.random() nem nyújt böngésző-szabványos kriptográfiai biztonsági garanciát, és a megvalósítások eltérhetnek a motorok között.
A biztonságosabb böngésző opció
A modern böngészők biztosítják a crypto.getRandomValues() a Web Crypto API-n keresztül. A PwdGen ezt a felületet és az elutasítási mintavételezést használja, ami elkerüli a torz karakterválasztást. Ha az API nem elérhető, a biztonságos viselkedés a generálás leállítása és a kompatibilitási követelmény magyarázata.
Hogyan ellenőrizzünk egy generátort
Keresse a forráskódban a Math.random kifejezést. Egy komoly jelszógenerátor nem használhatja azt jelszókarakterekhez. Megjelenhet a dokumentációban, amely elmagyarázza, miért nem biztonságos, de nem a generálási útvonalon.
Részletes útmutató
Ez az útmutató arra összpontosít, hogy a Math.random miért nem alkalmas jelszavakhoz és titkokhoz. Fejlesztőknek, diákoknak és eszközhasználóknak íródott, akik ellenőrzik, hogy egy generátor biztonságos véletlenszerűséget használ-e, így a gyakorlati cél nem egy drámai biztonsági állítás létrehozása. A cél egy olyan jelszó-szokás kialakítása, amely túléli a mindennapi használatot: bejelentkezési űrlapok, jelszókezelők, mobil billentyűzetek, fiók-helyreállítás, megosztott eszközök és az alkalmankénti szolgáltatás furcsa érvényesítési szabályokkal. Egy biztonságos ajánlás csak akkor hasznos, ha egy valós személy következetesen követni tudja.
A legbiztonságosabb kiindulópont a véletlenszerűség plusz egyediség. A véletlenszerűség azt jelenti, hogy az értéket egy nagy térből választja ki egy kriptográfiailag megfelelő véletlen forrás, nem pedig születésnapból, háziállat névből, billentyűzet mintából vagy kedvenc idézetből találják ki. Az egyediség azt jelenti, hogy ugyanazt a jelszót sehol máshol nem használják. Egy hosszú, de újrahasznált jelszó gyorsan meghiúsulhat egy nem kapcsolódó adatszivárgás után, míg egy egyedi véletlen jelszó korlátozza a kárt arra az egyetlen fiókra, ahol használták.
Ehhez a témához egy gyakorlati előbeállítás a crypto.getRandomValues elutasítási mintavételezéssel a Math.random helyett. Ezt az előbeállítást alkalmazhatja a Web Crypto API útmutató segítségével, majd tárolja a végső értéket egy megbízható jelszókezelőben. A PwdGen helyben generál értékeket a böngészőben a Web Crypto segítségével; a generált jelszó nem kerül elküldésre egy PwdGen szerverre. Ez a helyi kialakítás csökkenti a szerveroldali kitettséget, de nem véd minden fenyegetés ellen. Egy rosszindulatú böngészőbővítmény, egy feltört eszköz, egy adathalász oldal vagy a nem biztonságos vágólapkezelés továbbra is felfedhet egy titkot a generálás után.
A leggyakoribb elkerülendő problémák a kiszámítható pszeudo-véletlen sorozatok, a modulo torzítás, az egyedi véletlen függvények és a termelésbe másolt demókód. Ezek a problémák azért számítanak, mert a támadók ritkán kényszerülnek minden lehetséges jelszó brute-force kipróbálására, amikor az emberi szokások egy gyors utat kínálnak nekik. A credential stuffing, az adathalászat, a kiszivárgott jelszólisták és a fiók-helyreállítás visszaélése gyakran reálisabb, mint egy tiszta matematikai keresés. Ezért a legjobb tanács a jelszóminőséget a fiókszintű vezérlőkkel kombinálja, mint az MFA, a passkey-k, a helyreállítási kódok tárolása és a helyreállítási e-mail vagy telefonszám rendszeres ellenőrzése.
Használja ezt az ellenőrzőlistát az ajánlás alkalmazásakor:
- Ne használja a Math.random-ot jelszavakhoz.
- Használja a Web Crypto-t böngészőkben.
- Használja a Node crypto-t vagy egy ellenőrzött csomagot CLI kódban.
- Tesztelje a véletlen visszaesési kódot.
Ha egy webhely elutasítja az ideális beállítást, ne erőltesse a jelszót kézzel gyengébb mintára. Egyszerre csak egy változót állítson be. Ha a szimbólumokat elutasítják, tartsa engedélyezve a nagybetűket, kisbetűket és számokat, és növelje a hosszt. Ha a maximális hossz alacsony, használja a legnagyobb elfogadott hosszt, és győződjön meg arról, hogy az érték egyedi. Ha a jelszót hangosan kell felolvasni, kinyomtatni vagy beírni egy TV vagy router képernyőjén, fontolja meg a zavaró karakterek kizárását és a hossz növelését a kisebb ábécé kompenzálására.
Végül ne feledje a jelszótanács határait. Egy erős jelszó egy védelmi réteg, nem garancia. Nem teheti biztonságossá az adathalász oldalt, nem javítja a kártevőket, és nem kompenzálja a gyenge hitelesítőadat-tárolást. A hasznos szokás unalmas, de tartós: generáljon egyedi értéket, tárolja biztonságosan, védje a helyreállítási útvonalat, és cserélje ki gyorsan, ha kitettségre gyanakszik.
Egy biztonságos következő lépés
Miután elolvasta ezt az útmutatót, végezzen el egy kis fiók auditot ahelyett, hogy egyszerre mindent megpróbálna javítani. Válassza ki azt a fiókot, amely a legtöbb gondot okozná, ha átvennék, erősítse meg, hogy a jelszava egyedi, és ellenőrizze a helyreállítási e-mailt, helyreállítási telefont, MFA módszert és a biztonsági kódok tárolását. Ha a lánc bármely része gyenge, javítsa azt a részt, mielőtt az alacsonyabb kockázatú fiókokra lépne. Ez a sorrend kezelhetővé teszi a munkát, és védi azokat a fiókokat, amelyeket a támadók valószínűleg ugródeszkaként használnak. Arra a kérdésre, hogy miért nem biztonságos a Math.random jelszavakhoz, a legjobb eredmény egy ismételhető szokás: generáljon helyben, tárolja gondosan, és kerülje az újrafelhasználást.
Gyakran ismételt kérdések
A Math.random valaha is rendben van?
Igen, vizuális effektusokhoz, szimulációkhoz és hétköznapi UI véletlenszerűséghez, de nem hitelesítő adatokhoz vagy biztonsági tokenekhez.
Mit használjanak helyette a jelszógenerátorok?
Kriptográfiai véletlen forrást kell használniuk, például a crypto.getRandomValues() a böngészőben.
A PwdGen visszaesik a Math.random-ra?
Nem. Ha a Web Crypto nem elérhető, a PwdGen egy kompatibilitási figyelmeztetést jelenít meg, és nem generál jelszavakat a Math.random() segítségével.