Просто любопытно, но какова вероятность совпадения Guid?
Скажите руководство от SQL-сервера: 5AC7E650-CFC3-4534-803C-E7E5BBE29B3D
- это факториал?: (36 * 32)!= (1152)!
обсудить = D
Просто любопытно, но какова вероятность совпадения Guid?
Скажите руководство от SQL-сервера: 5AC7E650-CFC3-4534-803C-E7E5BBE29B3D
- это факториал?: (36 * 32)!= (1152)!
обсудить = D
Не понятно, что вы просите. Я вижу два способа интерпретировать ваш вопрос.
Учитывая GUID g
, какова вероятность того, что кто-то его угадает? Предположим для простоты, что все 128 бит GUID доступны. Тогда вероятность угадать g
равна 2^-128
. Это мало. Позвольте получить некоторую интуицию вокруг этого. Предположим, что наш злоумышленник может генерировать один миллиард идентификаторов GUID в секунду. Чтобы иметь 50% -ный шанс угадать g
, нашему злоумышленнику пришлось бы генерировать 2 ^ 127 GUID. При скорости одного миллиарда в секунду для генерации 2 ^ 127 GUID потребуется 5391448762278159040348 лет.
Мы генерируем набор контуров. Какова вероятность столкновения? То есть, какова вероятность того, что мы создадим два гида с одинаковым значением? Это парадокс дня рождения. Если вы произвольно генерируете последовательность из n GUID, то вероятность по крайней мере одного столкновения приблизительно равна p(n) = 1 - exp(-n^2 / 2 * 2^128)
(это проблема дня рождения с числом возможных дней рождения 2 ^ 128).
n p(n)
2^30 1.69e-21
2^40 1.77e-15
2^50 1.86e-10
2^60 1.95e-03
Таким образом, даже если вы генерируете 2 ^ 60 GUID, вероятность столкновения крайне мала. Если вы можете генерировать один миллиард идентификаторов GUID в секунду, все равно потребуется 36 лет, чтобы иметь вероятность столкновения 1,95e-03.
Число возможных GUID (128-битное значение) составляет 2 ^ 128 или 3,4 × 10 ^ 38 - примерно 2 трлн. за кубический миллиметр всего объема Земли.
Другими словами, вид низкого.
(Источник для задания объема Земли: WikiPedia)
Зависит от типа алгоритма генерации GUID. Текущие алгоритмы используют 124 случайных бита, поэтому вероятность равна 1 в 2 ^ 124.
С более старыми алгоритмами (использующими время и MAC-адрес) вероятность намного выше.
В ваших расчетах есть несколько ошибок. Во-первых, 36 * 32 означает, что любой буквенно-цифровой символ может быть частью GUID. Это не тот случай; допускаются только символы HEX.
Во-вторых, вычисление количества уникальных идентификаторов GUID Количество действительных символов (16: 0-9, A-F) ^ длина GUID (32 символа)
Итак, мы имеем 16 ^ 32 == > 2 ^ (4 ^ 32) == > 2 ^ 128
Шансы угадать любой GUID составляют 1/2 ^ 128.
Это 1/(количество уникальных чисел, которое возможно с заданной длиной UID). В приведенном выше примере мы видим 16 байтов или 128 бит. 2 ^ 128, поэтому вероятность совпадения равна 1/2 ^ 128.
Это зависит от количества GUID. Это похоже на проблему рождения в статистике. См. Википедию и http://betterexplained.com/articles/understanding-the-birthday-paradox/ (в этом примере есть пример GUID)
В общем случае вероятность столкновения для генерации M-гильд над N возможными концами равна 1 - (1- (1/N))^C(M,2)
, где C(M,2)
есть "M выбрать 2"