Đây là một câu hỏi rất hay. Tôi không tin rằng nó đã được xem xét đầy đủ khi vội vàng sử dụng UUID ở mọi nơi. Tôi chưa tìm thấy nghiên cứu vững chắc nào.
Một gợi ý: bước đi rất cẩn thận ở đây, và biết rõ mật mã của bạn. Nếu bạn sử dụng UUID 128 bit, 'hiệu ứng sinh nhật' sẽ cho chúng tôi biết rằng có khả năng xảy ra xung đột sau khi bạn tạo khoảng 2 ^ 64 khóa, miễn là bạn có 128 bit entropy trong mỗi khóa .
Thực sự khá khó khăn để đảm bảo rằng đây là trường hợp. Tính ngẫu nhiên thực sự có thể được tạo ra từ (a) phân rã phóng xạ (b) nhiễu vô tuyến nền ngẫu nhiên, thường bị ô nhiễm trừ khi bạn cẩn thận (c) nhiễu điện tử được chọn phù hợp, ví dụ được lấy từ một diode Zener phân cực ngược. (Tôi đã chơi với bản cuối cùng và nó hoạt động như một bùa mê, BTW).
Tôi sẽ không tin vào các phát âm như "Tôi đã không thấy điều này trong một năm sử dụng", trừ khi người dùng đã tạo ra thứ gì đó tiếp cận các phím 2 ^ 64 (tức là khoảng 10 ^ 19) và kiểm tra tất cả chúng với nhau, a tập thể dục không tầm thường.
Vấn đề là thế này. Giả sử bạn chỉ có 100 bit entropy, khi so sánh các khóa của bạn với tất cả các khóa khác mà mọi người khác đang tạo trong một không gian khóa chung. Bạn sẽ bắt đầu thấy va chạm trong khoảng 2 ^ 50 tức là. khoảng 10 ^ 15 phím. Cơ hội của bạn để thấy một vụ va chạm nếu bạn đã điền vào cơ sở dữ liệu của mình chỉ với 1000 tỷ khóa vẫn không đáng kể. Và nếu bạn không kiểm tra, thì sau đó bạn sẽ nhận được các lỗi không mong muốn xuất hiện trong cơ sở dữ liệu có kích thước hàng peta của bạn. Điều này có thể cắn mạnh.
Thực tế là có nhiều cách tiếp cận để tạo ra các UUID như vậy sẽ gây ra sự lo lắng nhất thời. Khi bạn nhận ra rằng một vài máy phát điện sử dụng các quy trình 'thực sự ngẫu nhiên' với đủ entropy cho UUID loại 4, bạn nên quan tâm quá mức trừ khi bạn đã kiểm tra cẩn thận nội dung entropy của máy phát. (Hầu hết mọi người sẽ không làm điều này hoặc thậm chí biết cách; bạn có thể bắt đầu với bộ DieHarder). KHÔNG nhầm lẫn việc tạo số giả ngẫu nhiên với việc tạo số ngẫu nhiên thực sự.
Điều quan trọng là bạn nhận ra rằng entropy bạn đặt vào là entropy mà bạn có, và chỉ cần làm nhiễu khóa bằng cách áp dụng một chức năng mã hóa sẽ không làm thay đổi entropy. Có thể không rõ ràng bằng trực giác rằng nếu toàn bộ không gian của tôi bao gồm các chữ số 0 và 1, nội dung entropy giống như hai chuỗi sau, với điều kiện chúng là hai tùy chọn duy nhất: "Đây là một chuỗi thực sự phức tạp 293290729382832 * ! @@ # & ^% $) Vẫn chỉ có hai lựa chọn.
Sự ngẫu nhiên là khó khăn để có được đúng, và chỉ cần tin rằng "các chuyên gia đã xem xét nó, do đó nó ổn" có thể không đủ. Chuyên gia mật mã (và có một vài trong số những người thực sự thành thạo) là những người đầu tiên thừa nhận họ thường hiểu sai. Chúng tôi tin tưởng thật lòng, DigiNotar, v.v.
Tôi nghĩ Paul Tomblin đang thực hiện thận trọng thích hợp. 2c của tôi.