Насколько безопасна случайная функция в asp.net/c#
Я разрабатываю генератор паролей, который будет работать на веб-странице.
Я использую встроенные функции функции .net Random(); для генерации случайных чисел. Затем они используются для выбора различных символов верхнего / нижнего регистра и чисел из строки.
Мне интересно, насколько безопасно использовать функцию
Random(); для генерации паролей. Обратите внимание, что эти пароли истекают через 2 минуты, и страница позволит генерировать только 3 раза на IP-адрес. 3 ответов:
Сам алгоритм также не является безопасным. Вероятно, можно предсказать будущие результаты, наблюдая за некоторыми из них.
System.Randomэто не безопасно. Самая большая слабость заключается в том, что он имеет только 31 битное семя, которое посеяно из предсказуемого источника(Environment.TickCount). Таким образом, злоумышленник, который знает, когда был создан ваш экземплярRandom, вероятно, может сузить возможные пароли до нескольких.Использовать класс, производный от
System.Security.Cryptography.RandomNumberGenerator, такие какRNGCryptoServiceProviderчтобы генерировать безопасный случайный числа.Чтобы сгенерировать безопасную случайную строку, я рекомендую свой ответ на Как я могу сгенерировать случайные 8-символьные, буквенно-цифровые строки в C#?. Обратите внимание, что большинство других ответов не являются безопасными.
Не используйте
Random, Если вам нужна защита паролем.Использование
RNGCryptoServiceProvider.Реализует криптографический генератор случайных чисел (ГСЧ), используя реализацию, предоставляемую поставщиком криптографических услуг (CSP). Этот класс не может быть унаследован.
Если вам нужно безопасное случайное число, вы можете написать класс, который наследует от системы .Безопасность.Криптография.RandomNumberGenerator
Comments