Неслучайная случайность, или Атака на ГПСЧ в .NET
— Donald Knuth
Копаясь как-то в исходниках одного сервиса в поисках уязвимостей, я наткнулся на генерацию одноразового кода для аутентификации через SMS. Обработчик запросов на отправку кода упрощённо выглядел так:
class AuthenticateByPhoneHandler{ /* ... */ static string GenerateCode() => rnd.Next(100000, 1000000).ToString(); readonly static Random rnd = new Random();}
Проблема видна невооруженным глазом: для генерации 6-тизначного кода используется класс Random — простой некриптографический генератор псевдослучайных чисел (ГПСЧ). Займёмся им вплотную: научимся предсказывать последовательность случайных чисел и прикинем возможный сценарий атаки на сервис.
Потокобезопасность
Кстати, заметим, что в приведённом фрагменте кода доступ к статическому экземпляру rnd класса Random из нескольких потоков не синхронизирован. Это может привести к неприятному казусу, который можно часто встретить в вопросах и ответах на StackOverflow:
Источник: Хабрахабр
Похожие новости
- «А трактор случайно не в залоге?» — история одной интеграции с ФЦИИТ
- Design by Contract в эпоху AI: как контракты Мейера защищают криптографию там, где тесты молчат
- Schnorr/MuSig2 Nonce-Forensics:
- SEBERD IT Base: почему я сделал ещё один сайт про кибербезопасность и зачем
- Приватная Cвязь на Go и Flutter
- Манифест созидателя
- OSINT для ленивых. Часть 8: GEOINT по фото за 3 минуты
- MarketingNews: Кейс: «Призы от всего атомного сердца». как «Пятёрочка» создала фиджитал-вселенную с Atomic Heart и переосмыслила механику промоакций
- Как я собрал себе C2 на малинке за один вечер
- Краткая история биометрии: как была изобретена идентификация по радужке глаза