Ответ 1
Существует несколько способов создания UUID.
Википедия делает хорошую работу по их перечислению.
http://en.wikipedia.org/wiki/Universally_unique_identifier
v4 UUIDs:
Ключевая идея о случайности - это то, что на самом деле очень сложно сгенерировать, когда речь идет о шифровании. Большинство генераторов случайных чисел представляют собой математическую формулу, которая просто должна ПОСМОТРЕТЬ случайным образом, и это отлично подходит для большинства приложений. Многие программы будут использовать $pid | время, чтобы генерировать случайное семя.
Что, не очень многообещающе... Я знаю, в какое время был сформирован запрос, и есть только 65 534 pids. Я могу выяснить случайное семя от этого.
Итак, если вы заселяете свой генератор чисел UUIDv4 в одно и то же время (то же самое) с помощью $pid | time() на 100 машинах с номерами PID, то у вас есть (я думаю) 100/65536 вероятность дублирования. Это можно сделать довольно легко, как это
for MACH in `cat machine_list`; do ; ssh $MACH -c "restart something" & ; done
SecureRandom:
Код из SecureRandom, пытается openssl,/dev/urandom, затем win32...
При чтении из /dev/urandom это очень случайный случай, но если в системе недостаточно хаоса, urandom сделает материал для доставки случайных данных. Когда вы читаете /dev/random, его "ОЧЕНЬ случайный", и если не хватает хаоса, /dev/random будет блокироваться.
UUID:
В графе UUID используется rand()
r = [rand(0x100000000)].pack "N"
для адреса mac.
UUID также не предоставляет UUID v4:)
Практически, если у меня когда-либо было столкновение md5 или uuid, я покупаю лотерейный билет!