Bahasa Melayu

Alat pembangun · UUID penjana

Math.random lwn crypto.getRandomValues: Cara Setiap Penjana Berfungsi

· Bagaimana ia berfungsi

uuid kriptografi pelayar-apis

Dua penjana rawak bersebelahan: Math.random sebagai mesin keadaan penentu berbanding crypto.getRandomValues yang disuap oleh entropi sistem pengendalian
Ilustrasi vektor ToolAcre asal

Kedua-dua nombor pulangan yang kelihatan rawak, tetapi satu adalah mesin keadaan penentu kecil dan satu lagi disuap oleh sistem pengendalian. Inilah yang masing-masing lakukan di bawah hud dan sebab UUID mesti menggunakan yang kedua.

Coretan forum yang membina UUID daripada Math.random — sebab ia kelihatan baik dan lulus setiap ujian biasa

Jawapan forum menawarkan jawapan yang pantas UUID kilang dalam lapan baris: nilai roll dari Math.random dan formatkannya ke dalam 8-4-4-4-12 susun atur. Kod itu kelihatan baik dan lulus setiap ujian kasual. Setiap pengecam kelihatan berbeza, dan sampel pendek tidak menunjukkan corak visual yang jelas. Itu bukan harta yang diperlukan oleh pengecam sensitif keselamatan. JavaScript menentukan Math.random sebagai sumber pseudo-rawak tetapi tidak memerlukan rintangan kriptografi terhadap ramalan. Kerja yang sesuai termasuk simulasi, permainan dan shuffling. Sebaik sahaja pengecam boleh mempengaruhi akses, penemuan objek atau keputusan lawan yang lain, penampilan bukan lagi bukti. Kontrak yang didokumenkan penjana lebih penting daripada satu halaman output yang kelihatan munasabah.

Di dalam Math.random — algoritma pseudo-rawak berbiji dengan keadaan dalaman tetap, direka untuk kelajuan dan penyebaran statistik, bukan kerahsiaan

Oleh kerana Math.random tidak dinyatakan sebagai penjana kriptografi, outputnya tidak boleh dianggap sebagai bukti bahawa nilai masa hadapan disembunyikan daripada pemerhati. crypto.getRandomValues mempunyai kontrak platform yang berbeza: ia mengisi tatasusunan bertaip integer dengan nilai kriptografi yang kukuh. Spesifikasi Web Crypto menyerahkan penjana tepat kepada ejen pengguna, jadi kod aplikasi tidak seharusnya menuntut algoritma tertentu, saiz benih atau peranti entropi. ToolAcre sahaja memerlukan sempadan yang disokong: pelayar membekalkan bait rawak selamat, JavaScript menerima Uint8Array yang diisi dan kod UUID menetapkan medan versi dan varian. Kenyataan itu berguna dan mudah alih merentas pelayar yang pelaksanaan dalamannya berbeza.

Mengapa pemerhatian output boleh mendedahkan keadaan — bagaimana keadaan kecil bermakna larian nilai boleh membenarkan seseorang meramalkan keadaan seterusnya

Kod aplikasi menerima nilai kriptografi yang kukuh daripada getRandomValues ​​dan bukannya melaksanakan atau mendedahkan keadaan JavaScript PRNG. Perbezaan keselamatan muncul dalam sistem sebenar. Pengecam yang dibina daripada Math.random tidak sesuai di mana-mana sahaja ramalan akan mempunyai akibat kerana penyerang yang mempunyai keupayaan untuk membaca rangkaian (atau mana-mana sistem yang UUID sebelumnya boleh dilihat) boleh meramalkan yang seterusnya. v4 UUID daripada crypto.getRandomValues bukanlah dengan sendirinya token pengesahan (anda masih memerlukan tamat tempoh, pencincangan, pengehadan kadar), tetapi penjana direka untuk menentang ramalan. ToolAcre enggan menjana pengecam jika sumber selamatnya tiada, dan bukannya menurunkan taraf secara senyap kepada formula yang boleh diramal. Math.random telah dihantar dengan pepijat pengedaran halus dalam enjin utama. Urutan keluaran mungkin kelihatan berbeza-beza tanpa memberikan ketidakpastian musuh yang diperlukan untuk peranan yang mengandungi rahsia.

Di dalam crypto.getRandomValues — pelayar meminta CSPRNG sistem pengendalian, yang mencampurkan perkakasan dan entropi sistem dan direka bentuk untuk tidak dapat diramalkan

Algoritma khusus enjin dan tingkah laku statistiknya boleh berubah; baik pemeriksaan visual mahupun ujian pengedaran kasual tidak meningkatkan Math.random kepada sumber kriptografi. Pengiraan perlanggaran juga menganggap keluaran bebas daripada ruang yang dinyatakan. Jika penjana mengulangi keadaan, dibiji secara tidak betul atau digantikan dengan lekapan penentu, andaian itu telah gagal dan formula tidak lagi menerangkan pelaksanaan. Kedua-dua API boleh menghasilkan rentetan yang kelihatan sama tidak teratur. Model ancaman memisahkannya: nilai yang mesti menentang penggunaan ramalan crypto.getRandomValues, manakala simulasi dan shuffle bukan lawan mungkin menggunakan Math.random. Pilihan berikut daripada akibat ramalan, bukan daripada tanda baca atau variasi yang jelas dalam sampel.

Contoh yang berkesan — menjana bilangan pengecam yang sama dengan setiap kaedah dan membandingkan perkara yang boleh disimpulkan oleh pemerhati

Penjana ToolAcre UUID menggunakan crypto.getRandomValues secara eksklusif; ia tidak pernah menggunakan Math.random kerana kos UUID yang boleh diramal sentiasa lebih tinggi daripada kos penjana yang perlahan sedikit. Perbezaan kriptografi boleh diukur melalui model ancaman. Penyerang yang ingin memalsukan UUID mesti sama ada meneka pengecam secara langsung atau memecahkan penjana nombor rawak. Meneka langsung bukanlah perbandingan yang dikira oleh artikel ini; kesimpulan yang disokong ialah Web Crypto bertujuan untuk rawak kriptografi manakala Math.random tidak. A CSPRNG dan Math.random mendedahkan kontrak yang berbeza: yang pertama direka bentuk untuk rawak sensitif keselamatan, manakala yang kedua tidak membawa janji sedemikian. Sistem yang menggunakan Math.random untuk pengecam telah kehilangan sifat kriptografi; keselamatan kini bergantung pada merahsiakan urutan UUID yang dihasilkan. Jika walaupun satu UUID bocor, seluruh generasi akan datang akan terjejas.

Pepijat pengedaran bersejarah — peringatan bahawa enjin telah menghantar pelaksanaan Math.random dengan output yang jelas tidak sekata, diterangkan secara kualitatif

Jika aplikasi menyimpan UUID dalam log, pangkalan data atau sejarah kawalan versi, kebocoran hampir tidak dapat dielakkan. Pustaka ToolAcre menguatkuasakan penggunaan crypto.getRandomValues dan enggan menjana UUID jika konteks selamat (HTTPS atau localhost) tidak tersedia. Keputusan reka bentuk ini menghalang sandaran senyap kepada Math.random yang melanda banyak pelaksanaan gulung tangan. Dalam Node.js, perpustakaan menggunakan modul kripto; dalam pelayar, ia menggunakan Web Crypto API. Kedua-dua laluan yang disokong meminta rawak kuat secara kriptografi daripada platform. Pelaksanaan tidak membuat tuntutan prestasi kerana enjin, peranti dan beban kerja menentukan masa; kontrak keselamatan adalah harta penentu untuk pengecam. Sebab standard industri yang ditetapkan pada crypto.getRandomValues ialah sejarah pendek UUID penyalahgunaan. Sistem awal menggunakan masa sistem, antara muka rangkaian dan jam perkakasan untuk menjana pengecam.

Perkara ini tidak meliputi - kualiti statistik sama ada penjana untuk simulasi, yang merupakan soalan yang berbeza daripada ketidakpastian

Versi UUID berasaskan masa, berasaskan nod dan rawak menyelesaikan masalah peruntukan yang berbeza; satu tidak boleh dibentangkan sebagai pembaikan linear untuk setiap reka bentuk yang lebih awal. Untuk versi 4, RFC 9562 mentakrifkan medan rawak dan membincangkan secara berasingan kebolehtelapan. Oleh itu, pemindahan dari Math.random mengubah kualiti nilai yang baru dijana tanpa mengubah bentuk UUID tekstual. Pengecam sedia ada kekal sebagai kunci pangkalan data; menjana semula mereka akan memecahkan rujukan. Nilai baharu boleh menggunakan Web Crypto serta-merta, manakala kebenaran mesti terus menganggap setiap UUID lama atau baharu sebagai pengecam dan bukannya bukti kebenaran. Dokumenkan cutoff supaya responden insiden mengetahui penjana yang menghasilkan setiap populasi.

Bawa pulang: pilih penjana melalui ancaman, bukan dengan penampilan — penjana ToolAcre UUID menggunakan CSPRNG secara eksklusif, tidak sekali-kali Math.random()

Pengesahan harus membezakan antara legasi (tidak sesuai untuk kerahsiaan) dan ID baharu (CSPRNG-disokong). Dokumentasi harus mencatat peralihan. Penjana ToolAcre sahaja menghasilkan crypto.getRandomValues UUID; ia tidak cuba untuk mengesahkan atau menjana semula pengecam daripada sumber lain. Penjana ToolAcre menunjukkan amalan terbaik dengan menolak untuk menurunkan taraf kepada sumber rawak yang lebih lemah. Jika crypto.getRandomValues tidak tersedia, alat melaporkan ralat dan bukannya menggunakan Math.random secara senyap. Prinsip reka bentuk ini terpakai kepada mana-mana sistem kritikal keselamatan: gagal dengan kuat dan bukannya berjaya secara senyap-senyap dengan jaminan keselamatan yang lemah. Pembangun yang melihat "generasi UUID gagal: crypto API tidak tersedia" mesti menangani isu asas (naik taraf kepada HTTPS, betulkan konteks selamat atau berikan sandaran yang betul). Pembangun yang secara senyap menerima UUID yang dibina daripada Math.random tidak mempunyai petunjuk bahawa sistem itu terjejas. Perpustakaan ToolAcre mengutamakan kejujuran daripada kemudahan.