Teks & alat sehari-hari · Generator Kata Sandi
crypto.getRandomValues vs Math.random: mengapa ini penting untuk kata sandi
· Cara kerjanya
kata sandi web-kripto keserampangan
Menjelaskan perbedaan antara generator nomor acak untuk keperluan umum browser dan generator nomor kriptografiknya, mengapa prediktabilitas berakibat fatal bagi kata sandi, dan cara mengetahui alat mana yang digunakan.
Cukup acak untuk permainan dadu, bukan untuk kata sandi — dua jenis keacakan yang ditawarkan browser
Browser dapat menawarkan lebih dari satu sumber nilai yang terlihat tidak beraturan, namun gangguan visual bukanlah bukti bahwa suatu urutan cocok untuk kredensial. ToolAcre menggambar batasan produk yang tegas: setiap pilihan kata, pilihan pembatas, pilihan karakter, dan pertukaran acak melewati satu fungsi bilangan bulat aman yang didukung oleh `crypto.getRandomValues`. Jika API tersebut tidak dapat digunakan, laman akan menonaktifkan pembuatan daripada menghasilkan pengganti yang tampak masuk akal.
Penolakan tersebut lebih penting daripada apakah dua keluaran sampel tampak campur aduk. Sumber yang dapat diprediksi tetap dapat mencetak huruf, angka, dan kata-kata yang terlihat meyakinkan bagi seseorang. Oleh karena itu, penerapannya membuat sumber dapat diaudit dan kegagalannya terlihat. Ia tidak mengklaim bahwa nilai apa pun yang dihasilkan aman untuk setiap lingkungan; browser atau perangkat yang disusupi masih dapat membaca apa yang ditampilkan halaman.
Untuk apa Math.random — keacakan semu yang cepat dan unggulan yang keluarannya dapat direkonstruksi dari beberapa pengamatan
Buku kerja menjelaskan Math.random sebagai keacakan semu unggulan yang dapat direkonstruksi dari beberapa pengamatan, namun itu adalah klaim implementasi umum yang tidak dibuat oleh repositori ini untuk setiap mesin JavaScript. Fakta lokal lebih sederhana dan kuat untuk produk ini: file generator produksi tidak memanggil `Math.random`. Pengujian tingkat sumber menghapus komentar, memindai kode yang dapat dieksekusi, dan gagal jika panggilan tersebut muncul di mana pun di mesin atau aplikasi kata sandi.
Perbedaan ini menghalangi artikel mengubah aturan implementasi menjadi kuliah sejarah browser universal. ToolAcre tidak perlu mengkarakterisasi setiap algoritma Math.random yang mungkin untuk menolak API untuk pembuatan kata sandi. Paketnya menerima Web Crypto atau sumber aman yang disuntikkan yang digunakan oleh pengujian, dan tidak memperlihatkan opsi produksi untuk seed, mode deterministik, atau fallback yang lemah.
Apa yang dibuktikan oleh repositori ini tentang Math.random: tidak ada dalam pembuatan produksi
`createWebCryptoSource` mencari `getRandomValues` yang dapat dipanggil, lalu menggabungkan metode tersebut sebagai sumber paket acak. Aplikasi melakukan pemeriksaan tambahan sebelum mengaktifkan kontrol: aplikasi meminta objek kripto global untuk mengisi array bertipe satu elemen di dalam blok try. Itu menangkap lingkungan terbatas di mana properti itu ada tetapi hilang saat digunakan, daripada mempercayai pemeriksaan fitur yang dangkal.
Sumber berhenti di batas API browser. Ini tidak membuktikan kumpulan sistem operasi, instruksi perangkat keras, atau desain penyemaian ulang mana yang ada di bawah browser tertentu. Detail tersebut bervariasi di bawah antarmuka dan memerlukan dokumentasi platform. Apa yang dibuktikan oleh kode tersebut adalah bahwa byte tiba melalui metode Web Crypto dan pembangkitan tersebut tidak dilakukan ketika penyelidikan gagal.
Apa yang crypto.getRandomValues lakukan di sini: mengisi array yang diketik melalui browser API
Prediktabilitas berbahaya karena generator kredensial seharusnya membuat pilihan baru yang tidak dapat direproduksi oleh pengamat dari keluaran sebelumnya. ToolAcre mendukung tujuan tersebut dengan menolak jalur produksi deterministik, memusatkan setiap undian dan menguji bahwa API yang lemah tidak ada. Itu tidak menjanjikan kekebalan dari tangkapan layar, ekstensi, malware, phishing, penggunaan ulang kata sandi, atau layanan yang salah menangani kredensial setelah penyerahan.
Batasan tersebut mencegah kesalahan kategori yang umum: pembuatan membahas bagaimana seorang kandidat dipilih, bukan segala sesuatu yang terjadi kemudian. Paket mengembalikan string dan tidak mencatat atau menyimpannya. Halaman tersebut menyimpan satu nilai saat ini di memori dan menjadikannya sebagai teks. Penyimpanan kata sandi, transmisi, pemulihan akun, dan kebijakan otentikasi tetap menjadi tanggung jawab sistem lain.
Membaca kode — cara memeriksa API halaman mana yang digunakan, dan mengapa halaman terbuka dan dapat diperiksa lebih mudah dipercaya
Pembacaan kode dimulai di `packages/password-generator/src/index.js`, yang kontraknya menyatakan bahwa setiap keputusan acak mencapai `secureRandomInt`. File implementasinya kemudian menunjukkan `getRandomValues`, rejection sampling, dan kesalahan eksplisit. Terakhir, `no-math-random.test.js` dan suite keamanan kata sandi yang lebih luas membuat jaminan negatif tersebut dapat diuji, alih-alih membiarkan “kami tidak pernah menggunakan Math.random” sebagai komentar yang tidak diuji.
Open source saja tidak membuat kode menjadi benar, namun memberikan lapisan konkret bagi pengulas untuk diperiksa. Telusuri sumber acak, ikuti penelepon melalui pilihan dan pengacakan, dan periksa apa yang terjadi jika API hilang. Tinjauan yang dapat dipercaya harus mampu menyebutkan jalur keberhasilan dan jalur penolakan, bukan menyimpulkan keamanan dari branding.
Contoh praktis - rutinitas pemilihan kata yang sama ditulis dengan dua cara, dan apa yang dapat dilakukan penyerang dengan masing-masing cara tersebut
Pertimbangkan permintaan bilangan bulat di bawah 100. `secureRandomInt` memerlukan satu byte, yang rentangnya berisi nilai 256. Ia hanya menerima awalan terbesar yang habis dibagi 100, yang berakhir sebelum 200, dan menolak sisa ekornya. Pengujian deterministik memasukkan byte 200 diikuti oleh byte 7. Implementasinya membuang 200 dan mengembalikan 7; pintasan modulo langsung akan menghasilkan nol dari byte yang ditolak.
Fungsi bilangan bulat aman yang sama memilih indeks untuk kata dan karakter, jadi contoh ini bukanlah mainan yang terlepas dari generasi. Byte yang tepat dalam produksi bukanlah contoh yang dapat diulang dan tidak boleh dipublikasikan sebagai kredensial. Artefak yang berguna adalah bukti aliran kontrol: Web Crypto mengisi buffer, ekor yang tidak rata ditolak, dan hanya nilai yang diterima yang menjadi pilihan terbatas.
Contoh praktis: lacak satu undian yang dibatasi melalui jalur secureRandomInt yang dikirimkan
Repositori ini tidak mengimplementasikan atau membandingkan generator sisi server, generator nomor acak perangkat keras, atau alat baris perintah sistem operasi. Itu juga tidak dapat mengaudit internal implementasi kripto browser dari JavaScript. Topik-topik tersebut memerlukan materi sumber, model ancaman, dan pemeriksaan operasionalnya sendiri, bukan analogi yang ditempelkan ke jalur kode ToolAcre.
Halaman ini juga bukan pengelola kata sandi. Itu tidak menyimpan, menyinkronkan, mengirimkan atau mengisi otomatis apa yang dihasilkannya. Pembaca tidak boleh menafsirkan “sumber acak kriptografi” sebagai saran untuk menggunakan kembali hasil atau memindahkannya melalui saluran yang tidak aman. Klaim tersebut hanya dimiliki oleh pilihan di dalam tab browser saat ini.
Kesimpulannya — Generator Kata Sandi menggunakan generator nomor acak kriptografis browser, dan Anda dapat memverifikasinya dari halaman itu sendiri
Pilihan ToolAcre yang dapat diverifikasi adalah kripto atau tidak sama sekali. Laman tersebut memanggil browser API selama deteksi dukungan, menonaktifkan kontrol ketika gagal, dan membiarkan mesin menampilkan `InsecureRandomError` jika pembangkitan entah bagaimana mencapai kondisi hilang yang sama. Tidak ada fallback Math.random yang tersembunyi di balik salah satu cabang.
Gunakan pola tersebut saat meninjau generator: identifikasi sumbernya, lacak setiap penarikan yang dibatasi, periksa pengurangan dan pengacakan, dan paksakan jalur sumber yang tidak tersedia. Kemudian evaluasi perangkat dan tujuan secara terpisah. Sumber suara acak diperlukan untuk pekerjaan generator ini, tetapi ini bukan sertifikat universal untuk seluruh masa pakai kredensial.