Как убедиться, что сгенерированный guid уникален во всем мире? - PullRequest
11 голосов
/ 20 октября 2010

Допустим, я хочу установить guid в качестве guid сборки моего приложения.По запросу в интернете мы можем использовать (new Guid()).Next(), чтобы получить новое уникальное значение.

Я не могу понять, как мой гид гарантированно уникален по отношению к другим?Пожалуйста, объясните, если вы знаете, как.

Ответы [ 3 ]

7 голосов
/ 20 октября 2010

Единственная гарантия, что у вас есть, - это вероятность на вашей стороне. 2 ^ 128 возможных GUID и некоторая хитрость в процессе создания делает очень маловероятным, что вы когда-либо увидите дубликат.

Кажется, V4 теперь является стандартным GUID для Windows. Если он основан исключительно на генераторе псевдослучайных чисел, как, по-видимому, указывает Википедия, на него влияет проблема Birthday .

Я видел несколько примеров использования 128-бит, чтобы показать, что дублирование практически невозможно. Те часто пропускают две вещи. Проблема дня рождения и того, что GUID V4 на самом деле составляет 124 бита.

Вам нужно 1/2+sqrt(1/4-2*2^124*ln(0,5)) ≈ 5.4*10^18 GUID, чтобы получить 50% вероятности дубликата. Это все еще много, но 50%, возможно, не та сделка, которую вы ищете. Допустим, вы хотите, чтобы дубликат получался один на миллион, тогда вы можете иметь sqrt(2*2^124*ln(1/(1-0,000001))) ≈ 6,5 * 10 ^ 15 GUID. Если вы создаете тысячу идентификаторов GUID в секунду, вы можете продолжать делать это в течение почти 206667 лет, прежде чем рискует получить дубликат с вероятностью от одного до миллиона. 6,52191054316287e15/(3600*24*365,25*1000) ≈ 206666,874006986

Вероятность того, что все эти вычисления будут правильными → 0.

6 голосов
/ 20 октября 2010

Это не так, но способ его генерации и способ его представления делают вероятность создания двух одинаковых идентификаторов GUID в этом тысячелетии почти нулевой.

См .: Простое доказательство того, что GUID не уникален

3 голосов
/ 20 октября 2010

С http://en.wikipedia.org/wiki/Globally_unique_identifier:

Алгоритм

В указанном OSF алгоритме для генерации новых (V1) GUID MAC-адрес сетевой карты пользователя используется в качестве основы для последней группы цифр GUID, что означает, например, что документ может быть отслежен до компьютер, который его создал. Эта дыра в секретности использовалась при поиске создателя червя Мелисса [2]. Большинство других цифр основаны на времени генерации GUID.

VID GUID, которые содержат MAC-адрес и время, могут быть идентифицированы по цифре «1» в первой позиции третьей группы цифр, например {2f1e4fc0-81fd-11da-9156-00036a0f876a}.

VID GUID использует более поздний алгоритм, который является псевдослучайным числом. Они имеют «4» в том же положении, например {38a52be4-9352-453e-af97-5c3b448652f0}. В частности, битовая комбинация «data3» будет иметь вид 0001xxxxxxxxxxxx в первом случае и 0100xxxxxxxxxxxx во втором случае. Криптоанализ генератора WinAPI GUID показывает, что, поскольку последовательность GUID V4 является псевдослучайной; учитывая полное знание внутреннего состояния, можно прогнозировать предыдущие и последующие значения. [3].

...