UUID Üretici (v4)

Tarayıcınızda kriptografik rastgelelikle bir veya çok sayıda sürüm-4 UUID üretin — sunucuya hiçbir şey gitmez.

1.031 görüntülenme

v4 UUID'yi Benzersiz Kılan Nedir?

UUID (Evrensel Benzersiz Tanımlayıcı), geleneksel olarak 8-4-4-4-12 onaltılık gruplar halinde 36 karakterle yazılan 128 bitlik bir sayıdır — örneğin f47ac10b-58cc-4372-a567-0e02b2c3d479. Bu 128 bitin, bu üreticinin ürettiği sürüm 4'ünde 122 tanesi kriptografik olarak güvenli bir rastgele sayı üretecinden gelir. Geri kalan 6 bit ise hiç rastgele değildir: UUID'yi sürüm 4 olarak işaretleyen ve "varyantını" belirten sabit değerlerdir — bu yüzden ikinci tireden hemen sonraki karakter her zaman 4'tür, sonraki grubun ilk karakteri ise her zaman 8, 9, a veya b'dir.

122 rastgele bit muazzam büyük bir uzamdır: 2^122 olası değer, yaklaşık 5,3×10³⁶. Somutlaştırmak gerekirse, Dünya'daki her cihaz saniyede bir milyar UUID üretse bile, tek bir kazara çakışma ihtimalinin yüzde 50'ye ulaşması için on milyarlarca yıl süren birleşik üretim gerekirdi. Bu yüzden dağıtık sistemler — aralarında hiçbir koordinasyon olmadan yüzlerce bağımsız sunucuda çalışan servisler — merkezi bir kayda bakmadan kendi UUID'lerini yerel olarak üretebilir ve iki tanenin asla çakışmayacağına güvenebilir. Formatın tüm amacı budur: veritabanı sorgusu olmadan, ağ üzerinden bir koordinatörle konuşmadan, tamamen yerel olarak benzersiz tanımlama üretebilmek.

Üretim burada tamamen tarayıcınızın içinde, Web Crypto API'sinin crypto.randomUUID() fonksiyonuyla gerçekleşir — tarayıcıların güvenlik açısından hassas işlemler için kullandığı aynı kriptografik rastgele kaynak. Hiçbir şey sunucuya gönderilmez, hiçbir tohum kaydedilmez ve ürettiğiniz her UUID diğerlerinden tamamen bağımsızdır; birden fazla UUID istediğinizde her biri kendi bağımsız rastgele üretimiyle oluşturulur.

UUID Kullanmadan Önce Bilinmesi Gerekenler

v4 tek sürüm değildir. v1 ve v6, zaman damgası ve üreten makinenin ağ adresini gömer; bu onları sıralanabilir yapar ama ne zaman ve nerede oluşturulduklarına dair bilgi de sızdırır. v5, verdiğiniz bir adı hash'ler ve aynı girdi için her zaman aynı UUID'yi üretir — rastgele değil, deterministik bir tanımlayıcıya ihtiyaç duyduğunuzda kullanışlıdır. Daha yeni bir standart olan v7 ise bir zaman damgası önekini rastgele bitlerle birleştirir, böylece hem benzersizlik hem de doğal kronolojik sıralama sağlar. Yalnızca rastgele, tahmin edilemez ve çakışmasız bir tanımlayıcıya ihtiyaç duyup zaman veya isim kodlamasına gerek duymadığınızda doğru varsayılan v4'tür.

Pratik bir uyarı: v4 değerleri tamamen rastgele olduğu için, bunları veritabanı birincil anahtarı yapmak B-tree indeksli tablolarda ekleme performansını zedeleyebilir; çünkü yeni satırlar indeksin bir ucuna düzgünce eklenmek yerine öngörülemez konumlara düşer. Ekleme verimi ölçekte önemliyse, UUIDv7 veya ULID gibi zaman sıralı bir alternatif, aynı 128-bit benzersizlik garantisini korurken indeks dostu kalır. Küçük ölçekli projelerde bu fark genellikle fark edilmez; büyük tablolarda ise ölçülebilir bir performans farkı yaratır.

Sıkça Sorulan Sorular

İki üretilen UUID çakışabilir mi?

Teoride evet, pratikte neredeyse hiç: 2^122 olasılıkta, saniyede bir milyar UUID üretseniz bile tek bir çakışma ihtimalinin yüzde 50'ye ulaşması on milyarlarca yıl sürerdi. Dünya çapındaki sistemler bu garantiye güvenir.

UUID'yi veritabanı birincil anahtarı yapayım mı?

Dağıtık üretim ve tahmin edilemez kimlikler için idealdir; ama tamamen rastgele v4'ler B-tree indekslerini parçalayarak ekleme performansını düşürebilir. Ekleme hızı kritikse zaman sıralı UUIDv7 veya ULID'e bakın — aynı boyut, indeks dostu.

Tek sürüm v4 mü?

Hayır — v1/v6 zaman damgası ve ağ adresi gömer, v5 verilen bir adı hash'ler ve her zaman aynı sonucu üretir, v7 ise zaman damgasıyla rastgeleliği birleştiren daha yeni bir formattır. Sadece rastgele, tahmin edilemez bir kimlik gerekiyorsa varsayılan tercih v4'tür.

v4 UUID'deki sabit bitler ne işe yarar?

128 bitin yalnızca 122'si rastgeledir. Kalan 6 bit formatın kendisini işaretlemek için ayrılmıştır — bir yarım bayt "sürüm 4" olduğunu sabitler, bir diğeri de "varyantı" belirtmek için küçük bir değer kümesiyle (8, 9, a veya b) sınırlanır. Bu yüzden kaç tane üretirseniz üretin, her v4 UUID'de ikinci tireden hemen sonra bir 4 bulunur.

UUID'yi şifre sıfırlama bağlantısı gibi bir güvenlik jetonu olarak kullanabilir miyim?

v4 UUID kriptografik olarak güvenli bir rastgele kaynaktan üretilir, bu yüzden tahmin etmek pratik değildir — ama tasarım amacı gizlilik değil benzersizliktir. Güvenlik açısından hassas her durumda, yalnızca UUID'ye güvenmek yerine son kullanma süresi, tek kullanımlık zorunluluğu ve sunucu tarafı doğrulama ile birlikte kullanın.

Yorumlar

Henüz yorum yok — ilk yorumu siz yazın!

Benzer Araçlar