Panduan keselamatan
Mengapa Math.random Tidak Selamat untuk Kata Laluan
Ketahui mengapa Math.random sesuai untuk kesan UI tetapi tidak untuk kata laluan, kod set semula, token, atau rahsia sensitif keselamatan yang lain.
Ringkasan
Math.random() ialah fungsi pseudo-rawak JavaScript umum. Ia berguna untuk animasi, tingkah laku UI rawak, contoh, permainan, dan simulasi. Ia tidak ditentukan untuk keselamatan kriptografi dan tidak boleh digunakan untuk menjana kata laluan, kod set semula, rahsia API, kunci tandatangan, atau token pemulihan.
Masalahnya
Penjana kata laluan memerlukan ketidakbolehramalan terhadap penyerang, bukan sekadar nilai yang kelihatan pelbagai kepada pengguna. Math.random() tidak memberikan jaminan keselamatan kriptografi standard penyemak imbas, dan pelaksanaan mungkin berbeza antara enjin.
Pilihan penyemak imbas yang lebih selamat
Penyemak imbas moden menyediakan crypto.getRandomValues() melalui Web Crypto API. PwdGen menggunakan antara muka tersebut dan pensampelan penolakan, yang mengelakkan pemilihan aksara berat sebelah. Jika API itu tidak tersedia, tingkah laku selamat adalah menghentikan penjanaan dan menerangkan keperluan keserasian.
Cara menyemak penjana
Cari dalam sumber untuk Math.random. Penjana kata laluan yang serius tidak boleh menggunakannya untuk aksara kata laluan. Ia mungkin muncul dalam dokumentasi yang menerangkan mengapa ia tidak selamat, tetapi bukan dalam laluan penjanaan.
Panduan terperinci
Panduan ini memberi tumpuan kepada mengapa Math.random tidak sesuai untuk kata laluan dan rahsia. Ia ditulis untuk pembangun, pelajar, dan pengguna alat yang menyemak sama ada penjana menggunakan rawak selamat, jadi matlamat praktikal bukan untuk membuat tuntutan keselamatan yang dramatik. Matlamatnya adalah untuk memilih tabiat kata laluan yang boleh bertahan dalam penggunaan harian: borang log masuk, pengurus kata laluan, papan kekunci mudah alih, pemulihan akaun, peranti kongsi, dan perkhidmatan sekali-sekala dengan peraturan pengesahan yang pelik. Cadangan yang selamat hanya berguna jika orang sebenar boleh mengikutinya secara konsisten.
Titik permulaan paling selamat ialah rawak ditambah keunikan. Rawak bermaksud nilai dipilih daripada ruang besar oleh sumber rawak yang sesuai secara kriptografi, bukan dicipta daripada hari lahir, nama haiwan peliharaan, corak papan kekunci, atau petikan kegemaran. Keunikan bermaksud kata laluan yang sama tidak digunakan di tempat lain. Kata laluan yang panjang tetapi digunakan semula boleh gagal dengan cepat selepas satu pelanggaran yang tidak berkaitan, manakala kata laluan rawak unik mengehadkan kerosakan kepada satu akaun di mana ia digunakan.
Untuk topik ini, pratetap praktikal ialah crypto.getRandomValues dengan pensampelan penolakan dan bukannya Math.random. Anda boleh menggunakan pratetap itu dengan panduan Web Crypto API dan kemudian simpan nilai akhir dalam pengurus kata laluan yang dipercayai. PwdGen menjana nilai secara setempat dalam penyemak imbas dengan Web Crypto; kata laluan yang dijana tidak dihantar ke pelayan PwdGen. Reka bentuk setempat itu mengurangkan pendedahan sisi pelayan, tetapi ia tidak melindungi daripada setiap ancaman. Sambungan penyemak imbas berniat jahat, peranti terjejas, halaman pancingan data, atau pengendalian papan klip yang tidak selamat masih boleh mendedahkan rahsia selepas ia dijana.
Masalah paling biasa yang perlu dielakkan ialah jujukan pseudo-rawak yang boleh diramal, bias modulo, fungsi rawak tersuai, dan kod demo yang disalin ke dalam pengeluaran. Masalah ini penting kerana penyerang jarang perlu memaksa semua kemungkinan kata laluan apabila tabiat manusia memberi mereka jalan pintas. Serangan isian bukti kelayakan, pancingan data, senarai kata laluan bocor, dan penyalahgunaan pemulihan akaun selalunya lebih realistik daripada carian matematik tulen. Itulah sebabnya nasihat terbaik menggabungkan kualiti kata laluan dengan kawalan peringkat akaun seperti MFA, kunci laluan, penyimpanan kod pemulihan, dan semakan tetap tetapan e-mel atau telefon pemulihan.
Gunakan senarai semak ini semasa menggunakan cadangan:
- Jangan gunakan Math.random untuk kata laluan.
- Gunakan Web Crypto dalam penyemak imbas.
- Gunakan Node crypto atau pakej yang disemak dalam kod CLI.
- Uji untuk kod fallback yang tidak disengajakan.
Jika laman web menolak tetapan ideal, jangan paksa kata laluan ke dalam corak yang lebih lemah secara manual. Laraskan satu pembolehubah pada satu masa. Jika simbol ditolak, kekalkan huruf besar, huruf kecil, dan nombor diaktifkan dan tingkatkan panjang. Jika panjang maksimum rendah, gunakan panjang terbesar yang diterima dan pastikan nilai itu unik. Jika kata laluan mesti dibaca dengan kuat, dicetak, atau ditaip pada skrin televisyen atau penghala, pertimbangkan untuk mengecualikan aksara yang mengelirukan dan tingkatkan panjang untuk mengimbangi abjad yang lebih kecil.
Akhir sekali, ingat sempadan nasihat kata laluan. Kata laluan yang kuat adalah satu lapisan pertahanan, bukan jaminan. Ia tidak boleh menjadikan halaman pancingan data selamat, membetulkan perisian hasad, atau mengimbangi perkhidmatan yang menyimpan bukti kelayakan dengan buruk. Tabiat yang berguna adalah membosankan tetapi tahan lama: jana nilai unik, simpan dengan selamat, lindungi laluan pemulihan, dan gantikan dengan cepat jika anda mengesyaki pendedahan.
Langkah seterusnya yang selamat
Selepas membaca panduan ini, lakukan satu audit akaun kecil dan bukannya cuba membetulkan semuanya sekaligus. Pilih akaun yang akan menyebabkan masalah paling besar jika diambil alih, sahkan bahawa kata laluannya unik, dan semak e-mel pemulihan, telefon pemulihan, kaedah MFA, dan penyimpanan kod sandaran. Jika mana-mana bahagian rantai itu lemah, perbaiki bahagian itu sebelum beralih ke akaun berisiko rendah. Susunan ini memastikan kerja dapat diurus dan melindungi akaun yang paling mungkin digunakan oleh penyerang sebagai batu loncatan. Untuk mengapa math.random tidak selamat untuk kata laluan, hasil terbaik adalah tabiat yang boleh diulang: jana secara setempat, simpan dengan teliti, dan elakkan penggunaan semula.
Soalan lazim
Adakah Math.random pernah okay?
Ya, untuk kesan visual, simulasi, dan rawak UI biasa, tetapi bukan untuk bukti kelayakan atau token keselamatan.
Apakah yang patut digunakan oleh penjana kata laluan sebagai ganti?
Mereka harus menggunakan sumber rawak kriptografi seperti crypto.getRandomValues() dalam penyemak imbas.
Adakah PwdGen kembali kepada Math.random?
Tidak. Jika Web Crypto tidak tersedia, PwdGen menunjukkan amaran keserasian dan tidak menjana kata laluan dengan Math.random().