Это очень хороший вопрос. Я не верю, что в спешке адекватно рассматривалось использование UUID везде. Я не нашел никаких серьезных исследований.
Совет: очень осторожно действуйте здесь и хорошо разбирайтесь в своей криптографии. Если вы используете 128-битный UUID, «эффект дня рождения» говорит нам, что коллизия вероятна после того, как вы сгенерировали около 2 ^ 64 ключей, при условии, что у вас есть 128 битов энтропии в каждом ключе .
На самом деле довольно сложно убедиться, что это так. Истинная случайность может быть получена из (а) радиоактивного распада (б) случайного фонового радиошума, часто загрязненного, если вы не будете осторожны (в) надлежащим образом выбранного электронного шума, например, взятого из обратного смещения стабилитрона. (Я играл с последним, и это работает как шарм, кстати).
Я бы не стал доверять таким высказываниям, как «Я не видел этого за год использования», если бы пользователь не сгенерировал что-то, приближающееся к 2 ^ 64 (т.е. около 10 ^ 19) клавишам, и не проверил их все друг против друга, а нетривиальное упражнение.
Проблема в этом. Допустим, у вас есть всего 100 бит энтропии, когда вы сравниваете свои ключи со всеми остальными ключами, которые все остальные генерируют в общем пространстве ключей. Вы начнете видеть столкновения примерно через 2 ^ 50 т.е. около 10 ^ 15 ключей. Ваши шансы увидеть коллизию, если вы заполнили базу данных только 1000 миллиардами ключей, все еще незначительны. И если вы не проверите, то позже вы получите неожиданные ошибки, которые появляются в вашей базе данных размером с пета-строку. Это может сильно укусить.
Тот факт, что существует множество подходов к генерации таких UUID, должен вызвать кратковременное беспокойство. Когда вы поймете, что немногие генераторы используют «действительно случайные» процессы с достаточной энтропией для UUID типа 4, вы должны быть чрезмерно обеспокоены, если вы не тщательно изучите энтропийное содержание генератора. (Большинство людей не будут этого делать или даже не знают, как это сделать; вы можете начать с комплекта DieHarder). НЕ путайте генерацию псевдослучайных чисел с генерацией истинных случайных чисел.
Очень важно, чтобы вы осознали, что энтропия, которую вы вводите, - это ваша энтропия, и простое возмущение ключа с помощью криптографической функции не изменяет энтропию. Интуитивно не очевидно, что, если все мое пространство содержит цифры 0 и 1, содержание энтропии такое же, как и в следующих двух строках, при условии, что они являются единственными двумя вариантами: «Это действительно очень сложная строка 293290729382832 * ! @@ # & ^% $$),. m} "и" И СЕЙЧАС ДЛЯ ЧЕГО-ТО РАЗЛИЧНОГО ". Есть еще только два варианта.
Случайность сложно понять правильно, и просто полагать, что «эксперты смотрели на это, поэтому все в порядке» может быть недостаточно. Опытные криптографы (а таких действительно мало кто умеет) первыми признают, что часто ошибаются. Нам доверяли Heartbleed, DigiNotar и др.
Я думаю, что Пол Томблин проявляет соответствующую осторожность. Мой 2с.