Обратите внимание, что это не мое приложение, это приложение, которое я pentesting для клиента. Обычно я задаю такие вопросы на https://security.stackexchange.com/, однако, поскольку это больше связано с программированием, я спросил здесь.
Предоставлено RFC 4122 для UUID не указывает, что UUID типа 4 должны быть сгенерированы криптографически защищенным генератором псевдослучайных чисел (CSPRNG). Он просто говорит
Установите все остальные биты произвольно (или псевдослучайно) значения.
Хотя некоторые реализации алгоритма, такие как этот в Java, используют CSPRNG.
Я пытался понять, работает ли реализация Microsoft или нет. В основном, как генерирует их .NET или MSSQL Server.
Проверяя .NET source, мы можем увидеть этот код:
Marshal.ThrowExceptionForHR(Win32Native.CoCreateGuid(out guid), new IntPtr(-1));
return guid;
Проверяя CoCreateGuid
docco, он указывает
Функция CoCreateGuid вызывает функцию RPC UuidCreate
Все, что я могу узнать об этой функции, здесь. Кажется, я дошел до конца кроличьей дыры.
Теперь, есть ли у кого-нибудь информация о том, как UuidCreate
генерирует свои UUID?
Я видел много связанных сообщений:
- Как Random является System.Guid.NewGuid()? (Возьмите два)
- Использует ли GUID допустимый способ генерации случайной строки символов и чисел?
- Насколько безопасно unguessable являются идентификаторы GUID?
- как генерируются GUID в SQL Server?
В первом из них говорится:
GUID не гарантирует гарантии случайности, он делает гарантии вокруг уникальности. Если вы хотите случайность, используйте Random для создания строка.
Я согласен с этим, кроме как в моем случае для случайных, непредсказуемых чисел вы, конечно, используете CSPRNG вместо Random
(например, RNGCryptoServiceProvider
).
И последнее утверждает (фактически цитируется из Википедии):
Криптоанализ генератора GUID WinAPI показывает, что, поскольку последовательность идентификаторов GUID V4 является псевдослучайной; учитывая полное знание внутреннее состояние, можно предсказать предыдущие и последующие Значения
Теперь, с другой стороны забора этот пост от Will Dean говорит
В прошлый раз, когда я изучал это (несколько лет назад, возможно, XP SP2), я шагнул в код ОС, чтобы увидеть, что было на самом деле происходит, и он генерирует случайное число с безопасным генератор случайных чисел.
Конечно, даже если в настоящее время он использует CSPRNG, это будет специфичным для реализации и может быть изменено в любой момент (например, любое обновление для Windows). Маловероятно, но теоретически возможно.
Моя точка зрения заключается в том, что для этого нет канонической ссылки, выше было продемонстрировать, что я сделал свое исследование, и ни одна из вышеупомянутых сообщений не ссылается на что-либо авторитетное.
Причина в том, что я пытаюсь решить, нужно ли менять систему, использующую GUID для токенов аутентификации. С точки зрения чистого дизайна, ответ является определенным да, однако с практической точки зрения, если функция Windows UuidCreate
действительно использует Infrastructure CSPRNG, тогда нет непосредственной угрозы для системы, Может ли кто-нибудь пролить свет на это?
Я ищу ответы с уважаемым источником, чтобы поддержать его.