2012-11-27 39 views
3

RFC 4122定義了UUIDs相當詳細。目前定義了5種變體,全部爲128位,但在位的派生方式上有所不同。爲什麼UUID標準很複雜,我應該遵循它們嗎?

爲什麼要關心遵守特定的變體;一旦創建了ID,那麼使用UUID的人有什麼理由需要知道它是如何構建的?特別是,如果我打算使用變體4(完全隨機),那麼遵循將隨機位從128降低到122(對於變體爲4b位,保留2位)的RFC是一種浪費。我不是更好地遵循RFC並使用所有128位的隨機性嗎?

+0

如果您不遵守規則,那麼您的ID可能會與其他算法之一產生的ID衝突。 –

+0

與處理2個變體4 ID來源相比,這有什麼不同嗎?即碰撞的機會不會超過2個由同一個變體產生的機會。 – Mike

+2

由於某些算法(例如v1)是確定性的,如果您的算法在版本字段中意外生成一個帶有「1」的GUID,則攻擊者可以強制執行GUID衝突:它們設置MAC地址以匹配GUID的最後部分,並等待匹配開始部分的時間。然後他們點擊SUBMIT和繁榮,GUID碰撞,數據庫爆炸,錢被轉移到開曼羣島。每種算法的設計都是爲了避免與自身的衝突,但它無法防止與其他算法的衝突。只要遵守規則。不要試圖偷偷摸摸那些額外的6位。 –

回答

5

如果您不遵守規則,那麼您的ID可能會與其他算法之一產生的ID衝突。

由於某些算法(例如v1)是確定性的,如果您的算法在版本字段中意外生成一個帶有「1」的GUID,攻擊者可以強制執行GUID衝突:它們設置MAC地址以匹配GUID的最後部分並等待時間匹配的開始部分。然後他們點擊SUBMIT和繁榮,GUID碰撞,數據庫爆炸,錢被轉移到開曼羣島。每種算法的設計都是爲了避免與自身的衝突,但它無法防止與其他算法的衝突。只要遵守規則。不要試圖偷偷摸摸那些額外的6位。

+0

鑑於版本1的UUID具有100納秒的時鐘分辨率(假設計算機硬件也是如此)和隨機時鐘序列,這種攻擊對我來說似乎是不可能的。 –

相關問題