быть уникальным - просто повторения подходят вряд ли достаточно.

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

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

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

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

Спасибо за ссылки на дубликаты вопросов, однако, мой вопрос относится к .Net Framework.

 Dirk Vollmar21 янв. 2009 г., 23:32
Нет, это не дубликат. ОП спрашивает о случайности и предсказуемости, а не об уникальности
 John Sheehan21 янв. 2009 г., 23:25
 John Sheehan21 янв. 2009 г., 23:25
 Shog9♦21 янв. 2009 г., 23:32
Кстати, это не вопрос, который вы задали, но я подозреваю, что это вопрос, который вы хотели задать:stackoverflow.com/questions/22880/...
 Shog9♦21 янв. 2009 г., 23:29
И третий:stackoverflow.com/questions/462219/xkcd-random-number (хорошо, не совсем, но несколько применимо)

Ответы на вопрос(8)

Алгоритм UUID определяется довольно точно.

изменить: если вы посмотрите на соответствующие биты (см. запись в Википедии), это должно объяснить, какая версия UUID используется.

изменить 2: красный флаг для использования вами слова «безопасный», который говорит мне, что вам лучше использовать хорошо определенный криптографический метод. Например, при генерации идентификаторов сеансов на сервере, почему бы просто не сделать что-то простое, например, применить хеш MD5 для объединения соответствующего подмножества следующего: {IP-адрес клиентского компьютера, счетчик последовательных приращений, фиксированная секретная константа по вашему выбору, вывод из генератора случайных чисел по вашему выбору и т. д.}?

 Tracker121 янв. 2009 г., 23:27
System.Guid в .Net представляет собой 128-битный UUID
 awe27 июл. 2010 г., 12:24
System.Guid в .Net использует версию 4 в статье Википедии, на которую вы ссылаетесь.

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

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

 awe27 июл. 2010 г., 12:21
Просто для справки: краткое описание того, как создается версия 4:en.wikipedia.org/wiki/...

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

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

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

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

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

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

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

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

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

(ПРАВКА: Сказав это, мы все понимаем, что строка буквенно-цифровых символов имеет фиксированное количество перестановок, если строка фиксированной длины. Но в случае GUID количество перестановок экономично *.)

(* Черт возьми, где тот XKCD, где предлагаемые «астрономические» числа недостаточно велики?)

 Marc Gravell♦21 янв. 2009 г., 23:32
Как насчет «27» и, ну, «27». Даже если они генерируются разумно, они на самом деле негарантированный быть уникальным - просто повторения подходят вряд ли достаточно.

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

 Ohad Schneider30 мая 2013 г., 19:31
Решение Вопроса
 awe27 июл. 2010 г., 12:10
Это не алгоритм, используемый в .NET. Это описывает версию 1. .NET использует версию 4 (см.en.wikipedia.org/wiki/... для краткого описания версии 4)
 SuperBiasedMan11 нояб. 2015 г., 15:55
Хотя это может теоретически ответить на вопрос,было бы предпочтительнее включить основные части ответа здесь и предоставить ссылку для справки.
 jcollum21 янв. 2009 г., 23:25
Эта ссылка сейчас не работает. Наверное, не твоя вина.
 Bochu18 нояб. 2015 г., 21:45
Как статья вообще отвечает на вопрос? Что в статье говорится о случайности и предсказуемости генерации GUID? думаюblogs.msdn.com/b/oldnewthing/archive/2012/05/23/10309199.aspx гораздо лучше отвечает на вопрос: генерация GUID практически уникальна, но не случайна и предсказуема.
 Michael Haren04 мар. 2010 г., 20:47
Итак, в заключение онине очень случайный То есть последовательные направляющие с одного и того же сервера будут иметь много общего.

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

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

 Jordan Rieger29 мая 2018 г., 02:32
Согласно сmsdn.microsoft.com/en-us/library/...начиная с Windows 2000 еще в 1999 году, «случайные биты для всех GUID версии 4, встроенных в Windows, получают через криптографический API-интерфейс Windows CryptGenRandom или аналогичный источник, который используется для генерации криптографических ключей». Поэтому я считаю их криптографически безопасными - по крайней мере, в той степени, в которой они обеспечивают 122 бита энтропии.

Ваш ответ на вопрос