Как стать автором
Обновить
17
0
Dmitriy Titarenko @dscheg

Developer & Security researcher at SKB Kontur

Отправить сообщение

Неслучайная случайность, или Атака на ГПСЧ в .NET

Время на прочтение5 мин
Количество просмотров17K
Random numbers should not be generated with a method chosen at random.
— Donald Knuth

Копаясь как-то в исходниках одного сервиса в поисках уязвимостей, я наткнулся на генерацию одноразового кода для аутентификации через SMS. Обработчик запросов на отправку кода упрощённо выглядел так:


class AuthenticateByPhoneHandler
{
    /* ... */

    static string GenerateCode() => rnd.Next(100000, 1000000).ToString();

    readonly static Random rnd = new Random();
}

Проблема видна невооруженным глазом: для генерации 6-тизначного кода используется класс Random — простой некриптографический генератор псевдослучайных чисел (ГПСЧ). Займёмся им вплотную: научимся предсказывать последовательность случайных чисел и прикинем возможный сценарий атаки на сервис.


Потокобезопасность


Кстати, заметим, что в приведённом фрагменте кода доступ к статическому экземпляру rnd класса Random из нескольких потоков не синхронизирован. Это может привести к неприятному казусу, который можно часто встретить в вопросах и ответах на StackOverflow:


Читать дальше →
Всего голосов 72: ↑71 и ↓1+70
Комментарии31

Информация

В рейтинге
Не участвует
Работает в
Зарегистрирован
Активность