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

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

Ответ 1

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

В библиотеке MSDN:

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

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

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

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

Ответ 2

Вот что-то из Wikipedia (исходный источник):

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

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

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

Ответ 3

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

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

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

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

Ответ 4

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

Возможность угадать GUID рядом с nil.

Ответ 5

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

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

Ответ 6

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