Просто любопитно, но каква е вероятността за съвпадение на 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. При скорост от един милиард в секунда ще са необходими 5391448762278159040348 години за генериране на 2^127 GUID.
Ние генерираме колекция от ръководства. Каква е вероятността от сблъсък? Тоест, каква е вероятността да генерираме две водачи с еднаква стойност? Това е парадоксът на рождения ден. Ако генерирате последователност от 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. Настоящите алгоритми използват 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 са генерирани. Това е подобно на проблема с рождения ден в статистиката. Вижте Wikipedia и http://betterexplained.com/articles/understanding-the-birthday-paradox/ (този конкретно има пример за GUID)
Като цяло, вероятността за сблъсък за генериране на M водачи над N възможни водачи е 1 - (1- (1/N))^C(M,2)
където C(M,2)
е 'M избират 2'