Криптография/Атака Padding oracle на RSA: различия между версиями
(Новая страница: «==Мультипликативное свойство RSA== Пусть E(M) - функция шифрования, N - модуль, X mod Y - остаток от…») |
(→Атака Блехенбахера) |
||
(не показаны 3 промежуточные версии этого же участника) | |||
Строка 5: | Строка 5: | ||
==Pairing Oracle== | ==Pairing Oracle== | ||
− | Разберем следующи пример: пусть есть сервис по заказу яиц. Но он позваляет заказывать только четное количество яиц. Заказы принимаются в зашифрованном RSA виде. Нужно, имея | + | Разберем следующи пример: пусть есть сервис по заказу яиц. Но он позваляет заказывать только четное количество яиц. Заказы принимаются в зашифрованном RSA виде. Нужно, имея подслушанный зашифрованный текст C, получить его дешифрованный текст M. |
Атака выглядит следующим образом: пусть M < N. Можно послать сервису заказ на <code>2M mod N</code> яиц (для этого нужно послать <code>(C*2^e) mod N)</code>. Тогда есть два варинта: | Атака выглядит следующим образом: пусть M < N. Можно послать сервису заказ на <code>2M mod N</code> яиц (для этого нужно послать <code>(C*2^e) mod N)</code>. Тогда есть два варинта: | ||
Строка 12: | Строка 12: | ||
Аналогичные суждения можно сделать, домножая C на 2^ie mod N (где i - натуральное число) и, используя метод двоичного поиска, выяснить, чему же равно M. | Аналогичные суждения можно сделать, домножая C на 2^ie mod N (где i - натуральное число) и, используя метод двоичного поиска, выяснить, чему же равно M. | ||
− | ==PKCS | + | ==PKCS== |
Согласно этому стандарту, паддинг текста, длина которого недостаточна для шифрования происходит следующим образом: | Согласно этому стандарту, паддинг текста, длина которого недостаточна для шифрования происходит следующим образом: | ||
<span style="color:#B22222">0002</span><span style="color:#4169E1">3572e4bcc8df4c7e53f931c1d79addcc3d0412db8723e28c84a5f6340d0f95f9836b07907669f2527 | <span style="color:#B22222">0002</span><span style="color:#4169E1">3572e4bcc8df4c7e53f931c1d79addcc3d0412db8723e28c84a5f6340d0f95f9836b07907669f2527 | ||
Строка 25: | Строка 25: | ||
<span style="color:#FF00FF">00</span> - сепаратор, после которого идёт собственно сам текст | <span style="color:#FF00FF">00</span> - сепаратор, после которого идёт собственно сам текст | ||
− | ==Атака Блехенбахера== | + | ==Атака Блехенбахера== |
− | [ | + | [[Файл:Padding.zip|200px|thumb|left|Описание атаки]] |
==Ссылки== | ==Ссылки== | ||
− | * [https://youtu.be/J8j2LHiKS0I Видео лекции] | + | * [https://youtu.be/J8j2LHiKS0I Видео лекции 2021] |
+ | * [https://disk.yandex.ru/i/SyvbTKG5PBZVEA Видео лекции 2022] | ||
* [https://docs.google.com/presentation/d/19sGLccnP5IcVm3l3ie3UJZ_nMTxu62SMCFHCd_M2fFc/edit?usp=sharing Презинтация лекции] | * [https://docs.google.com/presentation/d/19sGLccnP5IcVm3l3ie3UJZ_nMTxu62SMCFHCd_M2fFc/edit?usp=sharing Презинтация лекции] | ||
* [http://archiv.infsec.ethz.ch/education/fs08/secsem/bleichenbacher98.pdf Оригинал статьи по атаке Блехенбахера] | * [http://archiv.infsec.ethz.ch/education/fs08/secsem/bleichenbacher98.pdf Оригинал статьи по атаке Блехенбахера] | ||
* [http://secgroup.dais.unive.it/wp-content/uploads/2012/11/Practical-Padding-Oracle-Attacks-on-RSA.html Ещё одна статья про padding oracle] | * [http://secgroup.dais.unive.it/wp-content/uploads/2012/11/Practical-Padding-Oracle-Attacks-on-RSA.html Ещё одна статья про padding oracle] |
Текущая версия на 12:54, 1 апреля 2022
Мультипликативное свойство RSA
Пусть E(M) - функция шифрования, N - модуль, X mod Y - остаток от деления X на Y. Тогда:
E(M1)E(M2) mod N = E(M1M2 mod N)
Данной свойство очевидно выводится из определения функции шифрования E(M).
Pairing Oracle
Разберем следующи пример: пусть есть сервис по заказу яиц. Но он позваляет заказывать только четное количество яиц. Заказы принимаются в зашифрованном RSA виде. Нужно, имея подслушанный зашифрованный текст C, получить его дешифрованный текст M.
Атака выглядит следующим образом: пусть M < N. Можно послать сервису заказ на 2M mod N
яиц (для этого нужно послать (C*2^e) mod N)
. Тогда есть два варинта:
M > N/2
, тогда2M mod N = 2M - N
- нечетное число, сервис не принимает заказM <= N/2
, тогда2M mod N = 2M
- четное число, сервис принимает заказ
Аналогичные суждения можно сделать, домножая C на 2^ie mod N (где i - натуральное число) и, используя метод двоичного поиска, выяснить, чему же равно M.
PKCS
Согласно этому стандарту, паддинг текста, длина которого недостаточна для шифрования происходит следующим образом: 00023572e4bcc8df4c7e53f931c1d79addcc3d0412db8723e28c84a5f6340d0f95f9836b07907669f2527 eda22e1f80e6e2e4dac062326f5716fca45004c65616b696e672070617269747920616c6c6f777320666f7 22064656372797074696e6720612077686f6c652052534120656e63727970746564206d6573736167650a
0002 - первые два байта определяют тип падинга
3572e4bcc8df4c7e53f931c1d79addcc3d0412db8723e28c84a5f6340d 0f95f9836b07907669f2527eda22e1f80e6e2e4dac062326f5716fca45 - ненулевые случайные байты
00 - сепаратор, после которого идёт собственно сам текст