Математика бэкдора в Dual EC DRBG
Dual EC DRBG ("Сдвоенный детерминированный генератор случайных битов на эллиптической кривой") - нашумевшая схема генератора псевдослучайных чисел, в которой встроен (потенциальный) математический бэкдор. Несмотря на сразу же возникшие подозрения о бэкдоре, эта схема была без проблем стандартизована NIST в 2006-2007 годах и достаточно широко использовалась. Соответствующий стандарт позже официально отозван NIST.
На "Хабре" недавно опубликован перевод статьи про практическую реализацию бэкдора в Dual EC DRBG, с примерами кода на Python. Но в той публикации, к сожалению, отсутствует объяснение математической части. А математическая часть данного бэкдора очень показательная и интересная. В том числе, с точки зрения истории криптографии. Настоящая статья посвящена именно математике бэкдора и в деталях объясняет то, почему он работает. Для понимания потребуется хотя бы минимальное знакомство с основными понятиями алгебры и криптографии.
По сути, бэкдор в Dual_EC_DRBG - это реализация протокола Диффи-Хеллмана (DH) на эллиптической кривой: секретный ключ находится у стороны, контролирующей бэкдор через параметры протокола, что позволяет этой стороне получать внутреннее состояние генератора псевдослучайных чисел, наблюдая его выдачу. Знание внутреннего состояния приводит к раскрытию всей последующей выдачи генератора. При этом, математически, пользователь Dual EC DRBG неявно выполняет обмен DH с контролирующей параметры генератора стороной. Если секретный ключ неизвестен, то раскрыть внутреннее состояние вычислительно трудно, потому что базовые функции протокола - односторонние, то есть, если оставить за скобками секретный параметр, то протокол соответствует общепринятой схеме. Все эти аспекты рассмотрены ниже подробно.
Прежде всего - схема (программного) генератора псевдослучайных чисел. Такие генераторы можно строить на базе двух односторонних функций и цепочки внутренних состояний. Одна из этих функций переводит текущее состояние в следующее, а вторая - извлекает выдачу из текущего состояния.
На схеме:
Криптографические генераторы псевдослучайных чисел, помимо общих "статистических" требований, имеют ряд особенностей. Прежде всего - выдача должна быть необратимой. А именно: состояния
Псевдослучайная выдача в криптографических протоколах постоянно используется в открытом виде. Например, в открытом виде передаются векторы инициализации для схем зашифрования (GCM и пр.), псевдослучайные векторы в сообщениях TLS (поля ClientRandom и ServerRandom) и др. Поэтому атакующий может извлечь значения из трафика, сопоставить их с выдачей генератора псевдослучайных чисел, раскрыть состояние генератора и получить последующие биты выдачи, которые, например, были использованы тем же приложением для получения секретных ключей шифров, защищающих трафик - это позволит восстановить секретные ключи и расшифровать трафик в пассивном режиме.
Dual EC DRBG работает на эллиптической кривой (над конечным полем), а в качестве односторонних функций использует умножение точки эллиптической кривой на скаляр:
Вспомним, что умножение на скаляр - обычное для эллиптической криптографии последовательное сложение точки кривой с самой собой. А именно: точкой кривой называется пара (X, Y) значений "координат", соответствующих уравнению кривой. Здесь X и Y - это элементы подлежащего конечного поля, которое входит в параметры криптосистемы. В данном конкретном случае (например, для кривой P-256) используемое конечное поле - это вычеты, то есть "остатки", по модулю простого числа. Скаляр - это целое число. Умножение на скаляр 3 означает, что точка складывается сама с сбой в трёх экземплярах:
В алгоритме Dual EC DRBG используется две точки кривой: P и Q. Точка P - задаёт последовательность внутренних состояний. Внутреннее состояние
На этой упрощённой схеме:
Математический смысл бэкдора состоит в соотношении между точками P и Q. Допустим, атакующей стороне известно такое значение δ, что
Формула (*) из предыдущего абзаца вообще очень похожа на реализацию протокола Диффи-Хеллмана (DH) на эллиптической кривой. То есть, пользователь генератора псведослучайных чисел, можно сказать, обменялся с атакующей стороной открытыми параметрами Диффи-Хеллмана. А именно: открытый параметр атакующей стороны, статический ключ, зашит в константы протокола -
Если одна из точек P, Q заранее задана, то определить нужное значение δ можно при помощи вычисления мультипликативного обратного по модулю порядка группы точек. Порядок, на практике, простое число, поэтому вычислить такой обратный элемент нетрудно. В Dual EC DRBG для кривой P-256 в качестве точки P указан генератор группы кривой - точка, указанная в спецификации P-256. Чтобы получить бэкдор, нужно определить δ из
Может показаться, что если P зафиксирована, а выбрать эту точку умножением Q на произвольный скаляр нельзя, то требуется решить сложную задачу отыскания дискретного логарифма. Но это не так, поскольку мы всё равно можем выбрать произвольную точку Q. Чтобы согласовать точки, выберем произвольное значение ε в интервале от 2 до порядка группы, генерируемой P, а потом возьмём
То есть, если можно выбрать оба параметра - точки P и Q, - то выбираем так, что
В Dual EC DRBG битовый вывод генератора, - то есть, X-координата
В ранней версии стандарта NIST на Dual EC DRBG реализация использовала подмешивание дополнительной маски на каждом шаге вычисления псевдослучайных чисел. Это делало описанный бэкдор нерабочим. Однако стандарт был быстро обновлён, точка подмешивания дополнительной маски перенесена, и использование бэкдора стало снова возможным. Поэтому данная особенность здесь не рассматривается.
Проблема алгоритма Dual EC DRBG, как криптографического генератора псевдослучайных чисел, помимо низкой производительности, в том, что внутри его конструкции есть жесткая структура, зависящая от внешних параметров. Из-за алгебраических свойств эллиптических кривых, в практической реализации - точки P и Q всегда связаны. Да, иногда, если специально постараться, они могут быть получены способом, дающим некоторую гарантию того, что связующий скаляр никому не известен. Либо, P и Q может генерировать конкретный пользователь, в качестве параметра для своей локальной версии генератора. Стандарт NIST разрешал такой вариант, но не рекомендовал его (а для соответствия строгим требованиям FIPS допускались только параметры из спецификации).
Литература
Bernstein, Lange, Niederhagen. Dual EC: A Standardized Back Door
NIST SP 800 90A, 2012.