Как предсказать следующий GUID из данного GUID? - PullRequest
3 голосов
/ 03 мая 2009

Я отправил 10000 писем нашим клиентам, и каждое письмо имело ссылку в формате

http://example.com/LogIn?key={guid}

К сожалению, отправленные мной guid были случайными путеводителями (тестовые данные, сгенерированные Guid.NewGuid()), поэтому все клиенты получили недействительные ссылки ...

На основании 404-х, которые я получаю от веб-сервера, у меня есть несколько руководств, которые я разослал. Я читал, что генератор guid в Windows слаб, поэтому вы можете предсказать следующий guid из того, который у вас уже есть. Кто-нибудь знает как? Если бы я мог сделать это, я мог бы сделать направленные мной инструкции действительными, чтобы ссылки снова заработали.

Ответы [ 5 ]

7 голосов
/ 03 мая 2009

То, как Windows генерировала идентификаторы GUID, несколько раз менялось, и многие, казалось бы, надежные советы в Интернете совершенно неверны (может быть, просто устарели, может быть, всегда совершенно неверны).

В последний раз, когда я изучал это (несколько лет назад, вероятно, XP SP2), я вошел в код операционной системы, чтобы увидеть, что на самом деле происходит, и он генерировал случайное число с безопасным случайным числом . генератор чисел .

Я сомневаюсь, что вам повезет, предсказав один GUID из другого, если вы сгенерировали их по умолчанию.

1 голос
/ 03 декабря 2018

Прежде всего вам необходимо знать, соответствуют ли они RFC4122, и вам нужно получить версию.

Если это UUIDv1, вы можете предсказать их

UUIDv1 состоит из:

  • Метка времени (интервалы 100 нс с эпохи григорианского календаря)
  • Версия (1) клев
  • Два (или три, lol) бита для соответствия RFC4122 (это приводит к тому, что полубайт находится в [89ab])
  • Идентификатор часов (случайные биты)
  • Идентификатор узла (постоянная маска из 6 байтов)

Вам просто нужно пройтись по возможным временным меткам. Осторожно, существует множество интервалов по 100 нс!

Некоторые программы генерируют UUIDv1 (идентификаторы информационных панелей Grafana, списки Airbnb и т. Д.), Но некоторые программы используют случайные UUID, UUIDv4.

Если это UUIDv4, вы можете украсть контекст PRNG

Как показал некоторое время назад Николай «отрицает» Денищенко (Касперский), имея отладочный доступ к процессу, генерирующему UUID, можно украсть текущий контекст RC4 и воспроизвести в другом месте до 500000 UUID. Это было продемонстрировано (привет, Уилл Дин) в Microsoft Windows XP, в которой использовался забавный механизм 8 * RC4 и который был засеян с фактической энтропией каждые 500000 UUID.

В Windows 10 (это не совсем версия Windows, а скорее .NET Framework или версия rpcrt4.dll), это уже не RC4, а AES, предположительно используемый в режиме CTR. Предположительно, используется то же самое энтропийное повторное использование.

Для получения дополнительной информации, проверьте работу, которую я сделал там https://uuid.pirate -server.com / blog /

1 голос
/ 03 мая 2009

Существует несколько различных типов направляющих. Тип 1 использует идентификатор хоста - обычно это MAC-адрес - порядковый номер, а также текущую дату и время. Тип 4 полностью случайный. Если это UUID типа 1, вы, вероятно, сможете определить довольно ограниченный набор вероятных UUID, но даже в этом случае вы не сможете сгенерировать одну последовательность UUID, поэтому вы не сможете определить определенный UUID для конкретного пользователя.

0 голосов
/ 06 мая 2009

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

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

0 голосов
/ 03 мая 2009

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

...