Под катом описаны примеры выбора «плохих» параметров шифра RSA.
Процитируем авторов учебного пособия «Основы криптографии» А.П. Алферов, А.Ю. Зубов, А.С. Кузьмин, А.В. Черемушкин, Москва. «Гелиос АРВ», 2001г., на странице 316:
«Следует подчеркнуть необходимость соблюдения осторожности в выборе модуля RSA (числа n) для каждого из корреспондентов сети. В связи с этим можно сказать следующее. Читатель может самостоятельно убедиться в том, что зная одну из трех величин p, q или φ(n), можно легко найти секретный ключ RSA…».
Дополним этот текст. При неудачном выборе модуля шифра RSA, как это сделано в примере пособия, приводимом ниже, можно дешифровать текст и без наличия секретного ключа, т.е. не зная ни одной из трех названных величин.
Для этого достаточно располагать зашифрованным текстом, заданным модулем шифра n, открытым ключом е шифра и выполнить всего три шага атаки «бесключевого чтения». После четвертого атакующего шага устанавливается, что на предыдущем шаге был получен исходный текст, он может быть прочитан. Покажем, насколько просто это делается.
Вначале приведем сам пример со стр. 313-315 из названного пособия.
Шифрование короткого исходного текстового сообщения: RSA.
Получатель устанавливает шифр с характеристиками n=pq=527, где р=17, q=31 и φ(n)=(р –1)(q – 1)=480. В качестве открытого ключа е выбрано число, взаимно простое с φ(n), е=7. Для этого числа с помощью расширенного алгоритма Евклида найдены целые числа u и v, удовлетворяющие соотношению е∙u+φ(n)∙v=1:
480=7∙68+4,
7=4∙1+3,
4=3∙1+1,
1=4–3∙1=4–(7–4∙1)∙1=4∙2–7∙1=(480–7∙68)∙2–7∙1=480∙2–7∙137,
v=2, u=–137.
Поскольку –137≡343(mod480), то d=343.
Проверка: 7∙343=2401≡1(mod480).
Текстовое сообщение представляется в виде последовательности чисел, содержащихся в интервале [0, 526]. Для этого буквы R, S и
R=1810=(10010)2, S=1910=(10011)2,
A=110=(00001)2.
Тогда RSA=(100101001100001)2. Разбиение текста на блоки ограниченной длины дает представление из двух блоков: RSA=(100101001), (100001)=(М1=297, М2=33).
Последовательно шифруются блоки исходного текста М1=297, М2=33:
y1=Еk(М1)=М1e≡2977(mod527)=474.
Здесь воспользовались тем, что:
2977=((2972)3)297≡(mod527)=(2003(mod527)297)(mod527)=474,
y2=Еk(М2)=M2e≡337(mod527)=407.
Шифрованный текст, как и исходный, получаем в виде двух блоков: у1=474; у2=407.
Расшифрование представляется последовательностью действий Dk(yi )=(yi )d=(yi )343(mod 527), i=1,2.
Вычисления возведения в степень d более удобно проводить, предварительно представляя показатель степени суммой степеней числа 2, а именно: 343=256+64+16+4+2+1.
Используя это представление показателя степени d=343, получаем:
4742≡174(mod527),
4744≡237(mod527),
4748≡307(mod527),
47416≡443(mod527),
47432≡205(mod527),
47464≡392(mod527),
474128≡307(mod527),
474256≡443(mod527),
Аналогично вычисляется значение 407343(mod527)=33.
Переход к буквенному представлению расшифрованного сообщения дает: RSA.
После рассмотрения примера в пособии приводятся рассуждения о стойкости системы RSA. Подчеркивается необходимость соблюдения осторожности в выборе модуля шифра RSA (числа n) для каждого из корреспондентов сети. Указывается на недопустимость игнорирования требований к выбираемым характеристикам системы шифрования. Среди таких требований, к сожалению, не указано то, нарушение которого иллюстрирует приведенный пример.
Рассмотрим пример атаки на шифр RSA. Воспользуемся данными примера, приведенного на странице 313-315 в учебном пособии «Основы криптографии» А.П. Алферов, А.Ю. Зубов, А.С. Кузьмин, А.В. Черемушкин, Москва. «Гелиос АРВ», 2001.
Неудачность (недопустимость) выбранных параметров системы в этом примере легко показывается вычислениями, реализующими атаку бесключевого чтения исходного текста. Сущность такой атаки состоит в следующем. Заданы открытый ключ шифра RSA (е=7, n=527) и шифрованный текст. В примере шифрованный текст представлен двумя блоками
у=(у1=474, у2=407).
Каждый шифрованный блок атакуется индивидуально, вначале атакуем у1=474, после его дешифрования, атакуем другой блок у2=407.
Далее формируется путем многократного зашифрования с сохранением результатов двух последовательных шагов алгоритма атаки и с использованием открытого ключа последовательность числовых значений уi, у1=у имеющийся шифрованный текст.
В алгоритме атаки на шифрованный текст определяется такой номер шага j, для которого yiej(mod n)=(yiej–1(mod n))e(mod n)=yi, i>1. Из последнего соотношения видим, что при возведении в степень е значения (yiej–1(mod n)) получается начальный шифoртекст yi = у1.
Но это и означает, что на этом шаге шифровался открытый текст. Непосредственными вычислениями (их оказывается совсем немного) с использованием экранного калькулятора находим то значение j, при котором цикл шифрования завершается значением y1, с которого цикл и был начат.
Атака на первый блок у1=474 шифртекста.
Шаг 1:   4747(mod527)=382
2977(mod527)=474 получили начальный (первый) блок шифртекста. Атака на первый блок завершена успешно у1=474. Предшествующий результат шага 3 равен открытому тексту М1=297.
По существу в кольце вычетов по модулю n=527 реализовался короткий цикл обработки вычета r=297 по модулю n=527
Атака на второй блок у2=407 шифртекста.
Шаг 1:   4077(mod527)=16;
Шаг 2:   167(mod527)=101;
Шаг 3:   1017(mod527)=33;
Шаг 4:   337(mod527)=407.
Вновь на третьем шаге получен блок исходного текста (М2=33), но атакующему это неизвестно, и он выполняет следующий (четвертый шаг), результат которого (407) совпадает с начальным шифртекстом у2=407.
По существу в кольце вычетов по модулю n=527 реализовался короткий цикл обработки вычета r=33 по модулю n=527.
Результат атаки (исходный текст М1=297, М2=33) получен трехкратным шифрованием заданного шифртекста. Больший успех для атакующего шифртекст трудно представить.
Продолжая обсуждение вопроса о выборе модуля и других параметров шифра, можно добавить, что модуль шифра (n=527) некоторые исходные тексты вообще не позволяет шифровать. При этом выбор значения открытого ключа е большой роли не играет. Существуют значения исходных текстов, которые вообще невозможно зашифровать выбранным шифром с модулем n=527.
Ни на одном из заданных е не удается зашифровать исходные тексты, представляемые числами
187, 341, 154 и 373.
1542(mod527)=1;
1544(mod527)=1;
1547(mod527)=154;
1549(mod527)=154;
15417(mod527)=154;
154111(mod527)=154;
1872(mod527)=187;
1874(mod527)=187;
1877(mod527)=187;
1879(mod527)=187;
18717(mod527)=187;
187 111(mod527)=187;
3412(mod527)=341;
3414(mod527)=1;
3417(mod527)=341;
3419(mod527)=341;
34117(mod527)=341;
341111(mod527)=341;
3732(mod527)=1;
3734(mod527)=373;
3737(mod527)=373;
3739(mod527)=373;
37317(mod527)=373;
373111(mod527)=373.
Из рассмотренного примера следует простой вывод. Действительно, к выбору параметров процесса шифрования надо подходить очень внимательно и проводить тщательный предварительный анализ таких параметров. Как это делать — отдельный вопрос, и в рамках этой работы он не рассматривается.
Содержание:
Допустим, что объект А хочет передать сообщение объекту В в зашифрованном виде. Для этого используем алгоритм RSA. При передаче могут возникнут проблемы из-за характеристики проводных линий связи или плохую полосу пропускания и пропускную способность. Для этого нужно использовать методы обнаружения ошибок. Но для разных сетей разные методы.
Шаги:
При реализации алгоритма на практике, нужно иметь возможность без сильных затрат генерировать большие простые числа, к тому же быстро решать значение ключей.
Для наглядности вычисления, будем использовать небольшие числа. Но на практике используют очень большие числа ( длиной 200-300 десятичных разрядов).
Действия объекта В:
Действия объекта A:
Действия объекта B:
Объект получил исходное сообщение, которое послал объект A.
Шифрование с помощью RSA есть одним из методов защиты информации при передачи данных через сеть Интернет. Схема Рабина очень похожа на схему RSA. Криптоалгоритм RSA признан стойким при дине ключа больше 1024 бит. Нужно отметить что алгоритм применяют как для шифрования так и для электронно-цифровой подписи. Нетрудно заметить что в асимметричной криптосистеме RSA количество ключей связано с количеством пользователей линейной зависимостью (N пользователей используют 2 × N ключей), а не квадратичной как это используется в симметричных системах.
Применение алгоритма может решить некоторые угрозы информационной безопасности в сети.
Если сравнивать самые популярных представителей асимметричного и симметричного шифрования, нужно отметить, что по скорости RSA уступает DES, да и реализация криптоалгоритма RSA сложнее. Поэтому RSA обычно используется для передачи небольших сообщений. Шифрование как таковое, частично решает проблемы защиты информации в сетях.
Оценка статьи:
Загрузка…
Поделиться с друзьями:
Алгоритм RSA является наиболее широко используемым алгоритмом асимметричного шифрования, развернутым на сегодняшний день.
Аббревиатура образована от фамилий трех математиков, создавших ее в 1977 году: Рон Р Ивест, Ади С Хамир, Леонард А Длеман.
Чтобы понять алгоритм, мы должны определить несколько терминов:
12 MOD 5
, мы просто спрашиваем остаток при делении 12 на 5, в результате чего получается 2.После этого мы можем перейти к самому алгоритму.
Суть асимметричного шифрования заключается в поиске двух математически связанных значений, которые могут служить открытым и закрытым ключами. Таким образом, основная часть работы заключается в генерации таких ключей.
Чтобы получить такие ключи, выполните пять шагов:
Это действительно так просто, как кажется. Выберите два простых числа, чтобы начать генерацию ключа. В нашем примере мы будем использовать числа 9.0005 7
и 19
, и мы будем называть их P
и Q
.
Затем мы просто перемножаем наши два простых числа, чтобы вычислить произведение:
7 * 19 = 133
Мы будем называть это число N
. Дополнительный вопрос: учитывая терминологию, которую мы рассмотрели выше, что за число такое N?
При определении и приобретении Totient требуется много умной математики. Большинство из которых выходит за рамки предполагаемой области этой статьи. Итак, пока мы просто примем, что формула для получения Тотиента для полупростого числа состоит в вычислении произведения единицы, вычтенной из каждого из двух его простых множителей. Или, проще говоря, чтобы вычислить Totient полупростого числа, вычислите P-1, умноженное на Q-1.
Применительно к нашему примеру мы рассчитали бы:
(7-1)*(19-1) = 6 * 18 = 108
Далее мы будем называть это T .
Открытый ключ — это значение, которое должно соответствовать трем требованиям:
Давайте посмотрим, сможем ли мы обойтись числом 3: 3 действительно простое число, 3 действительно меньше 108, но, к сожалению, 3 является множителем 108, поэтому мы не можем его использовать. Можете ли вы найти другой номер, который будет работать? Вот подсказка, есть несколько значений, удовлетворяющих всем трем требованиям.
Для нашего примера мы выберем 29
в качестве нашего открытого ключа и будем называть его E
в дальнейшем.
Наконец, с учетом того, что мы уже подсчитали, мы можем выбрать наш закрытый ключ (который мы назовем D
). Закрытый ключ должен соответствовать только одному требованию: произведение открытого ключа и закрытого ключа. при делении на Тотиент должен давать в остатке 1. Или, проще говоря, должна быть верна следующая формула:
(D*E) MOD T = 1
Есть несколько значений, которые также подходят для закрытого ключа. Но опять же, для нашего примера мы выберем 41
. Чтобы проверить это по нашей формуле, мы могли бы вычислить:
(41 * 29) MOD 108
Мы можем использовать калькулятор, чтобы проверить, действительно ли результат равен 1. Это означает, что
41
будет работать. как наш закрытый ключ.
Вот и все, мы прошли каждый из этих пяти шагов и получили следующие значения:
Теперь мы просто выбираем значение, которое будет использоваться в качестве нашего открытого сообщения, и мы можем увидеть, действительно ли асимметричное шифрование работает так, как они говорят.
В нашем примере мы будем использовать 99 в качестве открытого текста.
(на этом этапе математика становится довольно большой, если вы пытаетесь следовать, я предлагаю использовать утилиту Linux Bash Calculator)
Используя ключи, которые мы сгенерировали в приведенном выше примере, мы запускаем через процесс шифрования. Напомним, что при асимметричном шифровании мы шифруем с помощью открытого ключа, а расшифровываем с помощью закрытого ключа. 929 MOD 133 = 92
Результатом 92
является наш зашифрованный текст. Это значение, которое будет отправлено по сети, и только владелец коррелирующего закрытого ключа сможет расшифровать и извлечь исходное сообщение. У нас была пара ключей 29 (публичный) и 41 (закрытый). Итак, давайте посмотрим, действительно ли мы можем извлечь исходное сообщение, используя наш закрытый ключ:
Формула для расшифровки с помощью ключей RSA: Оригинал M essage = 941 MOD 133 = 99
В качестве эксперимента попробуйте подставить открытый ключ (29) в формулу расшифровки и посмотрите, принесет ли это вам что-нибудь полезное. Вы заметите, что, как было сказано ранее, невозможно использовать один и тот же ключ для шифрования и расшифровки.
Но помните, это не все, что мы можем сделать с парой ключей. Мы также можем использовать ту же пару ключей в обратном порядке для проверки подписи сообщения.
Для этого мы будем использовать те же формулы, что и выше, за исключением того, что на этот раз мы будем уважать использование открытого и закрытого ключа. Мы собираемся зашифровать с помощью закрытого ключа и посмотреть, сможем ли мы расшифровать с помощью открытого ключа. 929 MOD 133 = 99
Вот и все. Полностью рабочий пример возможностей генерации ключей RSA, шифрования и подписи.
Здесь следует отметить, что то, что вы видите выше, считается «ванильным» RSA. При промышленном использовании шифрования RSA используемые числа на значительно больше на . Фактически, современная передовая практика RSA заключается в использовании размера ключа 2048 бит. Это коррелирует со значением N в нашем расчете выше. Два простых числа, используемые в современном RSA, должны давать произведение, равное 2048 битам.
И просто чтобы дать вам представление о том, насколько велико 2048-битное число. Ранее мы видели, что 128-битное число можно записать в десятичном виде с помощью 39 цифр. 2048-битный ключ экспоненциально длиннее — для полной записи потребуется примерно 617 цифр.
Предпочитаете видеоконтент тексту? Большая часть этой статьи была записана и может быть просмотрена на Youtube:
Series NavigationAnti-Replay >>Diffie-Hellman >>В 1978 году Ривест, Шамир и Адлеман из Массачусетского технологического института предложили теоретико-числовой способ реализации криптосистемы с открытым ключом. Их метод получил широкое распространение. Базовая техника:
р
и q
. n
= p * q
и x
= ( p -1)*( q -1)
x
и назовите его d
. д
не является простым множителем числа x
или кратное ему. e
такие, что e
* d = 1 mod x
. Чтобы использовать этот метод, разделите открытый текст (рассматриваемый как битовая строка) на
блоков так, чтобы каждое открытое текстовое сообщение P
попадает в интервал 0 <= P < n
.
Это можно сделать, разделив его на блоки по k
бит, где k
— это
наибольшее целое число, для которого 2 k < n
правда.
Для шифрования: C
= P e (mod n )
Для расшифровки: P 0054 = C d (mod n )
Открытый ключ, используемый для шифрования, имеет следующий вид: ( e , n )
и
закрытый ключ, используемый для расшифровки: ( d , n )
)
Чтобы создать открытый ключ, выберите два больших положительных простых числа. | |
Вычислить | |
Выберите целое число | |
Вычислить | |
| |
Чтобы создать секретный ключ, вычислите | |
Чтобы вычислить зашифрованный текст | |
| |
Для вычисления открытого текста |
|
| |
RSA работает, потому что знание открытого ключа не
раскрыть закрытый ключ. Обратите внимание, что и открытый, и закрытый ключи содержат
важное число
n = p * q
.
Безопасность системы основана на том факте, что n
трудно разложить на множители — то есть при большом числе (даже таком, о котором известно, что
основные факторы) нет простого способа узнать, что они из себя представляют. это колодец
известный математический факт. Если быстрый метод факторизации равен когда-либо
обнаружен, то RSA перестанет быть полезным.
Это это очевидно возможно взломать RSA с помощью скотина
атака force — просто разложите n
. Чтобы сделать это трудным, это
обычно рекомендуется выбирать p
и q
так, чтобы n
было (в
номера 2002 года) не менее 1024 бит.
Одной из превосходной особенностью RSA является то, что он симметричен . Мы уже знаем, что если вы зашифруете сообщение моим открытым ключом, то только я
может расшифровать этот зашифрованный текст, используя мой секретный ключ. Однако оказывается также
что сообщение зашифровано моим секретным ключом можно расшифровать только с помощью
мой открытый ключ . Это имеет важные последствия, см. далее.
Алгоритм RSA работает с огромными числами и включает множество
возведение в степень (т. е. многократное умножение) и арифметика по модулю. Такой
операции вычислительно затратны (т.е. они занимают много времени
время!) и поэтому шифрование и дешифрование RSA невероятно медленно ,
даже на быстрых компьютерах. Сравните это с
операции, связанные с DES (и другие одноклавишные системы)
которые состоят из повторяющихся простых XOR
s
и транспозиций. Типичные цифры таковы, что DES в 100 раз быстрее, чем RSA.
на эквивалентном оборудовании. Кроме того, DES может быть легко реализован в выделенном
аппаратное обеспечение (RSA, вообще говоря, является программной технологией), дающее
повышение скорости до 10000 раз.