Подтвердить что ты не робот

Как Random является System.Guid.NewGuid()?

Я знаю, это может звучать как бессмысленный вопрос, но выслушайте меня...

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

Я в основном отказываюсь от системы входа в систему для веб-сайта и хочу знать, достаточно ли GUID для файлов cookie сеансов.

Любые сведения о том, как генерируется GUID, будут высоко оценены при оценке ответов.

Спасибо за ссылки на дублирующие вопросы, однако мой вопрос специфичен для .Net framework.

4b9b3361

Ответ 2

Никакое фиксированное значение никогда не может гарантировать 100% уникальность (просто назовите его достаточно времени, дайте или возьмите окончание юниверса; -p), но это может быть очень, очень и очень маловероятно, чтобы дублировать.

Ответ 3

Я не могу говорить о предсказуемости последовательных чисел, но он будет уникальным. Я думаю, вам будет лучше использовать генератор случайных чисел из System.Security.Cryptography. Свяжите случайное число с монотонно увеличивающимся значением (временем), чтобы сгенерировать свой уникальный ключ, и вы можете быть уверены, что он уникален и не предсказуем.

Ответ 4

Я не знаю об .NET, но алгоритм

Ответ 5

Документация для System.Guid.NewGuid() не дает никаких гарантий для случайности, поэтому, когда текущая реализация основана на генераторе случайных чисел (версия 4 алгоритма, которая была разработана после того, как проблемы конфиденциальности возникли из версии 1, которая использовал MAC-адрес, а другая система, такая как Apple OS X, все еще использует версию 1 алгоритма).

Таким образом, хотя у вас очень высокая вероятность того, что System.Guid.NewGuid() генерирует уникальное значение, вы не можете делать какие-либо предположения о его предсказуемости, поскольку это не указано в документации.

Ответ 6

Предполагая, что System.Guid.NewGuid использует CoCreateGuid, он не является случайным вообще. Исторически сложилось так, что алгоритм, используемый для создания указаний, заключался в том, чтобы включить MAC-адрес из сетевого адаптера в дополнение к некоторым другим вещам, таким как время. Я не уверен, изменился алгоритм. Хотя это, конечно, не случайно, оно гарантировано будет уникальным.

Ответ 7

В основном я хочу знать, могу ли я доверять GUID для генерации значения который будет уникальным 100% времени и невозможно предсказать.

В основном я катаюсь на своей системе входа в систему для веб-сайта и хочу узнайте, достаточно ли GUID для файлов cookie сеанса.

Короткий ответ: совсем не. Важно отметить, что уникальные и случайные совершенно разные. Если у вас есть универсальный счетчик (например, взять номер в гастроном), эти цифры уникальны, но полностью предсказуемы.

Как отмечает Бочу, Реймондский пост здесь говорит об этом: https://blogs.msdn.microsoft.com/oldnewthing/20120523-00/?p=7553/

Алгоритм генерации GUID был разработан для уникальности. Он не был предназначен для случайности или непредсказуемости. Действительно, если вы посмотрите на более раннее обсуждение, вы увидите, что так называемый алгоритм 1 является неслучайным и полностью предсказуемым.... Даже алгоритм GUID версии 4 (который в основном говорит "установить версию до 4 и заполнить все остальное случайными или псевдослучайными числами" ) не гарантированно непредсказуем, потому что алгоритм не определяет качество генератора случайных чисел.

Для защищенных случайных чисел вам нужен криптографически безопасный генератор случайных чисел.

Кстати, "сворачивание собственной системы входа" - это красный флаг безопасности - я бы отказался, если бы не указал на это.

Ответ 8

GUID по определению являются уникальными во всех отношениях. Были когда-то некоторые подпрограммы GUID0-поколения, которые генерировали последовательные GUID, но это были проблемы в... Win98, я думаю, и были hotfixed от Microsoft.

Вы должны быть уверены, что сгенерированный GUID будет уникальным и никогда не повторяться или не восстанавливаться.

(EDIT: Сказав это, мы все понимаем, что строка буквенно-цифровых символов имеет фиксированное количество перестановок, если строка фиксирована по длине, но в случае GUID число перестановок является экономичным *.)

(* Dammit, где тот XKCD, где предлагается "астрономические" числа, недостаточно велик?)