Bahasa Melayu

Alat pembangun · UUID penjana

Berapa Banyak Bit Rawak Adakah v4 UUID Ada? 122, Bukan 128

· Bagaimana ia berfungsi

uuid kriptografi pelayar-apis

Medan 128-bit dengan 6 bit tetap (versi dan varian) diserlahkan dan 122 bit rawak ditunjukkan, menggambarkan sebab kebarangkalian perlanggaran dikira daripada 122 bits
Ilustrasi vektor ToolAcre asal

Enam daripada 128 bits secara rawak UUID ditetapkan oleh standard, meninggalkan 122 untuk rawak. Siaran ini menunjukkan cara untuk menganggarkan kemungkinan perlanggaran dengan jujur ​​dan mengapa perlanggaran sebenar datang daripada penjana rosak, bukan daripada matematik.

Soalan arkitek: adakah kita akan mendapat pendua? — dari mana datangnya kebimbangan dan mengapa jawapannya bergantung pada penjana

Arkitek bertanya: jika kita menjana 10 juta UUID setiap hari selama sepuluh tahun, adakah kita akan mendapat pendua? Jawapan yang jujur ​​ialah: hampir pasti tidak, jika penjana adalah selamat dari segi kriptografi; hampir pasti ya, jika penjana rosak. RFC 9562 matematik adalah bunyi: v4 UUID dengan 122 bit rawak mempunyai kebarangkalian perlanggaran kira-kira n² / 2 kepada kuasa ke-123, dengan n ialah nombor ident yang dijana. Bagi kebanyakan sistem sebenar, kebarangkalian ini boleh diabaikan. Tangkapannya ialah formula ini menganggap setiap bit adalah benar-benar rawak. Jika penjana bocor atau berulang atau telah diramalkan, formulanya salah, dan pendua menjadi tidak dapat dielakkan. Reka letak 128-bit termasuk empat bit versi (0100 untuk v4) dan dua bit varian (10 untuk RFC 9562), yang ditetapkan dan ditetapkan mengikut standard.

Enam bit yang manakah dituturkan — empat bit versi dan dua bit varian, dan sebab bit tersebut ditetapkan dan bukannya rawak

Itu pergi 122 bits untuk rawak. Rumusan itu kadang-kadang dipanggil 2 kepada 122 bit rawak, menghasilkan nilai unik. Menggunakan penghampiran paradoks hari lahir, kebarangkalian sekurang-kurangnya satu perlanggaran antara n nilai yang dijana secara rawak adalah kira-kira n² / 2 ke 123. Untuk n = 1 juta, ini adalah (10^6)² / 2^123 = 10^12 / 9. 3 × 10^36, iaitu kira-kira 10^-25. Untuk n = 10 bilion, ia masih kira-kira 10^-16. Ini bukan "sifar berkesan"; mereka ialah "anda tidak akan pernah memerhati perkara ini. " Anggaran hari lahir memberikan cara konkrit untuk mengira risiko: kira UUID yang anda rancang untuk hasilkan, kuasa duakan nombor itu, bahagi dengan 2 kepada kuasa ke-123. Jika penjana adalah pelayar crypto.getRandomValues, setiap bit disokong oleh entropi sistem pengendalian. Jika ia adalah Matematik.

Anggaran hari lahir dalam istilah biasa — kebarangkalian sekurang-kurangnya satu perlanggaran antara n pengecam adalah kira-kira n kuasa dua dibahagikan dengan 2 kepada 123

Untuk UUID yang dihasilkan oleh penjana keadaan yang tidak sesuai atau berulang, model matematik rosak kerana andaian kebebasannya adalah palsu. Benih ujian tetap, lekapan yang disalin atau syot kilat proses boleh memainkan semula nilai walaupun teks masih membawa versi-4 nibble. Itu adalah kecacatan pelaksanaan, bukan bukti bahawa pengiraan medan 122 adalah salah. Satu lagi sumber biasa sedang menyalin pengecam literal yang sama ke dalam beberapa lekapan dan kemudian menggabungkan data mereka. Apabila menyiasat pendua, kekalkan penjana, dasar benih, kitaran hayat proses dan sejarah import. Jangan melompat dari satu nilai berulang kepada tuntutan bahawa output CSPRNG bebas telah menghabiskan ruang UUID.

Contoh yang berkesan — memasukkan kadar penjanaan dan jangka masa yang dinyatakan ke dalam anggaran, dengan setiap langkah ditunjukkan supaya anda boleh menggantikan angka anda sendiri

Proses forking tanpa penyegerakan keadaan rawak. Pepijat di mana Math.random digunakan sebagai ganti crypto.getRandomValues. Lekapan ujian yang dibuat dengan tangan yang sama UUID dalam berbilang baris dan digunakan secara tidak sengaja dalam pengeluaran. Versi lama a UUID perpustakaan yang mempunyai had julat atau pepijat keadaan. Tiada satu pun daripada senario ini melibatkan matematik penghampiran hari jadi; ia melibatkan kesilapan pelaksanaan atau operasi yang rosak. Kira risiko perlanggaran secara jujur ​​untuk sistem anda: kira kadar UUID generasi (sesaat, sehari, setahun), unjurkannya sepanjang masa sistem akan berjalan dan masukkan jumlahnya ke dalam formula hari lahir. Jika sistem anda menjana 100,000 UUID sehari selama lima tahun (182 juta jumlah), kebarangkalian perlanggaran ialah (1. 82 × 10^8)² / 2^123 ≈ 3. 3 × 10^-22, yang boleh diabaikan.

Di mana pendua sebenarnya berasal — biji Math.random, mesin maya yang diklon, proses bercabang dengan keadaan disalin dan salin-tampal dalam lekapan

Jika anda menjana 10 juta sesaat selama setahun (315 trilion jumlah), kebarangkaliannya ialah (3. 15 × 10^14)² / 2^123 ≈ 10^-10, yang masih semakin kecil. Anggaran ini mengandaikan bahawa setiap bit adalah bebas dan rawak. ToolAcre kegunaan penjana crypto.getRandomValues, yang memberi anda CSPRNGrawak yang disokong; operasi adalah satu-satunya bahagian yang perlu anda percayai. Jangan sekali-kali bergantung pada kebarangkalian perlanggaran sebagai alasan untuk melangkau semakan kebenaran yang betul. A UUID bukan kata laluan, bukan token akses, dan bukan rahsia walaupun ianya 122 bit rawak. Keunikan adalah faedahnya; ketidakpastian adalah sifat berasingan (dan lebih penting) yang menghalang meneka. Matematik hari lahir mengendalikan keunikan; ia tidak menangani seumur hidup (sekiranya ini UUID tamat tempoh? ), kerahsiaan (adakah ia perlu dicincang sebelum storan?), atau kebenaran (adakah memiliki ini UUID buktikan apa-apa tentang pemanggil?). ToolAcre penjana memberi anda CSPRNGUUID yang disokong dengan 122 bit rawak, yang bermaksud keunikan yang dipegang oleh matematik dan ketidakpastian adalah kukuh. Segala-galanya—pengesahan token, tamat tempoh, kawalan akses—adalah tanggungjawab aplikasi anda. Formula kebarangkalian menganggap kebebasan setiap yang dihasilkan UUID daripada generasi terdahulu. Jika sistem anda menjana pengecam daripada satu CSPRNG contoh, dan setiap panggilan menarik kerawak baharu daripada OS, andaian kebebasan dipegang. Jika sistem anda menggunakan cache CSPRNG keadaan atau penjana benih tanpa pembenihan semula OS, andaian rosak. Risiko perlanggaran meningkat secara mendadak jika sumber entropi telah habis (berlaku pada beberapa sistem terbenam atau mesin maya di bawah beban) atau jika keadaan rawak tidak pernah ditetapkan semula antara proses (proses forking tanpa pembenihan semula CSPRNG).

Perkara yang tidak dicakupi ini — keunikan v1 dan v7, yang bergantung pada cap masa dan jujukan jam dan bukannya rawak sahaja

Sandaran ToolAcre memanggil crypto.getRandomValues untuk setiap tatasusunan bait dan tidak memegang keadaan PRNG peringkat aplikasi. Bahagian dalaman platform kekal sebagai pelayar dan tanggungjawab sistem pengendalian. Simulasi perlanggaran dengan penjana sebenar menunjukkan perbezaan antara teori dan amalan yang rosak. Penjana yang dibina dengan Math.random bermula dari benih yang sama akan menghasilkan jujukan yang sama; anda akan melihat perlanggaran UUID pertama dalam beberapa ratus hingga beberapa ribu nilai yang dijana, bukan selepas nilai 2^60 (punca kuasa dua 2^122) seperti yang diramalkan oleh anggaran hari lahir. Penjana yang menggunakan crypto.getRandomValues daripada entropi OS bunyi akan menghasilkan perlanggaran sahaja apabila kebarangkalian teori menjadi tidak dapat dielakkan (sekitar 2^60 UUID), nombor yang begitu besar anda tidak akan mencapainya. Penjana yang menggunakan sumber entropi yang lemah atau digunakan semula (biasa dalam perpustakaan atau rangka kerja ujian UUID yang dilaksanakan dengan buruk) akan menghasilkan perlanggaran di suatu tempat di antaranya.

Bawa pulang: percaya pada matematik, audit penjana — penjana ToolAcre menggunakan CSPRNG pelayar, iaitu bahagian yang tidak boleh dipalsukan

Ujian kelompok boleh menangkap pelaksanaan yang mengembalikan pemalar atau memainkan semula urutan yang jelas, tetapi sampel yang lulus tidak dapat membuktikan keunikan masa hadapan. Sistem pengeluaran masih perlu menguatkuasakan kekangan unik di mana-mana sahaja pengecam pendua akan merosakkan data. Import patut diberi perhatian khusus kerana dua sistem sumber yang sah mungkin sudah mengandungi pengecam literal yang sama dan lekapan boleh disalin merentas persekitaran. Ujian ToolAcre menyemak bahawa sekumpulan 500 mengandungi 500 nilai yang berbeza; itu adalah semakan regresi untuk pelaksanaan ini, bukan jaminan statistik. Jika pendua muncul, simpan bukti dan periksa laluan penjanaan, import, lekapan dan storan sebelum mengaitkan punca.