Существуют ли неочевидные способы злоупотребления GUID? - PullRequest
4 голосов
/ 15 декабря 2009

GUID обычно используются для уникальной идентификации всех видов объектов - запросов от внешних систем, файлов и т. Д. Работайте как по волшебству - вы вызываете функцию «GiveMeGuid ()» (UuidCreate () в Windows) - и к вашим услугам новый новый GUID.

Учитывая, что мой код действительно вызывает функцию «GiveMeGuid ()» каждый раз, когда мне нужен новый GUID, есть какой-нибудь неочевидный способ его неправильного использования?

Ответы [ 5 ]

4 голосов
/ 15 декабря 2009

Только что нашел ответ на старый вопрос: Насколько детерминированы .Net GUIDs? . Требуя это:

Это не полный ответ, но я могу вам сказать, что 13-я шестнадцатеричная цифра всегда равна 4, потому что она обозначает версию алгоритма, использованного для генерации GUID (id, v4); также, и я цитирую Википедию:

Криптоанализ генератора WinAPI GUID показывает, что, поскольку последовательность GUID V4 является псевдослучайной, с учетом начального состояния можно прогнозировать до следующих 250 000 GUID, возвращаемых функцией UuidCreate. Вот почему GUID не должны использоваться в криптографии, например, в качестве случайных ключей.

Итак, если вам повезло и вы получили то же самое семя, вы разбьете 250 тысяч зеркал в последовательности. Процитирую еще один кусок Википедии :

Хотя каждый сгенерированный GUID не гарантированно является уникальным, общее количество уникальных ключей (2 128 или 3,4 × 10 38 ) настолько велико, что вероятность того же число, генерируемое дважды, чрезвычайно мало.

Итог: возможно, неправильная форма, это считается GUID всегда уникальным.

2 голосов
/ 15 декабря 2009

Это зависит. Некоторые реализации генерации GUID зависят от времени, поэтому вызов CreateGuid в быстрой последовательности МОЖЕТ создать конфликтующие GUID.

изменить: теперь я помню проблему. Однажды я работал над каким-то php-кодом, в котором функция генерации GUID перезаряжала ГСЧ с системным временем каждого вызова. Не делай этого.

1 голос
/ 15 декабря 2009

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

1 голос
/ 15 декабря 2009

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

1 голос
/ 15 декабря 2009

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

...