Saya menulis generator / parser UUID untuk Ruby, jadi saya menganggap diri saya cukup mendapat informasi tentang subjek tersebut. Ada empat versi UUID utama:
Versi 4 UUID pada dasarnya hanya 16 byte keacakan yang ditarik dari generator nomor acak yang aman secara kriptografis, dengan beberapa bit-twiddling untuk mengidentifikasi versi dan varian UUID. Ini sangat tidak mungkin untuk bertabrakan, tetapi itu bisa terjadi jika PRNG digunakan atau jika Anda kebetulan memiliki keberuntungan yang sangat, sangat, sangat, sangat, sangat buruk.
UUID Versi 5 dan Versi 3 masing-masing menggunakan fungsi hash SHA1 dan MD5, untuk menggabungkan namespace dengan bagian data yang sudah unik untuk menghasilkan UUID. Ini akan, misalnya, memungkinkan Anda menghasilkan UUID dari URL. Tabrakan di sini hanya mungkin jika fungsi hash yang mendasarinya juga memiliki tabrakan.
UUID versi 1 adalah yang paling umum. Mereka menggunakan alamat MAC kartu jaringan (yang kecuali dipalsukan, harus unik), ditambah stempel waktu, ditambah bit-twiddling biasa untuk menghasilkan UUID. Dalam kasus mesin yang tidak memiliki alamat MAC, 6 node byte dihasilkan dengan generator nomor acak yang aman secara kriptografis. Jika dua UUID dibuat secara berurutan cukup cepat sehingga stempel waktu cocok dengan UUID sebelumnya, stempel waktu akan bertambah 1. Tabrakan seharusnya tidak terjadi kecuali salah satu hal berikut terjadi: Alamat MAC dipalsukan; Satu mesin yang menjalankan dua aplikasi penghasil UUID yang berbeda menghasilkan UUID pada saat yang sama; Dua mesin tanpa kartu jaringan atau tanpa akses tingkat pengguna ke alamat MAC diberi urutan node acak yang sama, dan menghasilkan UUID pada saat yang sama;
Secara realistis, tidak satu pun dari peristiwa ini terjadi secara tidak sengaja dalam satu ruang ID aplikasi. Kecuali Anda menerima ID pada, katakanlah, dalam skala luas Internet, atau dengan lingkungan tidak tepercaya di mana individu jahat mungkin dapat melakukan sesuatu yang buruk jika terjadi benturan ID, itu bukan sesuatu yang perlu Anda khawatirkan. Sangat penting untuk memahami bahwa jika Anda membuat versi 4 UUID yang sama seperti yang saya lakukan, dalam banyak kasus, itu tidak masalah. Saya telah membuat ID di ruang ID yang sama sekali berbeda dari Anda. Aplikasi saya tidak akan pernah tahu tentang tabrakan jadi tabrakan itu tidak masalah. Terus terang, dalam satu ruang aplikasi tanpa aktor jahat, kepunahan semua kehidupan di bumi akan terjadi jauh sebelum Anda bertabrakan, bahkan pada UUID versi 4, bahkan jika Anda '
Selain itu, 2 ^ 64 * 16 adalah 256 exabyte. Seperti halnya, Anda perlu menyimpan ID senilai 256 exabyte sebelum Anda memiliki peluang 50% dari benturan ID dalam satu ruang aplikasi.