Опубликован: 02.03.2017 | Уровень: для всех | Доступ: платный
Лекция 8:

Алгоритмы с открытыми ключами

Атака методом цепных дробей

См. [1]

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

Теорема 8.1 (Винер) Пусть в системе RSA выполняются неравенства p<q<2p и d<\dfrac{1}{3}\sqrt[{4}]{n}. Тогда по открытому ключу (n,e) можно вычислить секретный показатель d.

При некотором целом k выполняется неравенство:

\left|\frac{e}{n}-\frac{k}{d}\right|\leq \frac{1}{d\sqrt[4]{n}} < \frac{1}{2d^2}.

Число дробей \dfrac{k}{d}, для которых d<n, удовлетворяющих полученому соотношению, не превосходит log n, и все они являются подходящими дробями \dfrac{P_i}{Q_i} к рациональному чилу \dfrac{e}{n}. Для некоторого i будет выполняться равенство \dfrac{P_i}{Q_i}=\dfrac{k}{d}. Из равенства ed-k\varphi(n)=1 следует, что числа k и d взаимно просты, значит, k=P_i, d=Q_i.

Пример 8.7 Пусть (n,e)=(4617790059809965777,2693216516134636609) - открытый ключ. Найдём d.

Раскладываем число \dfrac{e}{n} в цепную дробь и находим последовательно подходящие дроби:

\begin{align*}\frac{2693216516134636609}{4617790059809965777}=[0;1,1,2,1,1,64,3,1,1,61,2,9,\ldots],\\
\frac{P_1}{Q_1} =\frac{1}{1};\quad \frac{P_2}{Q_2} =\frac{1}{2};\quad \frac{P_3}{Q_3} =\frac{3}{5};\quad \frac{P_4}{Q_4} =\frac{4}{7};\quad \frac{P_5}{Q_5} =\frac{7}{12};\\
\frac{P_6}{Q_6} =\frac{452}{775};\quad \frac{P_7}{Q_7} =\frac{1363}{2337};\quad \frac{P_8}{Q_8} =\frac{1815}{3112};\quad
\frac{P_9}{Q_9} =\frac{3178}{5449}.\end{align*}

Для девятой подходящей дроби получаем, что разность e\cdot Q_9 - 1 делится нацело на P_9:

2693216516134636609\cdot 5449-1=3178\cdot 4617790055512156980.

Полагаем d=Q_9=5449. Секретный ключ найден.

Атака повторным шифрованием

Строим последовательность: y_1=y, y_i=y_{i-1}^e ~(\mod N), i>1. Итак, y_m=y^{(e^m)} ~(\mod N), а так как \GCD(e,\varphi(n))=1, то существует такое натуральное число m, что e^m=1 ~(\mod \varphi(N)). Но тогда y^{(e^m-1)}=1 ~(\mod N), отсюда следует, что y^{(e^m)} =y ~(\mod N), значит, y_{m-1} - решение сравнения y=x^e ~(\mod N).

Пример 8.8 Пусть у нас имеется открытый ключ N =84517, e = 397 и зашифрованное им сообщение y = 8646. Найдём открытый текст x.

Возводя y в степень e, строим последовательность:

\begin{align*}y_1 = y = 8646,\quad y_2 = 37043,\quad y_3 = 5569,\quad y_4 = 61833,\\ y_5 = 83891,\quad y_6 = 16137,\quad y_7 = 8646 = y.\end{align*}

Следовательно, y_6 является решением сравнения y=x^e ~(\mod N), а, следовательно, искомым сообщением x.

Замечание. Анализ метода повторного шифрования хорошо показывает необходимость соблюдения требований на выбор p и q для обеспечения стойкости. В данном примере d = 82 225. Неудачный выбор криптосистемы привел к тому, что атака методом повторного шифрования дала результат почти сразу, тогда как нахождение d потребовало бы на порядок больших вычислений.

Атака на основе Китайской теоремы об остатках

Как отмечалось ранее, системы шифрования с открытыми ключами работают сравнительно медленно. Для повышения скорости шифрования RSA на практике используют малую экспоненту зашифрования.

Если выбрать число e небольшим или таким, чтобы в его двоичной записи было мало единиц, то процедуру шифрования можно значительно ускорить. Например, выбрав e = 3 (при этом ни p - 1, ни q - 1 не должны делиться на 3), мы сможем реализовать шифрование с помощью одного возведения в квадрат по модулю N и одного перемножения. Выбрав e=2^{16}-1=65537 - число, двоичная запись которого содержит только две единицы, мы сможем реализовать шифрование с помощью 16 возведений в квадрат по модулю N и одного перемножения. Если экспонента e выбирается случайно, то реализация шифрования по алгоритму RSA потребует s возведений в квадрат по модулю N и в среднем s/2 умножений по тому же модулю, где s - длина двоичной записи числа N. Вместе с тем, выбор небольшой экспоненты e может привести к негативным последствиям. Дело в том, что у нескольких корреспондентов могут оказаться одинаковые экспоненты e.

Пусть, например, три корреспондента имеют попарно взаимно простые модули N_1, N_2, N_3 и общую экспоненту e = 3. Если еще один пользователь посылает им некое циркулярное сообщение x, то криптоаналитик противника может получить в свое распоряжение три шифрованных текста y_i=x^3 ~(\mod N_i), i=1,2,3. Далее, он может найти решение системы сравнений, лежащее в интервале (0,N_1\cdot N_2 \cdot N_3) и удовлетворяющее уравнениям:

\left\{\begin{array}{l}
y\equiv y_1 ~(mod\; N_1),\\
y\equiv y_2 ~(mod\; N_2),\\
y\equiv y_3 ~(mod\; N_3)
\end{array}\right.

По китайской теореме об остатках такое решение y единственно, а так как x^3<N_1\cdot N_2 \cdot N_3, то y=x^3. Значение x можно найти, вычислив кубический корень x=\sqrt[3]{y}. Отметим, 8.1 что выбор малой экспоненты расшифрования d также нежелателен в связи с возможностью определения d простым перебором. Известно также что если d<\sqrt[4]{N}, то экспоненту d легко найти, используя непрерывные дроби.

Пример 8.9 Три пользователя имеют модули N_1=26549, N_2= 45901, N_3 = 25351. Все пользователи используют экспоненту e = 3. Всем пользователям было послано некое сообщение x, причем пользователи получили сообщения y_1 = 5366, y_2 = 814, y_3 = 4454. Найдём x.

С помощью китайской теоремы об остатках решим систему:

\left\{\begin{array}{l} 
y=5366 ~(mod\; 26549),\\
y=814 ~(mod\; 45901), \\
y=4454 ~(mod\; 25351).
\end{array}\right.

Для этого вычислим M_0 = N_1\cdot N_2\cdot N_3= 30893378827799. Далее находим

m_1 = N_2\cdot N_3 = 1163636251,
m_2 = N_1\cdot N_3 = 673043699,
m_3 = N_1\cdot N2 = 1218625649,
n_1 = m_1^{-1} ~(mod\; N_1) = 13533,
n_2 = m_2^{-1} ~(mod\; N_2) = 27930,
n_3 = m_3^{-1} ~(mod\; N_3) = 22354.
y = y_1\cdot n_1\cdot m_1 + y_2\cdot n_2\cdot m_2 + y_3\cdot n_3\cdot m_3=
= 84501028038745578 + 15301661957638980 + 121332116653000684 =
=221134806649385242 \equiv  1000000000 ~(mod\; M_0).

Отсюда x=\sqrt[3]{1000000000} = 1000 - исходное сообщение, отправленное пользователям.

Бесключевое чтение

Пусть два пользователя выбрали одинаковый модуль N и взаимно простые экспоненты e_1 и e_2. Если один пользователь посылает им некое циркулярное сообщение x, то криптоаналитик противника может получить в свое распоряжение два шифрованных текста y_1=x^{e_1} ~(mod\; N) и y_2=x^{e_2}~(mod\; N). В таком случае криптоаналитик может получить исходное сообщение, найдя с помощью алгоритма Евклида числа r и s такие, что re_1+se_2=1. Отсюда получаем:

y_1^r y_2^s = x^{re_1 + se_2} = x ~(mod\; N).

Пример 8.10 Два пользователя применяют общий модуль N = 137759, но разные взаимно простые экспоненты e_1=191 и e_2 = 233. Пользователи получили шифртексты y_1=60197 и y_2= 63656, которые содержат одно и то же сообщение. Найдем исходное сообщение методом бесключевого чтения.

Так как e_1 и e_2 взаимно просты, то найдем такие r и s, что re_1+se_2=1. С помощью расширенного алгоритма Евклида находим r = 61, s = -50. Искомое сообщение:

x=y_1^r\cdot y_2^s = 60197^{61} \cdot 63656^{-50}=1234.
Выводы

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

Евгений Шаров
Евгений Шаров

как начать заново проходить курс, если уже пройдено несколько лекций со сданными тестами?

Юлия Мышкина
Юлия Мышкина

Обучение с персональным тьютором осуществляется по Скайпу или посредством переписки?

Анна Ладик
Анна Ладик
Россия, А, Университет, 2012
Паулус Шеетекела
Паулус Шеетекела
Россия, ТГТУ, 2010