Насколько легко вы можете угадать GUID, который может быть сгенерирован?
Вопрос
Идентификаторы GUID часто используются при создании сеансовых ключей для веб-приложений.Я всегда задавался вопросом о безопасности этой практики.Поскольку GUID генерируется на основе информации, полученной от компьютера, и времени, а также нескольких других факторов, насколько сложно угадать вероятные GUID, которые появятся в будущем?Допустим, вы запустили 1000 или 10000 новых сеансов, чтобы получить хороший набор данных генерируемых GUID.Упростит ли это создание GUID, который может быть использован для другого сеанса?Вам даже не нужно будет угадывать конкретный GUID, а просто продолжать пробовать GUID, которые могут быть сгенерированы в определенный период времени.
Решение
Веб-приложения .NET вызывают Guid.NewGuid () для создания GUID, который, в свою очередь, в конечном итоге вызывает CoCreateGuid () COM-функция на несколько кадров глубже в стеке.
Из библиотеки MSDN:
Функция CoCreateGuid вызывает Функция RPC UuidCreate , которая создает GUID, глобально уникальный 128-бит целое число. Используйте функцию CoCreateGuid когда вам нужен абсолютно уникальный номер, который вы будете использовать в качестве постоянный идентификатор в распределенном окружающая среда. Очень высокая степень определенность, эта функция возвращает уникальное значение - нет другого вызова, на та же или любая другая система (в сети или нет), должен вернуть то же значение.
И если вы посмотрите страницу UuidCreate :
Функция UuidCreate создает UUID , который нельзя отследить до Ethernet / Token Ring адрес компьютер, на котором он был создан. Это также не может быть связан с другими UUID созданы на том же компьютере.
Последнее предложение содержит ответ на ваш вопрос. Поэтому я бы сказал, что довольно сложно догадаться, если в реализации Microsoft нет ошибки.
Другие советы
Вот некоторые материалы из Википедии ( первоисточник ):
V1 GUID, которые содержат MAC-адрес и время может быть определено цифра "1" в первой позиции третья группа цифр, например {2f1e4fc0-81fd-11da-9156-00036a0f876a}. Р>
Насколько я понимаю, они этого не скрывают.
V4 GUID используют более поздний алгоритм, который является псевдослучайным числом. Эти иметь "4" в том же положении, для пример {38a52be4-9352-453e-af97-5c3b448652f0}. В частности, бит data3 шаблон будет 0001xxxxxxxxxxxx в первый случай, и 0100xxxxxxxxxxxx во-вторых. Криптоанализ Генератор WinAPI GUID показывает, что поскольку последовательность идентификаторов GUID V4 псевдослучайный, с учетом начального состояния можно прогнозировать до следующих 250 000 GUID, возвращаемые функцией UuidCreate 1 . Вот почему GUID не должен использоваться в криптографии, e. как случайные ключи.
GUID гарантированно будут уникальными, и это все. Не гарантировано быть случайным или трудно угадать.
Чтобы ответить на ваш вопрос, по крайней мере для алгоритма генерации GUID V1, если вы знаете алгоритм, MAC-адрес и время создания, вы, вероятно, могли бы сгенерировать набор GUID, один из которых был бы тем, который был фактически сгенерирован. И MAC-адрес, если это GUID V1, можно определить по образцам GUID с того же компьютера.
Дополнительная новость из Википедии:
Указанный OSF алгоритм для генерация новых GUID была широко распространена критика. В этих (V1) GUID MAC-адрес сетевой карты пользователя используется в качестве базы для последней группы Цифры GUID, что означает, например, что документ можно отследить до компьютер, который его создал. это дыра конфиденциальности была использована при поиске создатель червя Мелисса. Наиболее другие цифры основаны на время генерации GUID.
Если кто-то продолжит использовать сервер с непрерывным потоком идентификаторов GUID, это будет скорее атака типа «отказ в обслуживании», чем все остальное.
Вероятность того, что кто-то угадает GUID, равна нулю.
Зависит от обстоятельств.Это сложно, если GUID настроены разумно, напримериспользуйте соленые безопасные хэши, и у вас будет много битов.Это слабо, если GUID короткие и очевидные.
Возможно, вы все равно захотите предпринять шаги, чтобы помешать кому-либо создать 10000 новых сеансов из-за возможной нагрузки на сервер.
" GUID гарантированно будут уникальными, вот и все. GUID не гарантируется быть уникальным. По крайней мере, сгенерированные CoCreateGuid: «Для очень высокой степени уверенности эта функция возвращает уникальное значение - никаких других вызовов в той же или любой другой системе (сетевой или нет), < strong> должен возвращать то же значение. "