Насколько легко вы можете угадать GUID, который может быть сгенерирован? - PullRequest
27 голосов
/ 13 марта 2009

GUID часто используются при создании сеансовых ключей для веб-приложений. Я всегда задавался вопросом о безопасности этой практики. Поскольку GUID генерируется на основе информации с компьютера и времени, а также нескольких других факторов, насколько сложно угадать вероятные GUID, которые появятся в будущем. Допустим, вы начали 1000 или 10000 новых сеансов, чтобы получить хороший набор данных сгенерированных GUID. Будет ли это проще для создания GUID, который может быть использован для другого сеанса. Вам даже не нужно угадывать конкретный GUID, а просто пытаться использовать GUID, который может быть сгенерирован в определенный период времени.

Ответы [ 6 ]

20 голосов
/ 13 марта 2009

Вот некоторые вещи из Википедии ( оригинальный источник ):

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

В моем понимании, они этого не скрывают.

VID GUID использует более поздний алгоритм, который является псевдослучайным числом. Эти иметь «4» в той же позиции, для пример {38a52be4-9352-453e-af97-5c3b448652f0}. В частности, бит data3 шаблон будет 0001xxxxxxxxxxxx в первый случай, и 0100xxxxxxxxxxxx во-вторых. Криптоанализ Генератор WinAPI GUID показывает, что поскольку последовательность идентификаторов GUID V4 псевдослучайный, с учетом начального состояния можно прогнозировать до следующих 250 000 GUID, возвращаемые функцией UuidCreate 1 . Вот почему GUID не должен использоваться в криптографии, e. г., как случайные ключи.

10 голосов
/ 13 марта 2009

GUID гарантированно будут уникальными, и это все. Не гарантировано быть случайным или трудно угадать.

Чтобы ответить на ваш вопрос, по крайней мере для алгоритма генерации GUID V1, если вы знаете алгоритм, MAC-адрес и время создания, вы, вероятно, могли бы сгенерировать набор GUID, один из которых был бы тем, который был фактически сгенерирован. И MAC-адрес, если это GUID V1, может быть определен из образцов GUID с того же компьютера.

Дополнительный лакомый кусочек из википедии:

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

9 голосов
/ 13 марта 2009

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

Из библиотеки MSDN:

Функция CoCreateGuid вызывает Функция RPC UuidCreate , которая создает GUID, глобально уникальный 128-бит целое число. Используйте функцию CoCreateGuid когда вам нужен абсолютно уникальный номер, который вы будете использовать в качестве постоянный идентификатор в распределенном окружающая среда. Очень высокая степень определенность, эта функция возвращает уникальное значение - нет другого вызова, на та же или любая другая система (в сети или нет), должен вернуть то же значение.

А если вы проверите страницу на UuidCreate :

Функция UuidCreate создает UUID , который нельзя отследить до Ethernet / Token Ring адрес компьютер, на котором он был создан. Это также не может быть связан с другими UUID s создано на том же компьютере.

Последнее предложение содержит ответ на ваш вопрос. Поэтому я бы сказал, что довольно сложно догадаться, если в реализации Microsoft нет ошибки.

6 голосов
/ 13 марта 2009

Если кто-то продолжит использовать сервер с непрерывным потоком идентификаторов GUID, это будет скорее атака типа «отказ в обслуживании», чем все остальное.

Вероятность того, что кто-то угадает GUID, равна нулю.

0 голосов
/ 29 апреля 2011

«Идентификаторы GUID гарантированно будут уникальными, и это все». GUID не гарантируется быть уникальным. По крайней мере те, которые были сгенерированы CoCreateGuid: «Для очень высокой степени достоверности эта функция возвращает уникальное значение - никаких других вызовов, в той же или любой другой системе (сетевой или нет), должен вернуть то же значение. "

0 голосов
/ 13 марта 2009

Зависит. Трудно, если GUID установлены разумно, например, используя соленые безопасные хеши, и у вас есть много битов. Это слабо, если GUID короткие и очевидные.

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

...