Можно ли доверять руководствам для обеспечения безопасности или они предсказуемы, если систему можно заставить генерировать много известных руководств? - PullRequest
11 голосов
/ 26 января 2011

Для начала и определения guid, я использую .net Framework Guid Это несколько гипотетическая ситуация Пользователи при выполнении определенного действия имеют сгенерированные направляющие. Каждый пользователь может видеть свои собственные гиды. Если бы пользователь узнал руководство другого пользователя, это привело бы к компрометации безопасности.

Насколько безопасна эта система, если предположить, что пользователь не может украсть руководство другого пользователя и может только догадываться об этом?

Я понимаю, что слепое угадывание гида невозможно. Даже если бы у них было миллион значений успеха, у них все равно было бы только 10 ^ 20 шансов на удачное предположение

Там, где я боюсь, что проблема может существовать, является предсказание guid. Может ли пользователь сгенерировать большое количество запросов, взглянуть на полученные им руководства, и знание формулы генерации guid .net значительно повысит его шансы угадать? Можно ли уменьшить эти шансы до такой степени, чтобы они стали проблемой безопасности? В таком случае, как следует генерировать ключи уникальным неуловимым способом?

Я прошу любого, кто упоминает шансы догадок / столкновений, добавить в него какой-то жесткий смысл. Либо точное число для определения шансов, либо что-то вроде «оно может использоваться для хранения данных учетной записи, но не конфиденциальных данных»

EDIT

этот вопрос, кажется, хорошо подходит к территории, которую я изначально стремился исследовать с помощью этого вопроса Является ли GUID хорошим ключом для (временного) шифрования?

Ответы [ 2 ]

7 голосов
/ 26 января 2011

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;
}
4 голосов
/ 26 января 2011

Afaik .net генерирует UUID версии 4 в качестве направляющих по умолчанию.Они случайны и их трудно угадать, если их правильно реализовать.Но поскольку будущие версии могут использовать другую реализацию, я бы не стал полагаться на это.Я думаю, что даже в более ранних версиях Windows или .net использовались Guids, основанные на Mac-адресе, которые легче угадать.

Так что я бы просто использовал один из крипто-псевдослучайных генераторов чисел, встроенных в.net вместо.Если вы генерируете 16 байтов, у вас есть замена для Guid.

...