Атаки на RSA.

Этот раздел содержит в себе описания различного рода атак на одну из наиболее популярных ныне схем открытого шифрования и цифровой подписи - RSA. Рассматриваемые методы предполагают наличие определенных математических слабостей схемы, не учитываемых при бесшабашной реализации. Также приводятся меры противодействия этим атакам. Их необходимо принимать во внимание при реализации схемы RSA или протоколов, основанных на ней.

1. Безключевое чтение RSA.

2. Атака на подпись RSA в схеме с нотариусом.

3. Атака на подпись RSA по выбранному ш.т.

 

Прежде всего вспомним саму схему о.ш и ЭЦП RSA.

  1. Выбираются p,q - большие простые числа. Вычисляется произведение n=pq.
  2. Выбирается число e - такое, что (e, j(n))=1 (т.е e и j(n) - взаимнопросты), где j(n) - функция Эйлера от n.
  3. Из уравнения ed=1(mod j(n)) находится число d.

Полученные числа e,n - открытый ключ пользователя, а d - секретный ключ.

Процедура зашифрования: C=E(e,n)(M)=Me(mod n), где С-получаемый ш.т. , M - о.т., удовлетворяющий следующему условию: Mj(n)=1(mod n).

Процедура расшифрования: M=D(d,n)(C)=Cd(mod n).

Генерация цифровой подписи: цифровая подпись Q=Md(mod n).

Проверка цифровой подписи:   Qe(mod n) ?= M.

 

1. Метод безключевого чтения RSA.

Начальные условия. Противнику известны открытый ключ (e,n) и шифротекст С.

Задача. Найти исходный текст M.

Противник подбирает число j, для которого выполняется следующее соотношение: Сej(mod n)=C. Т.е. противник просто проводит j раз зашифрование на открытом ключе перехваченного шифротекста (это выглядит следующим образом: e)e)e..)e(mod n)=Сej(mod n)). Найдя такое j, противник вычисляет Cej-1(mod n) (т.е. j-1 раз повторяет операцию зашифрования) - это значение и есть открытый текст M !  Это следует из того, что Сej(mod n)=(Cej-1(mod n))e=C. Т.е некоторое число Cej-1(mod n) в степени e дает шифротекст С. А что же это, как не открытый текст M?

Пример (по Sinmons & Norris). p=983, q=563, e=49, M=123456.

C=M49(mod n)=1603, C497(mod n)=85978, C498(mod n)=123456, C499(mod n)=1603.

 

2. Атака на подпись RSA в схеме с нотариусом.

Начальные условия. Имеется электронный нотариус, подписывающий проходящие через него документы. N - некоторый открытый текст, который нотариус не желает подписывать. Противнику известны открытый ключ (e,n) нотариуса.

Задача. Подписать этот текст N.

Противник вырабатывает некое случайное число x, которое взаимнопросто с N и вычисляет y=xe(mod n). Затем получает значение M=yN и передает его на подпись нотариусу. Тот подписывает (ведь это уже не текст N!) Md(mod n)=S. Т.е получаем, что S=Md(mod n)=ydNd=(xe)dNd =xNd, а значит Nd=Sx -1(mod n).Т.е надо просто поделить полученное S на x.

Защита. При подписи добавлять некоторое случайное число в сообщение (например, время). Таким образом получится искажение числа M при подписи, т.е M(после добавления)yN.

 

3. Атака на подпись RSA по выбранному шифротексту.

Начальные условия. Имеется шифротекст C. Противнику известны открытый ключ (e,n) отправителя сообщения.

Задача. Найти исходный текст M

Противник вырабатывает некое r: r<n, (r,n)=1 и вычисляет x=re(mod n). Затем о вычисляет t=r-1(mod n) и y=xC(mod n) и посылает y на подпись отправителю.

Отправитель, ничего не подозревая, подписывает текст y: w=yd(mod n) и отправляет w обратно.

Противник вычисляет tw(mod n)=r-1yd(mod n)= (поскольку r=xd mod n)=x-dxdCd(mod n)=Cd=M.

Противник не может сразу послать C на подпись, т.к. отправитель просматривает полученные в результате подписи сообщения и может заметить провокацию.

Атака носит несколько гипотетический характер, но тем не менее позволяет  сделать несколько важных выводов: а) подписывать и шифровать надо разными ключами, либо б) добавлять случайный вектор при подписи или использовать хэш-функцию.