Как Random является System.Guid.NewGuid()?
Я знаю, это может звучать как бессмысленный вопрос, но выслушайте меня...
Я в основном хочу знать, могу ли я доверять GUID, чтобы генерировать значение, которое будет уникальным в 100% случаев и невозможно предсказать.
Я в основном отказываюсь от системы входа в систему для веб-сайта и хочу знать, достаточно ли GUID для файлов cookie сеансов.
Любые сведения о том, как генерируется GUID, будут высоко оценены при оценке ответов.
Спасибо за ссылки на дублирующие вопросы, однако мой вопрос специфичен для .Net framework.
Ответы
Ответ 2
Никакое фиксированное значение никогда не может гарантировать 100% уникальность (просто назовите его достаточно времени, дайте или возьмите окончание юниверса; -p), но это может быть очень, очень и очень маловероятно, чтобы дублировать.
Ответ 3
Я не могу говорить о предсказуемости последовательных чисел, но он будет уникальным. Я думаю, вам будет лучше использовать генератор случайных чисел из System.Security.Cryptography. Свяжите случайное число с монотонно увеличивающимся значением (временем), чтобы сгенерировать свой уникальный ключ, и вы можете быть уверены, что он уникален и не предсказуем.
Ответ 4
Ответ 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, где предлагается "астрономические" числа, недостаточно велик?)