Panduan keamanan
Mengapa Math.random Tidak Aman untuk Kata Sandi
Pelajari mengapa Math.random cocok untuk efek UI tetapi tidak untuk kata sandi, kode reset, token, atau rahasia sensitif keamanan lainnya.
Ringkasan
Math.random() adalah fungsi pseudo-acak JavaScript umum. Ini berguna untuk animasi, perilaku UI acak, contoh, game, dan simulasi. Ini tidak ditentukan untuk keamanan kriptografi dan tidak boleh digunakan untuk menghasilkan kata sandi, kode reset, rahasia API, kunci penandatanganan, atau token pemulihan.
Masalahnya
Pembangkit kata sandi membutuhkan ketidakpastian terhadap penyerang, bukan sekadar nilai yang tampak bervariasi bagi pengguna. Math.random() tidak memberikan jaminan keamanan kriptografi standar browser, dan implementasinya mungkin berbeda antar mesin.
Opsi browser yang lebih aman
Browser modern menyediakan crypto.getRandomValues() melalui Web Crypto API. PwdGen menggunakan antarmuka itu dan rejection sampling, yang menghindari pemilihan karakter yang bias. Jika API tersebut tidak tersedia, perilaku aman adalah menghentikan pembuatan dan menjelaskan persyaratan kompatibilitas.
Cara meninjau pembangkit kata sandi
Cari sumber untuk Math.random. Pembangkit kata sandi yang serius tidak boleh menggunakannya untuk karakter kata sandi. Ini mungkin muncul dalam dokumentasi yang menjelaskan mengapa tidak aman, tetapi tidak di jalur pembuatan.
Panduan terperinci
Panduan ini berfokus pada mengapa Math.random tidak tepat untuk kata sandi dan rahasia. Ditulis untuk pengembang, mahasiswa, dan pengguna alat yang memeriksa apakah pembangkit menggunakan keacakan yang aman, sehingga tujuan praktisnya bukan untuk membuat klaim keamanan yang dramatis. Tujuannya adalah memilih kebiasaan kata sandi yang dapat bertahan dalam penggunaan sehari-hari: formulir masuk, pengelola kata sandi, keyboard ponsel, pemulihan akun, perangkat bersama, dan layanan sesekali dengan aturan validasi yang aneh. Rekomendasi yang aman hanya berguna jika orang sungguhan dapat mengikutinya secara konsisten.
Titik awal teraman adalah keacakan ditambah keunikan. Keacakan berarti nilai dipilih dari ruang besar oleh sumber acak yang sesuai secara kriptografis, bukan diciptakan dari ulang tahun, nama hewan peliharaan, pola keyboard, atau kutipan favorit. Keunikan berarti kata sandi yang sama tidak digunakan di tempat lain. Kata sandi yang panjang tetapi digunakan ulang dapat gagal dengan cepat setelah satu pelanggaran yang tidak terkait, sementara kata sandi acak yang unik membatasi kerusakan pada satu akun tempat ia digunakan.
Untuk topik ini, preset praktis adalah crypto.getRandomValues dengan rejection sampling, bukan Math.random. Anda dapat menerapkan preset itu dengan panduan Web Crypto API dan kemudian menyimpan nilai akhir di pengelola kata sandi tepercaya. PwdGen menghasilkan nilai secara lokal di browser dengan Web Crypto; kata sandi yang dihasilkan tidak dikirim ke server PwdGen. Desain lokal itu mengurangi paparan sisi server, tetapi tidak melindungi terhadap setiap ancaman. Ekstensi browser berbahaya, perangkat yang dikompromikan, halaman phishing, atau penanganan clipboard yang tidak aman masih dapat mengekspos rahasia setelah dihasilkan.
Masalah paling umum yang harus dihindari adalah urutan pseudo-acak yang dapat diprediksi, bias modulo, fungsi acak kustom, dan kode demo yang disalin ke produksi. Masalah-masalah ini penting karena penyerang jarang perlu brute-force setiap kemungkinan kata sandi ketika kebiasaan manusia memberi mereka jalan pintas. Credential stuffing, phishing, daftar kata sandi yang bocor, dan penyalahgunaan pemulihan akun seringkali lebih realistis daripada pencarian matematis murni. Itulah mengapa saran terbaik menggabungkan kualitas kata sandi dengan kontrol tingkat akun seperti MFA, passkey, penyimpanan kode pemulihan, dan peninjauan rutin email pemulihan atau pengaturan telepon.
Gunakan daftar periksa ini saat menerapkan rekomendasi:
- Jangan gunakan Math.random untuk kata sandi.
- Gunakan Web Crypto di browser.
- Gunakan Node crypto atau paket terverifikasi di kode CLI.
- Uji kode fallback yang tidak disengaja.
Jika situs web menolak pengaturan ideal, jangan paksa kata sandi ke pola yang lebih lemah secara manual. Sesuaikan satu variabel pada satu waktu. Jika simbol ditolak, aktifkan huruf besar, huruf kecil, dan angka serta tambah panjang. Jika panjang maksimum rendah, gunakan panjang terbesar yang diterima dan pastikan nilainya unik. Jika kata sandi harus dibacakan, dicetak, atau diketik di layar televisi atau router, pertimbangkan untuk mengecualikan karakter yang membingungkan dan menambah panjang untuk mengimbangi alfabet yang lebih kecil.
Terakhir, ingat batas saran kata sandi. Kata sandi yang kuat adalah satu lapis pertahanan, bukan jaminan. Itu tidak dapat membuat halaman phishing aman, memperbaiki malware, atau mengimbangi layanan yang menyimpan kredensial dengan buruk. Kebiasaan yang berguna membosankan tetapi tahan lama: hasilkan nilai unik, simpan dengan aman, lindungi jalur pemulihan, dan ganti dengan cepat jika Anda mencurigai paparan.
Langkah aman selanjutnya
Setelah membaca panduan ini, lakukan satu audit akun kecil alih-alih mencoba memperbaiki semuanya sekaligus. Pilih akun yang akan menyebabkan masalah terbesar jika diambil alih, konfirmasi bahwa kata sandinya unik, dan periksa email pemulihan, telepon pemulihan, metode MFA, dan penyimpanan kode cadangan. Jika ada bagian dari rantai itu yang lemah, perbaiki bagian itu sebelum beralih ke akun berisiko lebih rendah. Urutan ini menjaga pekerjaan tetap terkelola dan melindungi akun yang paling mungkin digunakan penyerang sebagai batu loncatan. Untuk mengapa math.random tidak aman untuk kata sandi, hasil terbaik adalah kebiasaan yang dapat diulang: hasilkan secara lokal, simpan dengan hati-hati, dan hindari penggunaan ulang.
Pertanyaan yang sering diajukan
Apakah Math.random pernah boleh digunakan?
Ya, untuk efek visual, simulasi, dan keacakan UI biasa, tetapi tidak untuk kredensial atau token keamanan.
Apa yang harus digunakan pembangkit kata sandi sebagai gantinya?
Mereka harus menggunakan sumber acak kriptografis seperti crypto.getRandomValues() di browser.
Apakah PwdGen menggunakan Math.random sebagai fallback?
Tidak. Jika Web Crypto tidak tersedia, PwdGen menampilkan peringatan kompatibilitas dan tidak menghasilkan kata sandi dengan Math.random().