Введение

Класс атак на криптографические системы
Безопасность криптографических систем зависит от некоторой секретной информации, известной авторизованным пользователям, но неизвестной и непредсказуемой для остальных. Для обеспечения этой непредсказуемости обычно применяется рандомизация. Современные криптографические протоколы часто требуют частого генерирования случайных чисел. Криптографические атаки, направленные на подрыв или использование уязвимостей в этом процессе, называются атаками на генератор случайных чисел. Высококачественный процесс генерации случайных чисел (ГСЧ) почти всегда необходим для обеспечения безопасности, а его низкое качество обычно создает уязвимости для атак и, как следствие, приводит к потере безопасности, вплоть до полного компрометирования криптографической системы. Процесс ГСЧ особенно привлекателен для злоумышленников, поскольку обычно представляет собой единый, изолированный аппаратный или программный компонент, который легко обнаружить. Если злоумышленнику удастся заменить псевдослучайные биты, сгенерированные предсказуемым образом, безопасность будет полностью скомпрометирована, но обычно это останется незамеченным при любых последующих проверках этих битов. Более того, для осуществления таких атак достаточно однократного доступа к целевой системе. Нет необходимости передавать какие-либо данные обратно, в отличие, например, от компьютерного вируса, который крадет ключи и затем отправляет их по электронной почте на определенный адрес.

Человеческое генерирование случайных величин

Люди обычно плохо генерируют случайные величины. Маги, профессиональные игроки и мошенники полагаются на предсказуемость человеческого поведения. Во время Второй мировой войны немецким операторам шифровальных машин было предписано случайным образом выбирать три буквы для начальной установки роторов каждого сообщения Энигмы. Однако некоторые выбирали предсказуемые значения, например, свои собственные инициалы или инициалы своих близких, что значительно облегчило союзникам взлом этих систем шифрования. Другой пример – часто предсказуемые способы, которыми пользователи компьютеров выбирают пароли (см. методы взлома паролей). Тем не менее, в конкретном случае игры в смешанные стратегии использование энтропии человеческой игры для генерации случайности было исследовано Раном Халприном и Мони Наором.

Программные РНГ

Как и другие компоненты криптосистемы, генератор случайных чисел должен быть разработан с учетом устойчивости к определенным атакам. Некоторые возможные атаки на ГСЧ включают (в частности): прямую криптоаналитическую атаку, когда злоумышленник получает часть потока случайных битов и использует ее для различения выходных данных ГСЧ и истинно случайного потока; атаки, основанные на модификации входных данных, изменяющие входные данные ГСЧ для проведения атаки, например, путем "вытеснения" существующей энтропии из системы и приведения ее к известному состоянию; атаки, расширяющие компрометацию состояния, когда внутреннее секретное состояние ГСЧ известно в определенный момент времени и используется для предсказания будущих выходных данных или восстановления предыдущих выходных данных. Это может произойти при запуске генератора с небольшим количеством или полным отсутствием энтропии (особенно если компьютер только что был загружен и выполнил стандартную последовательность операций), что позволяет злоумышленнику получить начальную оценку состояния.

Аппаратные РНГ

Возможен ряд атак на аппаратные генераторы случайных чисел, включая попытки перехвата радиочастотных излучений от компьютера (например, получение времени прерываний жесткого диска по шуму мотора) или попытки подачи контролируемых сигналов в источник, который должен быть случайным (например, выключение освещения в лампе лавы или подача мощного, известного сигнала на звуковую карту).

Подрыв RNG

Подвергнутые воздействию случайные числа могут быть созданы с использованием криптографически безопасного генератора псевдослучайных чисел с начальным значением, известным злоумышленнику, но скрытым в программном обеспечении. Относительно короткая, например, 24–40-битная часть начального значения может быть истинно случайной, чтобы предотвратить заметные повторения, но не настолько длинной, чтобы злоумышленник не смог восстановить, например, "случайно" сгенерированный ключ. Случайные числа обычно проходят через несколько уровней аппаратного и программного обеспечения перед использованием. Биты могут генерироваться в периферийном устройстве, передаваться по последовательному кабелю, собираться в системной утилите и извлекаться с помощью системного вызова. Подвергнутые воздействию биты могут быть подменены в любой точке этого процесса с небольшой вероятностью обнаружения. Аппаратная схема для генерации подвергнутых воздействию битов может быть построена на интегральной схеме размером всего в несколько миллиметров. Даже самый совершенный аппаратный генератор случайных чисел может быть скомпрометирован путем размещения такого чипа в любом месте выше точки оцифровки источника случайности, например, в чипе выходного драйвера или даже в кабеле, соединяющем генератор случайных чисел с компьютером. Чип для компрометации может включать в себя таймер, ограничивающий начало работы некоторым временем после первого включения устройства и прохождения приемочных испытаний, или он может содержать радиоприемник для дистанционного управления включением/выключением. Он может быть установлен производителем по требованию национальной службы радиоэлектронной разведки или добавлен позже любым лицом, имеющим физический доступ. Чипы процессора со встроенными аппаратными генераторами случайных чисел могут быть заменены совместимыми чипами с скомпрометированным генератором случайных чисел в прошивке.

Защита

Смешивайте (например, с помощью XOR) аппаратные случайные числа с выходом потокового шифра хорошего качества как можно ближе к точке использования. Ключ или начальное значение потокового шифра должны быть изменяемыми таким образом, чтобы их можно было проверить и получить из надежного источника, например, бросков игральных костей. Генератор случайных чисел Fortuna — пример алгоритма, использующего этот механизм. Генерируйте пароли и парольные фразы, используя истинный источник случайности. Некоторые системы выбирают случайные пароли для пользователя, вместо того чтобы позволять пользователям придумывать их самостоятельно. Используйте системы шифрования, которые документируют способ генерации случайных чисел и предоставляют метод аудита процесса генерации. Создавайте системы безопасности, используя стандартное оборудование, желательно приобретенное таким образом, чтобы не раскрывать его предполагаемое назначение, например, непосредственно в большом магазине. С этой точки зрения, звуковые карты и веб-камеры могут быть лучшим источником случайности, чем оборудование, специально предназначенное для этой цели. Обеспечьте полный физический контроль над оборудованием после его приобретения. Оборудование должно находиться в одном месте и не требовать передачи данных другим устройствам. Атаки направлены на сетевые соединения, а не на само оборудование. Разработка безопасного генератора случайных чисел требует не меньшей тщательности, чем разработка других элементов криптографической системы.

Предсказуемое семя Netscape

Ранние версии протокола шифрования Secure Sockets Layer (SSL) Netscape использовали псевдослучайные числа, полученные из генератора псевдослучайных чисел (PRNG), инициализированного тремя переменными величинами: временем суток, идентификатором процесса и идентификатором родительского процесса. Эти величины часто были относительно предсказуемы, поэтому имели низкую энтропию и не являлись случайными, что привело к признанию этой версии SSL небезопасной. О проблеме было сообщено в Netscape в 1994 году Филиппом Халламом Бейкером, в то время исследователем веб-команды CERN, но она не была устранена до выпуска продукта. Проблема в работающем коде была обнаружена в 1995 году Яном Голдбергом и Дэвидом Вагнером, которым пришлось проводить обратную разработку объектного кода, поскольку Netscape отказался раскрывать детали генерации случайных чисел (безопасность через запутывание). Этот PRNG был исправлен в более поздних версиях (версия 2 и выше) с помощью более надежной инициализации (то есть более случайной и, следовательно, обладающей большей энтропией с точки зрения злоумышленника).

Генератор случайных чисел Microsoft Windows 2000/XP

Microsoft использует неопубликованный алгоритм для генерации случайных значений в своей операционной системе Windows. Эти случайные величины предоставляются пользователям через утилиту CryptGenRandom. В ноябре 2007 года Лео Доррендорф и др. из Еврейского университета Иерусалима и Университета Хайфы опубликовали статью под названием «Криптоанализ генератора случайных чисел операционной системы Windows». В статье были представлены серьезные уязвимости в подходе Microsoft того времени. Выводы статьи были основаны на дизассемблировании кода в Windows 2000, но, по словам Microsoft, также применимы и к Windows XP. Microsoft заявила, что проблемы, описанные в статье, были устранены в последующих версиях Windows, которые используют другую реализацию ГСЧ (генератора случайных чисел). Один из генераторов, Dual EC DRBG, пользовался поддержкой Агентства национальной безопасности. Dual EC DRBG использует технологию эллиптических кривых и включает набор рекомендованных констант. В августе 2007 года Дэн Шумов и Нильс Фергюсон из Microsoft показали, что константы могут быть сконструированы таким образом, чтобы создать клептографическую лазейку в алгоритме. В сентябре 2013 года газета The New York Times сообщила, что «Агентство национальной безопасности внедрило лазейку в стандарт 2006 года, принятый NIST, под названием Dual EC DRBG», тем самым раскрыв, что АНБ осуществило атаку вредоносного ПО против граждан США. В декабре 2013 года агентство Reuters сообщило, что документы, опубликованные Эдвардом Сноуденом, указывали на то, что АНБ выплатило компании RSA Security 10 миллионов долларов за то, чтобы сделать Dual EC DRBG генератором по умолчанию в их программном обеспечении для шифрования, и вызвало дополнительные опасения, что алгоритм может содержать лазейку для АНБ. В связи с этими опасениями, в 2014 году NIST отозвал Dual EC DRBG из своего проекта руководства по генераторам случайных чисел, рекомендовав «существующим пользователям Dual EC DRBG как можно скорее перейти на один из трех оставшихся одобренных алгоритмов».

MIFARE Crypto-1 (Криптовалюта-1)

Crypto 1 — это криптосистема, разработанная NXP для использования в чипах MIFARE. Система является проприетарной, и изначально алгоритм не был опубликован. В результате обратной разработки чипа исследователи из Университета Вирджинии и Chaos Computer Club обнаружили атаку на Crypto 1, использующую плохо инициализированный генератор случайных чисел.

Debian OpenSSL (англ.) (недоступная ссылка)

В мае 2008 года исследователь безопасности Лучано Белло сообщил об обнаружении уязвимости: изменения, внесенные в 2006 году в генератор случайных чисел в версии пакета OpenSSL, распространяемого с Debian Linux и другими дистрибутивами на основе Debian, такими как Ubuntu, значительно снизили энтропию генерируемых значений и сделали различные ключи безопасности уязвимыми для атак. Эта уязвимость была вызвана изменениями в коде openssl, внесенными разработчиком Debian в ответ на предупреждения компилятора о, казалось бы, избыточном коде. Это привело к массовой перегенерации ключей по всему миру, и, несмотря на широкое освещение проблемы, можно предположить, что многие из этих старых ключей до сих пор используются. Затронутые типы ключей включают SSH-ключи, OpenVPN-ключи, DNSSEC-ключи, ключевой материал для использования в сертификатах X.509 и сеансовые ключи, используемые в SSL/TLS-соединениях. Ключи, сгенерированные с помощью GnuPG или GNUTLS, не затронуты, поскольку эти программы использовали другие методы генерации случайных чисел. Ключи, сгенерированные в Linux-дистрибутивах, не основанных на Debian, также не подвержены этой уязвимости. Уязвимость слабой генерации ключей была оперативно устранена после сообщения о ней, но любые сервисы, продолжающие использовать ключи, сгенерированные старым кодом, остаются уязвимыми. Многие программные пакеты теперь включают проверки по списку слабых ключей, чтобы предотвратить использование оставшихся уязвимых ключей, однако исследователи продолжают обнаруживать слабые реализации ключей.

Плейлей-Сейс 3

В декабре 2010 года группа, называющая себя fail0verflow, объявила об извлечении закрытого ключа алгоритма цифровой подписи на эллиптических кривых (ECDSA), который Sony использовала для подписи программного обеспечения для игровой консоли PlayStation 3. Атака стала возможной из-за того, что Sony не генерировала новый случайный nonce для каждой подписи.

Факторинг открытого ключа RSA

Анализ, сравнивающий миллионы открытых ключей RSA, собранных из Интернета, был объявлен в 2012 году Ленстра, Хьюзом, Ожье, Босом, Клейнджунгом и Вахтером. Им удалось разложить на множители 0,2% ключей, используя только алгоритм Евклида. Они использовали слабость, свойственную криптосистемам, основанным на факторизации целых чисел. Если 1=n = pq – один открытый ключ, а 1=n′ = p′q′ – другой, то, если случайно 1=p = p′, то простое вычисление 1=НОД(n, n′) = p раскладывает на множители и n, и n′, полностью скомпрометировав оба ключа. Надя Хенингер, участница группы, проводившей аналогичный эксперимент, отметила, что проблемные ключи встречались преимущественно во встраиваемых приложениях, и объяснила, что проблема общих простых множителей, выявленная обеими группами, возникает в ситуациях, когда генератор псевдослучайных чисел изначально плохо инициализирован, а затем повторно инициализируется между генерацией первого и второго простых чисел.

Java nonce столкновение

В августе 2013 года стало известно, что ошибки в классе Java SecureRandom могли приводить к коллизиям в значениях k nonce, используемых для ECDSA в реализациях Bitcoin на Android. В случае возникновения такой ситуации можно было восстановить приватный ключ, что позволяло похищать биткойны из соответствующего кошелька.