Memetakan 8 angka ke 3 karakter mengubah frekuensi

Anggap setiap bilangan bulat dari 0 sampai 7 memiliki peluang yang sama. Gunakan sisa pembagian dengan 3 sebagai indeks karakter. Sisa 0 dan 1 masing-masing muncul tiga kali, sedangkan 2 dua kali. Angka awal yang seragam tidak menghasilkan sisa yang seragam dalam contoh ini: itulah bias modulo.

0 % 3 = 0    1 % 3 = 1    2 % 3 = 2
3 % 3 = 0    4 % 3 = 1    5 % 3 = 2
6 % 3 = 0    7 % 3 = 1
// counts: [3, 3, 2]

Jika Anda menolak dua angka terakhir, Anda mendapatkan jumlah yang sama

Tolak 6 dan 7, lalu ambil angka acak baru. Di antara angka yang diterima, 0 sampai 5, setiap sisa muncul dua kali. Dengan asumsi angka awal seragam, cara ini menghilangkan bias dalam rentang yang diterima. Angka yang ditolak tidak dipakai kembali.

Frekuensi sisa 3, 3, 2 untuk angka 0 sampai 7 dibandingkan dengan 2, 2, 2 setelah 6 dan 7 dikeluarkan.
Diagram buatan kami dari perhitungan contoh kecil. Panel kiri menggunakan semua angka 0 sampai 7; panel kanan menerima hanya 0 sampai 5. Ini bukan distribusi keacakan browser yang diukur.

randomInt Moyoutil mengisi Uint32Array(1) menggunakan crypto.getRandomValues. Batas dihitung dengan membagi 2^32 dengan jumlah pilihan, membulatkan ke bawah, lalu mengalikan dengan jumlah pilihan tersebut. Nilai yang sama dengan atau melebihi batas ditolak, lalu angka baru diambil. Untuk tiga pilihan, batasnya 4294967295 dan hanya nilai maksimum yang ditolak.

Math.floor(4294967296 / 3) * 3
// 4294967295
// accept: 0 through 4294967294
// reject: 4294967295

W3C Web Cryptography: getRandomValues

Dokumentasi Kriptografi Web menetapkan bahwa getRandomValues ​​​​menghasilkan angka acak yang kuat secara kriptografis. Verifikasi dalam artikel ini adalah untuk memastikan bahwa kode proyek menangani batasan penolakan, dan bukan merupakan audit entropi sistem operasi atau implementasi nomor acak browser tertentu.

Memasukkan jenis karakter berbeda dari memilih setiap posisi secara independen

Alat memilih satu karakter dari setiap jenis yang dipilih, mengisi posisi tersisa dari gabungan karakter, lalu mengacak urutannya. Setiap jenis yang dipilih muncul setidaknya sekali. Memilih hanya huruf besar dan memilih keempat jenis adalah kondisi berbeda. Ini tidak menjamin keamanan; jumlah kombinasi tidak menentukan waktu tebakan sebenarnya.

Panjang harus berupa bilangan bulat dari 4 sampai 128, dengan setidaknya satu jenis karakter dipilih. Panjang pecahan, di luar rentang, atau tidak memilih jenis apa pun menghasilkan kesalahan. Menerima empat karakter tidak berarti empat adalah minimum yang aman. NIST SP 800-63B-4 mewajibkan verifikator dalam cakupannya menerima kata sandi dengan minimum 15 karakter untuk autentikasi satu faktor dan delapan karakter sebagai bagian dari autentikasi multifaktor. Ini bukan aturan masukan universal untuk semua situs.

NIST SP 800-63B-4: Persyaratan Pemverifikasi Kata Sandi

Bedakan antara menyimpan dan membersihkan layar setelah pembuatan.

  1. Periksa kondisi panjang dan karakter yang diperbolehkan untuk layanan yang akan Anda gunakan. Panjang default Moyoutil adalah 20, dan Anda dapat menyesuaikan panjang dan jenisnya.
  2. Buat kata sandi baru dengan pengaturan saat ini. Mengubah pengaturan menghapus hasil lama dan menonaktifkan penyalinan; tekan tombol pembuatan lagi.
  3. Gunakan kata sandi yang berbeda untuk setiap situs dan simpan di pengelola kata sandi. Alat ini tidak menyediakan brankas kata sandi atau fungsi login layanan.
  4. Hasil pembersihan layar akan mengosongkan layar, namun tidak menghapus konten papan klip yang disalin. Periksa status clipboard dan perangkat bersama secara terpisah.

NIST SP 800-63B-4: Pengelola kata sandi dan kata sandi khusus layanan

Saat ini hasil yang dihasilkan tidak dikirim atau disimpan di server alat. Namun, ini tidak memblokir ekstensi yang membaca masukan dan papan klip, serta serangan phishing dari perangkat dan akun bersama. Jangan gunakan string contoh yang diposting sebagai kata sandi akun Anda yang sebenarnya.

Pertanyaan yang Sering Diajukan

Apakah aman untuk memilih semua karakter khusus?

Jenis karakter saja tidak menentukan keamanan. Periksa persyaratan layanan, panjang yang cukup, kata sandi berbeda untuk setiap layanan dan penyimpanan yang aman.

Apakah artikel ini memverifikasi kualitas nomor acak browser?

Tidak. Kami menghitung semua angka dalam rentang kecil dan mereproduksi batas penolakan fungsi proyek. Kami tidak mengukur entropi browser atau waktu untuk menebak kata sandi.