SORU
31 Mart 2009, Salı


Ne zaman gerçekten tasarımının bir parçası olarak UUID kullanmak zorunda mısın?

Gerçekten UUID nokta görmüyorum. Bir çarpışma olasılığı olduğunu biliyorumetkili sıfıramaetkili sıfırhatta yakın imkansız.

Biri ama UUID kullanmak için hiçbir seçenek var bir örnek verebilir misiniz? Gördüğüm tüm kullanır, UUID olmadan alternatif bir tasarım görüyorum. Emin tasarımını biraz daha karmaşık olabilir, ama en azından başarısızlık sıfır olmayan bir olasılık yok.

UUID bana genel değişkenler gibi kokuyor. Genel değişkenler, basit tasarım, ama sadece tembel tasarımı için birçok yolu vardır.

CEVAP
24 NİSAN 2009, Cuma


Kendimi oldukça bilgili konu ile ilgili olduğunu düşünüyorum bu yüzden Ruby için UUID jeneratör/parser yazdım. Dört büyük UUID sürümü vardır:

Sürüm 4 olacak biçimde aslında rastgelelik sadece 16 bayt şifreli olarak güvenli rasgele sayı üreteci çekti, bazı bit öldürmek UUID sürümünü belirlemek ve variant için. Bu çarpışmak için son derece olası değildir, ama eğer bir PRNG kullanılırsa veya eğer sen gerçekten, gerçekten, gerçekten, gerçekten, gerçekten kötü şans olursa gerçekleşebilir.

Ve Sürüm Sürüm 5 3 olacak biçimde sırasıyla SHA1 ve MD5 hash fonksiyonları, bir UUID oluşturmak için zaten eşsiz bir parça veri ile bir ad ile birleştirir. Bu, örneğin, bir URL bir UUID üretmek için izin verir. Çarpışmalar burada yatan karma işlevi de bir çarpışma varsa, sadece mümkündür.

Sürüm 1 olacak biçimde en yaygın olanlarıdır. Ağ kartı MAC adresini spoof sürece, benzersiz olmalıdır), artı zaman damgası, her zamanki bit öldürmek UUID oluşturmak için artı kullanıyorlar. MAC adresi olmayan bir makine durumunda, 6 düğüm bayt şifreli olarak güvenli rasgele sayı üreteci ile oluşturulur. Eğer iki tane olacak biçimde sırayla zaman damgası bir önceki UUID eşleşen yeterince hızlı oluşturulur, zaman damgası 1 artırılır. Çarpışmalar verirler sürece, aşağıdakilerden biri gerçekleşir: MAC adresi sahte; Bir makineyi çalıştıran iki farklı UUID üreten uygulamalar üretiyor olacak biçimde, tam olarak aynı anda İki makine olmadan bir ağ kartı veya olmadan kullanıcı düzeyi erişim için MAC adresi verilir aynı rasgele bir düğüm sırası, ve oluşturmak olacak biçimde, tam olarak aynı anda; tükendi bayt olarak temsil zaman damgası ve aktarma geri sıfır.

Gerçekçi olmak gerekirse, bu olayların hiçbiri tek bir uygulama KİMLİĞİ alanı içinde tesadüfen ortaya çıkar. Sürece sen kabul Kimlikleri, diyelim ki, bir İnternet çapında, ya da güvenilmeyen bir ortam nerede kötü niyetli kişiler olabilir yapmak kötü bir şey olması durumunda KİMLİK çarpışma, sadece bir şey gerekir endişe. Kritik eğer aynı sürüm benim gibi 4 UUID, çoğu durumda oluşturmak için ne varsa, çok da önemli olmadığını anlamak için. Seninki tamamen farklı bir KİMLİK uzayda KİMLİĞİ ürettim. Başvurum hiç çarpışma hakkında bilecek çarpışma önemi yok. Açıkçası, tek bir uygulama alanı olmadan kötü niyetli aktörler, nesli tüm hayatın yeryüzünde meydana gelecek uzun zaman önce bir çarpışma, hatta bir sürüm 4 UUID, olsan bile üreten çok az olacak biçimde saniyede.

Ayrıca, 2^64 * 16 256 depolamanın. Gibi, tek bir uygulama alanı içinde KİMLİK çarpışma P şansı vardı önce Kimlikleri değerinde 256 depolamanın saklamak gerekir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Andrea Lewis

    Andrea Lewis

    14 Mart 2013
  • Jeremy Gallman

    Jeremy Gallm

    11 NİSAN 2012
  • Māris Zaharovs

    Māris Zahar

    28 Mayıs 2008