Panduan keselamatan
Penjanaan kata laluan sebelah klien dengan Web Crypto dan pensampelan penolakan
Kertas putih teknikal yang menerangkan model penjanaan kata laluan sebelah penyemak imbas PwdGen, sempadan entropi, pensampelan penolakan, dan had privasi.
Abstrak
PwdGen menggunakan kaedah penjanaan rujukan sebelah klien: penyemak imbas atau runtime Web Crypto menyediakan bait rawak, pensampelan penolakan memetakan bait tersebut kepada indeks terbatas yang tidak bias, dan pengocokan Fisher-Yates mengagihkan kelas aksara yang diperlukan ke seluruh kata laluan akhir. Kaedah ini sengaja dibuat kecil, boleh diaudit, dan boleh dihasilkan semula merentas aplikasi web, penyesuai API, CLI, dan pakej pwdgen-core yang disediakan.
Dokumen ini menerangkan model kejuruteraan. Ia bukan tuntutan primitif kriptografi baharu, piawaian formal, atau audit pihak ketiga bebas.
Sumber rawak
Penjana meminta nilai rawak yang kuat secara kriptografi melalui crypto.getRandomValues(). Pelaksanaan Web Crypto dijangka menggunakan penjana nombor pseudo-rawak yang selamat secara kriptografi yang disemai dengan entropi berkualiti tinggi yang disediakan oleh persekitaran hos. Dalam amalan, penyemak imbas mewakilkan tanggungjawab ini kepada kemudahan sistem pengendalian dan penyedia kriptografi platform.
PwdGen tidak mendakwa bahawa setiap panggilan penjanaan kata laluan secara langsung mengambil sampel sumber hingar perkakasan. Pernyataan yang lebih selamat dan tepat ialah penyemak imbas membekalkan output CSPRNG melalui API Web Crypto, dan PwdGen mengelakkan antara muka pseudo-rawak bukan kriptografi.
Mengapa bukan Math.random()
Math.random() tidak ditetapkan untuk penggunaan yang sensitif terhadap keselamatan. Ia sesuai untuk simulasi, kesan visual, dan tingkah laku UI rawak biasa, tetapi ia tidak memberikan jaminan yang diharapkan untuk kata laluan, kod set semula, kunci tandatangan, atau kelayakan lain.
PwdGen menganggap penggantian pseudo-rawak yang tidak selamat sebagai keadaan kegagalan. Jika Web Crypto tidak tersedia, penjana harus menunjukkan ralat keserasian daripada secara senyap menghasilkan kelayakan yang lemah.
Pensampelan penolakan
Bait dan integer rawak biasanya diambil dari julat kuasa dua. Abjad kata laluan jarang mempunyai saiz yang membahagi julat itu dengan tepat. Operasi modulo langsung boleh menyebabkan beberapa aksara lebih berkemungkinan sedikit daripada yang lain.
PwdGen menggunakan pensampelan penolakan:
- Ambil integer unsigned 32-bit.
- Kira gandaan terbesar saiz abjad yang muat dalam julat 32-bit.
- Tolak nilai di atas sempadan itu.
- Gunakan modulo hanya pada julat lengkap yang tinggal.
Ini memastikan pemilihan aksara terbatas seragam tanpa memperkenalkan bias modulo yang boleh diukur.
Liputan aksara dan entropi
Untuk dasar kata laluan yang dikonfigurasi, penjana mula-mula memilih satu aksara dari setiap kelas yang diaktifkan, mengisi selebihnya dari abjad gabungan, dan kemudian mengocok hasilnya. Ini membantu memenuhi peraturan kata laluan destinasi tanpa meletakkan kelas yang boleh diramal pada kedudukan yang boleh diramal.
Anggaran entropi teori ialah:
bits = length × log2(uniqueAlphabetSize)
Nilai itu adalah had atas untuk pilihan seragam rawak dari abjad yang dikonfigurasi. Ia tidak mengambil kira penggunaan semula kata laluan, output yang diedit pengguna, peranti yang terjejas, kata laluan yang bocor, atau penyimpanan lemah oleh perkhidmatan destinasi.
Sempadan privasi
Dalam alat penyemak imbas, nilai yang dihasilkan kekal dalam memori halaman dan medan hasil yang boleh dilihat sehingga pengguna menyalin atau mengeksportnya. Penjana tempatan tidak menghantar kata laluan yang dihasilkan ke pelayan PwdGen, memasukkannya ke dalam URL, atau menulisnya ke dalam acara analitik.
Sempadan ini tidak melindungi daripada sambungan penyemak imbas berniat jahat, pengurus papan klip, kompromi sistem pengendalian, tangkapan skrin, halaman pancingan data, atau pengguna menampal kata laluan yang dihasilkan ke destinasi yang tidak selamat.
Pelaksanaan yang boleh dihasilkan semula
Pakej pwdgen-cli awam dan pakej pwdgen-core yang disediakan wujud untuk memastikan model penjanaan boleh diperiksa di luar halaman web. Ujian unit meliputi kemasukan kelas aksara, aksara yang dikecualikan, konfigurasi tidak sah, formula entropi, dan ketiadaan laluan kod penggantian pseudo-rawak yang tidak selamat.
Matlamatnya bukan untuk menjadikan PwdGen sebagai piawaian peribadi. Matlamatnya adalah untuk menjadikan pelaksanaan cukup kecil supaya pembangun boleh membaca, menguji, dan menggantikannya apabila persekitaran mereka memerlukan sempadan kepercayaan yang berbeza.