Bahasa Melayu

Teks & alat harian · Penjana Kata Laluan

Bias modulo menjelaskan: memilih perkataan rawak daripada senarai tanpa condong

· Bagaimana ia berfungsi

kata laluan rawak kriptografi

Baldi bernombor tidak sekata di sebelah set genap dihasilkan selepas menolak ekor
Ilustrasi vektor ToolAcre asal

Menunjukkan sebab 'panjang senarai modulo nombor rawak' mengutamakan beberapa perkataan berbanding yang lain apabila julat tidak membahagi sama rata, betapa besarnya condong dan cara pensampelan penolakan mengalihkannya.

Mati yang adil dan jalan pintas yang tidak adil — mengapa mengambil modulo nombor rawak 7,776 tidak sama dengan membaling dadu

Sumber yang adil masih boleh memberi makan rutin pemilihan yang tidak adil. Jika program membaca integer dan serta-merta mengambil baki selepas pembahagian dengan panjang senarai, sesetengah indeks menerima lebih banyak nilai sumber apabila julat sumber tidak betul-betul boleh dibahagikan dengan panjang itu. Kecacatan adalah dalam langkah pengurangan, tidak semestinya dalam bait. ToolAcre mengelakkan pintasan itu sebelum memilih mana-mana perkataan EFF.

Dadu fizikal memberikan perbandingan intuitif sahaja apabila kumpulan hasil lengkap memetakan sama rata. Pelaksanaan pelayar mempunyai julat mentah yang berbeza, jadi ia mengira tetingkap penerimaan untuk sempadan yang diminta. Artikel ini membincangkan mekanisme yang dihantar dan bukannya mendakwa bahawa bait pelayar benar-benar menghasilkan semula lima dadu. Kedua-duanya boleh memilih indeks, tetapi prosedur dan bukti audit mereka adalah berbeza.

Dari mana bias itu datang — nilai 32-bit tidak dibahagikan sama rata kepada 7,776 baldi, jadi beberapa perkataan pertama mendapat satu peluang tambahan

Untuk satu bait dan sempadan 100, julat mentah mempunyai 256 nilai yang mungkin. Dua kumpulan lengkap 100 muat, meninggalkan 56 nilai. Mengurangkan setiap modul bait 100 memberikan indeks sifar melalui 55 tiga praimej setiap satu, manakala indeks 56 hingga 99 menerima sahaja dua. Bait input mungkin seragam, namun pengedaran baldi yang dipilih tidak.

Komen pelaksanaan juga memperoleh isu julat terhingga yang sepadan untuk senarai entri 7,776 apabila dua bait dikurangkan secara langsung. Angka tersebut datang daripada julat sebenar yang dinamakan dalam sumber, bukan daripada kadar serangan yang diandaikan. Soalan semakan yang penting ialah sama ada nilai sisa digunakan, bukan sama ada condong kelihatan kecil dalam segelintir frasa yang dijana.

Betapa besar kesannya — kecil untuk julat rawak yang besar, tetapi bukan sifar, dan sebab kod kriptografi enggan menerimanya

Ujian deterministik menjadikan ekor tidak sekata boleh diperhatikan. Bounds 3, 5, 7, 100 dan 7,776 sengaja janggal, manakala kuasa dua terikat menunjukkan kes tanpa penolakan. Kawalan statistik lain menggunakan sumber Web Crypto yang sama untuk fungsi yang betul dan pembantu modulo yang naif, jadi ujian mengasingkan strategi pengurangan dan bukannya menyalahkan sumber entropi.

ToolAcre tidak menukar semakan pengedaran tersebut kepada ramalan masa retak. Bias mengurangkan keseragaman, tetapi menterjemahkan pengurangan itu kepada kos penyerang tertentu memerlukan model ancaman yang lengkap. Keperluan kejuruteraan adalah lebih bersih: setiap indeks yang layak harus mempunyai bilangan nilai mentah yang diterima yang sama dan kod itu boleh menguatkuasakannya dengan tepat.

Contoh pencongan yang disahkan dalam ulasan pelaksanaan dan ujian deterministik

`secureRandomInt` mencari kiraan keseluruhan bait terkecil yang mampu mewakili indeks sah tertinggi. Ia mengira julat bait, menolak baki selepas pembahagian dengan sempadan, dan memanggil hasilnya `limit`. Nilai di bawah had itu tergolong dalam kumpulan lengkap; nilai pada atau di atasnya dibuang sebelum operasi modulo dibenarkan untuk dijalankan.

Cabutan baharu mengikuti setiap penolakan. Gelung mempunyai siling tetap yang tinggi jadi sumber suntikan yang rosak tidak boleh menggantung tab selama-lamanya; selepas mengulangi nilai di luar julat ia melontar dan bukannya mengembalikan jawapan berat sebelah. Laluan kegagalan ini adalah sebahagian daripada ketepatan: menolak sumber yang mencurigakan mengekalkan janji bahawa indeks yang dikembalikan datang daripada tetingkap penerimaan seragam.

Alternatif — melukis bit yang cukup tepat dan membuang nilai luar julat, atau menggunakan fungsi integer seragam perpustakaan

Reka bentuk integer seragam lain boleh dilakukan, tetapi ia bukan tingkah laku pakej ini dan oleh itu tidak ditunjukkan sebagai pilihan ToolAcre yang boleh ditukar ganti. Enjin mendedahkan satu laluan yang diaudit. `secureRandomChoice` mengesahkan bahawa inputnya ialah tatasusunan tidak kosong dan mewakilkan kepada `secureRandomInt(items.length)`, menjadikan pemilihan perkataan pengguna langsung kontrak integer terikat.

Penjana kata laluan rawak menggunakan laluan yang sama untuk aksara, kemudian menggunakan shuffle Fisher–Yates yang didorong oleh pertukaran sempadan yang selamat. Ia tidak menggunakan `sort` dengan pembanding rawak. Mengekalkan satu primitif di bawah beberapa ciri menjadikan semakan sumber boleh dikendalikan: betulkan atau uji pengurangan seragam sekali, kemudian ikuti pemanggilnya.

Reka bentuk alternatif berada di luar modul ini; laluan yang dihantar menggunakan pensampelan penolakan

Ujian regresi terikat-100 membekalkan setiap bait ekor daripada 200 hingga 255 dan kemudian 42 terakhir. Kod yang betul menggunakan semua 56 bait yang ditolak dan jawapan daripada 42. Sarung fokus kedua membekalkan 200 dan 7; kerana 200 modulo 100 akan menjadi sifar, mengembalikan 7 membuktikan bahawa bait pertama telah ditolak dan bukannya dikurangkan secara senyap-senyap.

Contoh kerja ini adalah deterministik mengikut reka bentuk dan tidak mengandungi kelayakan. Bait pengeluaran kekal peribadi kepada panggilan pelayar dan tidak dilog. Sumber ujian sahaja boleh disuntik supaya tingkah laku boleh dipaksa di sempadan; pakej awam tidak menawarkan mod unggul pengeluaran yang boleh menghasilkan semula frasa laluan yang dijana.

Contoh yang berfungsi: terikat 100 menolak bait 200 dan menerima 7 berikut

Pengurangan rawak titik terapung, API seragam khusus perpustakaan dan algoritma shuffling yang tidak berkaitan berada di luar pelaksanaan ini. Menilai mereka memerlukan sumber dan kontrak mereka. Kod ToolAcre adalah berasaskan integer dan dihadkan secara eksplisit, jadi menambahkan tinjauan alternatif akan mengaburkan tuntutan sempit yang sebenarnya dibuktikan oleh ujian.

Artikel itu juga tidak membuat kesimpulan bahawa kata laluan yang dijana secara seragam adalah sesuai untuk setiap dasar atau peranti. Pemilihan indeks seragam menangani satu mekanisme. Storan, penggunaan semula, pengendalian papan keratan, perisian hasad dan kekangan destinasi kekal sebagai persoalan berasingan walaupun setiap elemen senarai mempunyai peluang yang sama untuk dipilih.

Kesimpulannya — penjana frasa laluan mesti memilih perkataan secara seragam; semak nota Teknikal alat untuk cara Penjana Kata Laluan melakukannya

Penjana frasa laluan tidak boleh memihak kepada entri awal sahaja kerana julat mentahnya meninggalkan baki. ToolAcre mengambil bait daripada Web Crypto, menolak ekor yang tidak lengkap dan mengurangkan sahaja nilai dalam kumpulan lengkap bersaiz sama. Ujian memaksa kedua-dua sempadan penolakan dan penerimaan supaya tuntutan tidak berdasarkan pemeriksaan visual output.

Apabila menyemak kod yang serupa, kira julat mentah untuk lebar bait yang dipilih, bahagikannya dengan sempadan yang diminta dan cari baki yang dibuang. Jika tiada ekor ditolak, tuntut satu lagi bukti keseragaman. Senarai perkataan boleh didedahkan kepada umum dan kriptografi sumber sementara pengurangan yang cuai masih menimbulkan pencongan yang boleh dielakkan.