Можно ли доверять доверенным лицам для обеспечения безопасности, или они предсказуемы, если система может быть вынуждена генерировать множество известных команд?
Чтобы начать и определить guid, я использую .net framework Guid
Это несколько гипотетическая ситуация
У пользователей, когда выполняется предварительное формирование определенного действия, генерируются подсказки. Каждый пользователь может видеть свои собственные подсказки. Если пользователь должен был знать один из других пользовательских руководств, был бы компромисс в области безопасности.
Насколько безопасна эта система, если мы исходим из того, что пользователь не имеет возможности украсть другой пользовательский указатель и может только догадываться?
Я понимаю, что слепо угадывать подсказки невозможно. Даже если бы у них было миллион значений успеха, у них все равно остался бы только шанс 10 ^ 20 успешной угадывания
Где я боюсь, что проблема может существовать, это предсказание руководства. Может ли пользователь генерировать большое количество запросов, посмотреть на полученные ему коды и узнать формулу генерации .net guid, значительно улучшить его шансы догадки?
Могут ли эти факторы быть сведены до такой степени, что они будут проблемой безопасности?
В этом случае, как ключи должны генерироваться уникальным образом неопределенным способом?
Я спрашиваю любого, кто упоминает вероятность догадок/коллизий, чтобы добавить к нему какой-то трудный смысл. Либо точное число для определения коэффициентов, либо что-то вроде этого: "его можно использовать для хранения данных учетной записи, но не для конфиденциальных данных"
ИЗМЕНИТЬ
этот вопрос, похоже, идет на территорию, которую я изначально пытался исследовать с этим вопросом
Является ли GUID хорошим ключом для (временного) шифрования?
Ответы
Ответ 1
GUID/UUID предназначены для генерации 128-битных номеров для использования в первую очередь как уникальный идентификатор (для всех целей и задач).
UUID не предназначены для генерации криптографически сильных последовательностей случайных чисел, и если вам нужна максимальная непредсказуемость, то криптографически сильные последовательности случайных чисел - именно то, что вы хотите. Для этого .NET предоставляет вам RNGCryptoServiceProvider, разработанный с нуля, чтобы быть столь же непредсказуемым, насколько это можно разумно реализовать с помощью алгоритмических средств, поэтому почему бы не использовать его?
Пример:
byte[] GenerateRandomBytes()
{
byte[] key = new byte[16];
System.Security.Cryptography.RNGCryptoServiceProvider c =
new System.Security.Cryptography.RNGCryptoServiceProvider();
c.GetBytes(key);
return key;
}
Ответ 2
Afaik.net генерирует Версии 4 UUID как Гиды по умолчанию. Они случайны и трудно догадываться, если они правильно реализованы. Но так как будущие версии могут использовать другую реализацию, я бы не стал полагаться на это. Я думаю, что даже более ранние версии Windows или .net использовали Guids на основе Mac-Address, которые легче угадать.
Поэтому я бы просто использовал один из генераторов крипто-псевдослучайных чисел, встроенных в .net. Если вы создаете 16 байт, у вас есть замена замены для Guid.