Seberapa aman menggunakan UUID untuk mengidentifikasi sesuatu secara unik (Saya menggunakannya untuk file yang diunggah ke server)? Seperti yang saya pahami, ini didasarkan pada angka acak. Namun, bagi saya tampaknya diberikan waktu yang cukup, pada akhirnya akan mengulanginya sendiri, hanya secara kebetulan. Apakah ada sistem atau pola jenis yang lebih baik untuk mengatasi masalah ini?
guid
uniqueidentifier
uuid
Jason
sumber
sumber
Jawaban:
Sangat aman:
Peringatan:
Sumber: Probabilitas UUID acak untuk bagian rangkap dari artikel Wikipedia tentang pengidentifikasi unik secara universal (tautan mengarah ke revisi mulai Desember 2016 sebelum pengeditan mengerjakan ulang bagian tersebut).
Juga lihat bagian saat ini pada subjek yang sama pada artikel pengenal unik universal yang sama, Tabrakan .
sumber
Jika dengan "diberikan waktu yang cukup" yang Anda maksud adalah 100 tahun dan Anda membuatnya dengan kecepatan satu miliar per detik, maka ya, Anda memiliki peluang 50% untuk mengalami tabrakan setelah 100 tahun.
sumber
Ada lebih dari satu jenis UUID, jadi "seberapa aman" tergantung pada jenis apa (spesifikasi UUID menyebut "versi") yang Anda gunakan.
Versi 1 adalah berbasis waktu plus alamat MAC UUID. 128-bit berisi 48-bit untuk alamat MAC kartu jaringan (yang secara unik ditugaskan oleh pabrikan) dan jam 60-bit dengan resolusi 100 nanodetik. Jam itu terbungkus pada tahun 3603 AD sehingga UUID ini aman setidaknya sampai saat itu (kecuali jika Anda membutuhkan lebih dari 10 juta UUID baru per detik atau seseorang mengkloning kartu jaringan Anda). Saya katakan "setidaknya" karena jam mulai pada 15 Oktober 1582, jadi Anda memiliki sekitar 400 tahun setelah jam membungkus sebelum bahkan ada kemungkinan kecil duplikasi.
Versi 4 adalah nomor acak UUID. Ada enam bit tetap dan sisa UUID adalah 122-bit keacakan. Lihat Wikipedia atau analisis lain yang menggambarkan betapa tidak mungkin duplikat itu.
Versi 3 menggunakan MD5 dan Versi 5 menggunakan SHA-1 untuk membuat 122-bit tersebut, bukan pembangkit angka acak atau pseudo-acak. Jadi dalam hal keamanan, itu seperti Versi 4 yang menjadi masalah statistik (selama Anda memastikan apa yang diproses oleh algoritma digest selalu unik).
Versi 2 mirip dengan Versi 1, tetapi dengan jam yang lebih kecil sehingga akan membungkus lebih cepat. Tetapi karena UUID Versi 2 adalah untuk DCE, Anda seharusnya tidak menggunakannya.
Jadi untuk semua masalah praktis, mereka aman. Jika Anda merasa tidak nyaman dengan menyerahkannya pada probabilitas (mis. Anda adalah tipe orang yang khawatir akan bumi dihancurkan oleh asteroid besar dalam hidup Anda), pastikan Anda menggunakan UUID Versi 1 dan dijamin unik ( seumur hidup Anda, kecuali jika Anda berencana untuk hidup melewati 3603 AD).
Jadi mengapa tidak semua orang cukup menggunakan UUID Versi 1? Itu karena Versi 1 UUID mengungkapkan alamat MAC dari mesin yang dihasilkan dan mereka dapat diprediksi - dua hal yang mungkin memiliki implikasi keamanan untuk aplikasi menggunakan UUID tersebut.
sumber
Jawabannya tergantung pada versi UUID.
Banyak generator UUID menggunakan nomor acak versi 4. Namun, banyak dari ini menggunakan Pseudo a Random Number Generator untuk menghasilkannya.
Jika PRNG yang kurang diunggulkan dengan periode kecil digunakan untuk menghasilkan UUID saya akan mengatakan itu tidak aman sama sekali.
Oleh karena itu, hanya seaman algoritma yang digunakan untuk menghasilkannya.
Di sisi lain, jika Anda tahu jawaban untuk pertanyaan-pertanyaan ini maka saya pikir versi 4 uuid harus sangat aman digunakan. Sebenarnya saya menggunakannya untuk mengidentifikasi blok pada sistem file blok jaringan dan sejauh ini belum mengalami bentrokan.
Dalam kasus saya, PRNG yang saya gunakan adalah twister mersenne dan saya berhati-hati dengan cara itu diunggulkan yang berasal dari berbagai sumber termasuk / dev / urandom. Mersenne twister memiliki periode 2 ^ 19937 - 1. Ini akan menjadi waktu yang sangat lama sebelum saya melihat uuid berulang.
sumber
Mengutip dari Wikipedia :
Selanjutnya dijelaskan dengan cukup baik tentang seberapa aman sebenarnya. Jadi untuk menjawab pertanyaan Anda: Ya, cukup aman.
sumber
Saya setuju dengan jawaban lain. UUID cukup aman untuk hampir semua tujuan praktis 1 , dan tentunya untuk Anda.
Tapi anggaplah (secara hipotetis) bahwa mereka tidak.
Berikut adalah beberapa pendekatan:
Gunakan UUID yang lebih besar. Misalnya, alih-alih 128 bit acak, gunakan 256 atau 512 atau ... Setiap bit yang Anda tambahkan ke gaya-4 gaya UUID akan mengurangi kemungkinan tabrakan hingga setengahnya, dengan asumsi bahwa Anda memiliki sumber entropi 2 yang andal. .
Membangun layanan terpusat atau terdistribusi yang menghasilkan UUID dan mencatat masing-masing dan setiap yang pernah dikeluarkannya. Setiap kali menghasilkan yang baru, itu memeriksa bahwa UUID belum pernah dikeluarkan sebelumnya. Layanan seperti itu akan secara teknis mudah untuk diterapkan (saya pikir) jika kita mengasumsikan bahwa orang yang menjalankan layanan tersebut benar-benar dapat dipercaya, tidak dapat rusak, dan sebagainya. Sayangnya, mereka tidak ... terutama ketika ada kemungkinan organisasi keamanan pemerintah ikut campur. Jadi, pendekatan ini mungkin tidak praktis, dan mungkin 3 tidak mungkin di dunia nyata.
1 - Jika keunikan UUID menentukan apakah rudal nuklir diluncurkan di ibu kota negara Anda, banyak warga negara Anda tidak akan diyakinkan oleh "kemungkinannya sangat rendah". Oleh karena itu kualifikasi "hampir semua" saya.
2 - Dan inilah pertanyaan filosofis untuk Anda. Apakah ada yang benar-benar acak? Bagaimana kita tahu kalau bukan? Apakah alam semesta seperti yang kita kenal sebagai simulasi? Adakah Tuhan yang mungkin "mengubah" hukum fisika untuk mengubah hasil?
3 - Jika ada yang tahu makalah penelitian tentang masalah ini, silakan komentar.
sumber
Skema UUID umumnya menggunakan tidak hanya elemen pseudo-acak, tetapi juga waktu sistem saat ini, dan semacam ID perangkat keras yang sering unik jika tersedia, seperti alamat MAC jaringan.
Inti dari menggunakan UUID adalah bahwa Anda memercayainya untuk melakukan pekerjaan yang lebih baik dalam memberikan ID unik daripada yang dapat Anda lakukan sendiri. Ini adalah alasan yang sama di balik menggunakan perpustakaan kriptografi pihak ke-3 daripada menggulirkan milik Anda sendiri. Melakukannya sendiri mungkin lebih menyenangkan, tetapi biasanya kurang bertanggung jawab untuk melakukannya.
sumber
Sudah melakukannya selama bertahun-tahun. Tidak pernah mengalami masalah.
Saya biasanya mengatur DB saya untuk memiliki satu tabel yang berisi semua kunci dan tanggal yang dimodifikasi dan semacamnya. Belum pernah mengalami masalah kunci duplikat.
Satu-satunya kelemahan yang dimilikinya adalah ketika Anda menulis beberapa pertanyaan untuk menemukan beberapa informasi dengan cepat, Anda melakukan banyak penyalinan dan menempelkan kunci. Anda tidak memiliki id pendek yang mudah diingat lagi.
sumber
Berikut cuplikan pengujian bagi Anda untuk mengujinya. terinspirasi oleh komentar @ scalabl3
Jika Anda merasa beruntung, centang kotak, itu hanya memeriksa id yang saat ini dihasilkan. Jika Anda ingin pemeriksaan riwayat, biarkan tidak dicentang. Harap dicatat, Anda mungkin kehabisan ram di beberapa titik jika Anda membiarkannya tidak dicentang. Saya mencoba membuatnya cpu friendly sehingga Anda dapat membatalkan dengan cepat saat dibutuhkan, cukup tekan tombol run snippet lagi atau tinggalkan halaman.
sumber
Saya tidak tahu apakah ini penting bagi Anda, tetapi perlu diingat bahwa GUID secara global unik, tetapi substring dari GUID tidak .
sumber
Untuk UUID4 saya membuatnya bahwa ada sekitar ID sebanyak yang ada butiran pasir dalam kotak berbentuk kubus dengan sisi 360.000 km panjang. Itu kotak dengan sisi ~ 2 1/2 kali lebih panjang dari diameter Jupiter.
Bekerja agar seseorang dapat memberi tahu saya jika saya mengacaukan unit:
sumber