Содержание ВВЕДЕНИЕ...................................................................................................... 5 1 Теоретические основы алгоритма шифрования RSA .......................... 7 1.1 Создание ключей в алгоритме RSA ........................................................ 7 1.2 Элементы создания алгоритма шифрования RSA и факторизация ... 10 1.3 Выводы к главе……...………………………………………..…….13 2 Анализ атак на шифр RSA ........................................................................ 14 2.1 Атака для одинаковых сообщений при маленьких значениях открытого ключа и для одинаковых сообщений при маленьких значениях открытого ключа ................................................................................................... 14 2.2 Атака с использованием общего модуля и методом неподвижной точки ……………...…………………………………………...17 2.3 Атака на основе Китайской теоремы об остатках ............................... 21 2.4 Выводы к главе…….……………………………………………….23 3 Разработка программного средства,реализующего атаки на криптосистему RSA .............................................................................................. 24 3.1 Разработка программного средства……………………………….24 3.2 Демонстрация работы и тестированиепрограммного средства ......... 27 3.3 Вывод к главе……………….……………………………...……….29 ЗАКЛЮЧЕНИЕ ............................................................................................. 30 СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ………………………...32 ПРИЛОЖЕНИЕ А. Листинг программы………………………………...34 КМЗИ.250000.000 КР Изм. Лист Разраб. Могилевс Провер. № докум. Подпись Дата Могилевская Лебедева М.Е. Рощина Е.В. Реценз. Н.Контр Утверд. «Программная реализация атак на криптосистему RSA» Пояснительная записка Короченцев Д.А. Лит Лист Листов 41 ДГТУ Кафедра КБИС ВВЕДЕНИЕ Проблема защиты информации путем ее преобразования, исключающего ее прочтение посторонним лицом, волновала человеческий ум с давних времен. История криптографии - ровесница истории человеческого языка. Более того, первоначально письменность сама по себе была криптографической системой, так как в древних обществах ею владели только избранные. Священные книги Древнего Египта, Древней Индии тому примеры. С широким распространением письменности криптография стала формироваться как самостоятельная наука. Первые криптосистемы встречаются уже в начале нашей эры. Так, Цезарь в своей переписке использовал уже более менее систематический шифр, получивший его имя. Наука о методах расшифровки зашифрованной информации без предназначенного для такой расшифровки ключа называется криптоанализом. Попытку раскрытия конкретного шифра с применением методов криптоанализа называют криптографической атакой на этот шифр. Криптографическую атаку, в ходе которой раскрыть шифр удалось, называют взломом или вскрытием. На сегодняшний день для человека существует большое количество угроз раскрытия его личной конфиденциальной информации. Каждый день появляются новые методы для взлома и перехвата данных, поэтому вопросом безопасности занимаются во всем мире. Данные вопросы поднимались следующими российскими учеными: Черемушкин А. В., Василенко О. Н., Ишмухаметовым Ш. М.. Таким образом, сказанное выше, позволило обосновать актуальность разработки программного средства, позволяющего имитировать атаки на криптосистему RSA. КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 5 Целью курсовой работы является программная реализация атак на криптосистему RSA пятью разными методами. Цель определила следующие задачи: рассмотреть теоретические основы алгоритма; исследовать виды атак; разработать проект, при помощи которого реализуются атаки на криптосистему RSA. Объектом курсовой работы является криптосистема RSA. Предмет данной работы является наглядная демонстрация алгоритма криптосистемы. Методологическая основа курсовой работы включает следующие научные методы: анализ, дедукция, сравнение и описание. КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 6 1 ТЕОРЕТИЧЕСКИЕ ОСНОВЫ В АЛГОРИТМЕ ШИФРОВАНИЯ RSA 1.1 Создание ключей в алгоритме RSA Криптографические системы с открытым ключом используют так называемые односторонние функции, которые обладают следующим свойством: если известно х, то f(x) вычислить просто, однако обратная операция не имеет простого решения. Под односторонностью понимается не теоретическая однонаправленность, а практическая невозможность вычислить обратное значение, используя современные вычислительные средства, за обозримый интервал времени [3, C. 68]. В основу криптографической системы с открытым ключом RSA положена сложность задачи факторизации произведения двух больших простых чисел. Для шифрования используется операция возведения в степень по модулю большого числа. Для дешифрования (обратной операции) за разумное время необходимо уметь вычислять функцию Эйлера от данного большого числа, для чего необходимо знать разложение числа на простые множители[3, C. 70]. Криптосистема с открытым ключом RSA определяется следующим образом[1, C. 121]: RSA = (M, C, K, M, C, e, d, N, E, D), (1.1) где M – множество открытых текстов; С – множество шифротекстов; К – множество ключей; MЄM – открытый текст; N = p*q – натуральное число, где p и q – простые числа; {(e, N), (d,N)} Є K, e≠d – ключи шифрования и расшифрования соответственно, удовлетворяющие условию КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 7 e * d 1(mod ( N )) , (1.2) где φ(N)=(p-1)(q-1) – функция Эйлера; Е – функция шифрования: С M e (mod N ) ; (1.3) D – функция расшифрования: M C d ( M e ) d (mod N ) . (1.4) Как шифрование, так и расшифрование в криптосистеме RSA могут быть выполнены за полиномиальное время. [2, C. 165] Для большей криптостойкости RSA необходимо, чтобы числа p и q состояли обычно не менее чем из 100 цифр. [5, C. 29] Как и тесты Ферма и Соловея — Штрассена, тест Миллера — Рабина опирается на проверку ряда равенств, которые выполняются для простых чисел. Если хотя бы одно такое равенство не выполняется, это доказывает что число составное. [3] Для теста Миллера — Рабина используется следующее утверждение: Пусть 𝑛 > 2 . Представим число 𝑛 − 1 в виде 𝑛 − 1 = 2𝑠 𝑑 , где 𝑑 – нечетно. Тогда если 𝑛 – простое число, то для любого 𝑎 ∈ ℤ𝑛 выполняется одно из условий: 1. 𝑎𝑑 ≡ 1 (𝑚𝑜𝑑 𝑛) 𝑟𝑑 2. ∃𝑟, 0 ≤ 𝑟 < 𝑠 ∶ 𝑎2 ≡ −1 (𝑚𝑜𝑑 𝑛) Если это утверждение (условие 1 или 2) выполняется для некоторых чисел 𝑎 и 𝑛 (не обязательно простого), то число 𝑎 называют свидетелем простоты числа 𝑛 по Миллеру, а само число 𝑛 — вероятно простым. (При случайно выбранном 𝑎 вероятность ошибочно принять составное число за КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 8 простое составляет 25 %, но её можно уменьшить, выполнив проверки для других 𝑎.) Одним из самых важных в теории чисел и криптографии является алгоритм Евклида для вычисления наибольшего общего делителя (НОД) [6, C. 9]. Блок-схема алгоритма представлена на рисунке 1.1. Рисунок 1.1 – Алгоритм Евклида Алгоритм Евклида решает задачу нахождения наибольшего общего делителя двух чисел a и b за O(log min(a,b)). Но, также стоит отметить, что существует бинарный алгоритм Эвклида, который быстрее обычного алгоритма Евклида, т.к. вместо медленных операций деления и умножения используются сдвиги. КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 9 1.2 Элементы создания алгоритма шифрования RSA и факторизация Пусть задан некоторый натуральный модуль m, и рассмотрим кольцо, образуемое этим модулем. Тогда для некоторых элементов этого кольца можно найти обратный элемент. Обратным к числу a по модулю m называется такое число b, что 𝑎 ∗ 𝑏 ≡ 1 (𝑚𝑜𝑑 𝑛) (1.5) Расширенный алгоритм Евклида представляет решение диофантова уравнения вида 𝑎∗𝑥−𝑏∗𝑦 =𝑐 (1.6) Из условия НОД (a,m)=1 следует, что это уравнение имеет решение. Если мы возьмём от обеих частей уравнения остаток по модулю m, то получим 𝑎 ∗ 𝑏 ≡ 1 (𝑚𝑜𝑑 𝑛) (1.7) Таким образом, найденное x и будет являться обратным к a. Асимптотика этого решения получается O(log m) [9, C. 189]. Целью факторизации является приведение объекта к «основным строительным блокам», например, число к простым числам, многочлен — к неприводимым многочленам. Факторизация целых чисел обеспечивается основной теоремой арифметики, а многочленов — основной теоремой алгебры. КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 10 Противоположностью факторизации полиномов является их расширение, перемножение полиномиальных факторов для получения «расширенного» многочлена, записанного в виде суммы слагаемых. Факторизация целых чисел для больших чисел является задачей большой сложности. Не существует никакого известного способа, чтобы решить эту задачу быстро. Её сложность лежит в основе некоторых алгоритмов шифрования с открытым ключом, таких как RSA. Матрица может также быть факторизована на произведение матриц специального вида для приложений, в которых эта форма удобна. Одним из основных примеров этого является использование ортогональных, унитарных и треугольных матриц. Существуют различные способы факторизации: QR-разложение, LQ, QL, RQ, RZ. Ещё одним примером является факторизация функций в виде композиции других функций, имеющих определённые свойства. Например, каждая функция может рассматриваться как композиция сюръективной функции с инъективной. Этот подход является обобщением понятия факторизации систем. По основной теореме арифметики каждое натуральное число имеет единственное разложение на простые множители. Существует множество алгоритмов факторизации целого, с помощью которых можно факторизовать любое натуральное число до состава его простых множителей с помощью рекуррентных формул. Однако, для очень больших чисел эффективный алгоритм пока неизвестен. Факторизацией натурального числа называется его разложение в произведение простых множителей. Существование и единственность (с точностью до порядка следования множителей) такого разложения следует из основной теоремы арифметики. В отличие от задачи распознавания простоты числа, факторизация предположительно сложной задачей. В настоящее время является вычислительно неизвестно, КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата существует Лист 11 ли эффективный не квантовый алгоритм факторизации целых чисел. Однако доказательства того, что не существует решения этой задачи за полиномиальное время, также нет. Для больших чисел задача факторизации является вычислительно сложной и лежит в основе широко используемых алгоритмов[10, C. 136]. Последние исследования показали, что решить задачу RSA может оказаться легче, чем разложить N на множители, но есть основания предполагать, что в общем случае задача RSA и задача разложения на множители имеют одинаковую сложность. Поэтому наиболее естественным способом решение задачи RSA является разложение N на множители. Самые эффективные - алгоритмы факторизации. Их время выполнения зависит от размера N, числа, которое нужно разложить на множители, а зависимость от множителя p более слабая. Такими алгоритмами являются: метод Лемана; метод квадратичных форм Шенкса; метод цепных дробей. Вторая – время выполнения зависит от размера p. К ним относятся: метод пробного деления; (𝜌 − 1) метод Полларда; метод Полларда, метод Ленстры, основанный на эллиптических кривых. Алгоритмы эффективны и имеют большое значение. Тем не менее, для атаки на RSA с конкретным значением N только некоторые из них оказываются эффективными. [7, C. 14] 1.3 Выводы к главе В данной главе было рассмотрены следующие основные вопросы: выяснили какие цели злоумышленник в момент атаки на криптосистему, а так же как можно сделать алгоритм более устойчивым к атакам. Так же стоит взять во внимание, что после аналитического обзора теоретических основ, самым уязвимым к взлому со стороны злоумышленника является алгоритм шифрования RSA. Отметим факт, что при возможности реализации атак на криптосистему КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 12 RSA, выбраны: атака угадывания закрытого ключа, атака для одинаковых сообщений при маленьких значениях открытого ключа, атака с использованием общего модуля, атака методом неподвижной точки, атака на основе Китайской теоремы об остатках. Система программного обеспечения, разрабатываемая в следующих главах, будет иметь ряд преимуществ по сравнению с существующими на рынке программными средствами с похожим функционалом. КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 13 2 АНАЛИЗ АТАК НА ШИФР RSA 2.1 Атака угадыванием закрытого ключа и для одинаковых сообщений при маленьких значениях открытого ключа Если N достаточно велико и d выбрано из относительно большого множества, то задача вычисления d не должна быть проще, чем задача разложения N на множители. Прежде всего заметим, что факторизация числа N и вычисление закрытого ключа d обладают полиномиальной сводимостью друг к другу. [12, C. 123]. То есть 𝜌 𝐼𝐹𝑃(𝑁) ⇔ {𝑑} (2.1) Или 𝜌 𝐼𝐹𝑃(𝑁) ⇔ 𝑅𝑆𝐴(𝑑) (2.2) Рассмотрим теорему: если известно разложение на множители числа N, параметра криптосистемы RSA, то d можно вычислить за полиномиальное время. То есть 𝜌 𝐼𝐹𝑃(𝑁) ⇔ {𝑑} (2.3) Доказательство будет таким, если N=pq известно, то можно найти 1 𝑑 ≡ (𝑚𝑜𝑑(𝑝 − 1)(𝑞 − 1)) 𝑒 (2.4) поскольку е также известно. Поскольку обратный элемент 1/е может быть найден с помощью расширенного алгоритма Евклида за полиноминальное время, d можно найти за полиномиальное время. Теперь покажем, что если известен закрытый ключ d, то N можно разложить на множители за полиномиальное время. Рассмотрим теорему Мила и Мэй. Пусть N = pq, где р и q — простые числа. Пусть е и d — открытый и закрытый ключи RSA соответственно, КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 14 удовлетворяющие условию 𝑒𝑑 ≡ 1 (mod φ(N)). [14, C. 74] 1) Если р и q имеют одинаковую битовую длину и 1 < 𝑒𝑑 ≤ N 3/2 , то по заданным (N,e,d) можно разложить N на множители за время 𝜎((log 𝑁)2 ) 2) Если р и q имеют одинаковую битовую длину и 1 < 𝑒𝑑 ≤ N 2 , то по заданным (N,e,d) можно разложить N на множители за время 𝜎((log 𝑁)9 ) 3) 1 Пусть 𝛽 и 0 < 𝛿 ≤ – вещественные числа, такие что, 2𝛽𝛿(1 − 𝛿) ≤ 1. 2 Пусть N=pq, где p и q простые числа, такие что 𝑝 < 𝑁 𝛿 и 𝑞 < 2𝑁 1−𝛿 . Пусть 1 < 𝑒𝑑 ≤ 𝑁𝛽 , тогда по заданным (N, e, d), N можно разложить на множители за время 𝜎((log 𝑁)9 ) Доказательство будет таким: теорема доказывается путем применения алгоритма Копперсмита вычисления небольших корней полиномиальных сравнений с одной переменной с использованием метода решеток Рассмотрим еще одну теорему: задачу RSA можно разрешить за полиномиальное время, если известно разложение на множители параметра криптосистемы RSA N. Таким образом, [8, C. 102] 𝜌 𝐼𝐹𝑃(𝑁) ⇔ 𝑀 (2.5) Теорему доказывают следующим образом, в соответствии с теоремой 1, если разложение на множители модуля d N криптосистемы RSA известно, то можно получить за полиномиальное время. Поскольку d известно, то расшифрование можно выполнить следующим образом: М = 𝐶 𝑑 (𝑚𝑜𝑑 𝑁) ( 2 .6 ) за полиномиальное время, так как С и N известны. [4, C. 25] Другими словами, вычисление d по открытому ключу (е, N) имеет такую же вычислительную сложность, как и задача разложения на множители числа N. КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 15 Пусть e = 3, что соответствует минимально возможному значению ключа шифрования RSA. Предположим, что трем различным получателям был отправлены одинаковые сообщения M, используя при этом следующие ключи: {(𝑒, 𝑁1), (𝑒, 𝑁2), (𝑒, 𝑁3)}, где НОД(𝑁𝑖 , 𝑁𝑗 ) = 1 для 𝑖, 𝑗 = 1,2,3, причем 𝑖 ≠ 𝑗 и 𝑀 < 𝑁𝑖 . Тогда M может быть быстро вычислено НАЙТИ ЛЕГКО {𝑒, 𝐶1 , 𝐶2 , 𝐶3 , 𝑁1 , 𝑁2 , 𝑁3 } ⇒ {𝑀} (2.7) Рассмотрим первую теорему: .пусть 𝑒1 = 𝑒2 = 𝑒3 = 3 и 𝐶1 ≡ 𝑀 3 (𝑚𝑜𝑑 𝑁1 ) {𝐶2 ≡ 𝑀 3 (𝑚𝑜𝑑 𝑁2 ) 𝐶3 ≡ 𝑀 3 (𝑚𝑜𝑑 𝑁3 ) (2.8) Применяя китайскую теорему об остатках к системе сравнений 𝑀3 ≡ 𝐶1 (𝑚𝑜𝑑 𝑁1 ) {𝑀3 ≡ 𝐶2 (𝑚𝑜𝑑 𝑁2 ) 𝑀3 ≡ 𝐶3 (𝑚𝑜𝑑 𝑁3 ) (2.9) получаем 𝑀3 ≡ 𝐶1 ∗ (𝑁2 ∗ 𝑁3 ) ∗ ((𝑁2 𝑁3 )−1 𝑚𝑜𝑑 𝑁1 ) + 𝐶2 ∗ ((𝑁1 ∗ 𝑁3 ) ∗ ((𝑁1 𝑁3 )−1 𝑚𝑜𝑑 𝑁2 ) + 𝐶2 (𝑁1 ∗ 𝑁2 ) ∗ ((𝑁1 𝑁2 )−1 𝑚𝑜𝑑 𝑁3 )(𝑚𝑜𝑑 𝑁1 ∗ 𝑁2 ∗ 𝑁3 ) (2.10) Таким образом, 𝑀 ≡ 𝑀1/3 (2.11) Теорему доказывают следующим образом, результат вытекает из китайской теоремы об остатках. Можно сделать замечание. Вычисление кубического корня из x, x1/3 является легко выполнимой задачей, в то время, как вычисление корня по КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 16 модулю 𝑥 1/3 𝑚𝑜𝑑 𝑁, где N – большое составное число, таковой не является, так же как и задача вычисления квадратного корня по модулю: вычисление 𝑥 1/2 производится легко, в отличие от вычисления 𝑥 1/2 𝑚𝑜𝑑 𝑁 где N – большое составное число Для защиты от атак, основанных на малом значении открытой экспоненты e, не следует отправлять одинаковые сообщения несколько раз, даже при использовании различных модулей в различных сеансах работы алгоритма шифрования. При увеличении e c 3 до 216+1=65537 и выполнении шифрования следующим образом 𝐶1 ≡ 𝑀65537 (𝑚𝑜𝑑 𝑁1 ) {𝐶2 ≡ 𝑀65537 (𝑚𝑜𝑑 𝑁2 ) 𝐶3 ≡ 𝑀65537 (𝑚𝑜𝑑 𝑁3 ) (2.12) M будет сложно вычислить, зная 𝐶1 , 𝐶2 , 𝐶3 . Для вычисления M нарушитель должен получить 65537 шифртекстов, что почти невозможно, потому, что, вероятно, никто не будет отправлять одно и то же сообщение M 65537 различным получателям. С другой стороны, использование этого значения открытого ключа так же эффективно, как и e = 3, так как шифрование при значении e=216+1 = 65537 = (10000000000000001)2 требует 17 модульных возведений в квадрат и два модульных умножения. 2.2 Атака на шифрование RSA с использованием общего модуля и методом неподвижной точки Четыре параметра {𝑑, 𝑝, 𝑞, 𝜑(𝑁)} являются конфиденциальными параметрами криптосистемы RSA. Знание значения хотя бы одного из них позволяет найти другие три и решить соответствующую задачу RSA можно и без знания параметров {𝑑, 𝑝, 𝑞, 𝜑(𝑁)}. Одним из параметров некорректного использования служит повторное использование значения параметра N при КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 17 шифровании. Предположим, что Боб отправляет Алисе два шифртекста 𝐶1 и 𝐶2 𝐶1 ≡ 𝑀𝑒1 (𝑚𝑜𝑑 𝑁), 𝐶2 ≡ 𝑀𝑒2 (𝑚𝑜𝑑 𝑁) (2.13) где НОД(e1,e2) = 1. Тогда, как показывает следующая теорема можно восстановить исходное сообщение M без знания разложения на множители числа N или без использования какого-либо конфиденциального параметра {𝑑, 𝑝, 𝑞, 𝜑(𝑁)}. Рассмотрим теорему: пусть 𝑁1 = 𝑁2 и 𝑀1 = 𝑀2 , но 𝑒1 ≠ 𝑒2 и НОД(𝑒1 , 𝑒2 ) = 1 такие, что 𝐶1 ≡ 𝑀𝑒1 (𝑚𝑜𝑑 𝑁), 𝐶2 ≡ 𝑀𝑒2 (𝑚𝑜𝑑 𝑁), тогда M можно быстро восстановить. Таким образом, 𝜌 {[𝐶1 , 𝑒1 , 𝑁], [𝐶2 , 𝑒2 , 𝑁]} ⇒ {𝑀}. (2.14) Теорему доказывают следующим образом, поскольку НОД(𝑒1 , 𝑒2 ) = 1, существуют 𝑥, 𝑦 ∈ 𝑍 , такие что 𝑒1 𝑥 + 𝑒2 𝑦 = 1, при этом значения 𝑥 и 𝑦 могут быть получены с помощью расширенного алгоритма Евклида за полиноминальное время. Таким образом, получаем 𝑦 𝑒 𝑥 𝑒 𝑦 𝐶1𝑥 𝐶2 ≡ (𝑀1 1 ) (𝑀22 ) ≡ 𝑀𝑒1𝑥+𝑒2𝑦 ≡ 𝑀(𝑚𝑜𝑑 𝑁) (2.15) Рассмотрим пример: 𝑒1 =5 𝑒2 = 9 𝑀 = 11 𝑁 = 107 𝐶1 ≡ 𝑀𝑒1 (𝑚𝑜𝑑 𝑁) = 16 𝐶2 ≡ 𝑀𝑒2 (𝑚𝑜𝑑 𝑁) = 33 КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 18 Теперь найдем 𝑥 и 𝑦 такие, что 5𝑥 + 9𝑦 = 1 . С помощью расширенного алгоритма Евклида получаем, что 𝑥 = 2 и 𝑦 = −1 Следовательно, проведем расчеты 𝑦 𝑀 ≡ 𝐶1𝑥 𝐶2 ≡ 162 ∗ 33−1 ≡ 11 (𝑚𝑜𝑑 𝑁) Следовательно, мы смогли восстановить исходное сообщение M без разложения числа N на множители или использование конфиденциальных параметров {𝑑, 𝑝, 𝑞, 𝜑(𝑁)}. Чтобы защититься от подобных атак на RSA, необходимо избегать шифрования одного сообщения разными открытыми ключами с использованием одного и того же параметра N криптосистемы RSA. А так же в этой главе рассматривается еще одна простейшая атака на криптосистему RSA — атака методом неподвижной точки. Эта атака не основывается на разложении N на множители и не использует ни один из конфиденциальных параметров RSA. Атака с неподвижной точкой также называется циклической атакой или атакой методом повторного шифрования. Этот метод был открыт Симмонсом и Норрисом в 1977 году, в то же время когда была разработана криптосистема RSA. 𝑘 Пусть 0 ≤ 𝑥 < 𝑁 . Если 𝑥 𝑒 ≡ 𝑥 (𝑚𝑜𝑑 𝑁), 𝑘 ∈ 𝑍 + , тогда x называют неподвижной точкой RSA(e, N) порядка k. Рассмотрим теорему: пусть С является неподвижной точкой RSA(e, N) порядка k: 𝑘 С𝑒 ≡ С(𝑚𝑜𝑑 𝑁), 𝑘 ∈ 𝑍 + , (2.16) тогда 𝑘−1 С𝑒 ≡ 𝑀(𝑚𝑜𝑑 𝑁), 𝑘 ∈ 𝑍 + (2.17) Теорему доказывают следующим образом, поскольку шифрование RSA 𝐶 ≡ 𝑀𝑒 (mod N)есть перестановка сообщений {0,1,2, ..., N—1}, то существует k неподвижная точка Сe ≡ С(mod N). По этой же причине выполняться КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 19 Сe k−1 ≡ M(mod N): k Сe ≡ С(mod N) ≡ k → Сe ≡ 𝑀 𝑒 (mod N) ≡ → Сe → (Сe k−1 𝑒 k−1 Сe ≡ 𝑀𝑒 (mod N) ≡ (2.18) )𝑒 ≡ 𝑀𝑒 (mod N) ≡ k−1 ≡ M(mod N) Теорема 1 описывает способ элементарной атаки на криптосистему RSA путем вычисления последовательности степеней С по модулю N 2 3 С𝑒 , С𝑒 , С𝑒 … С𝑒 𝑘−1 𝑘 → 𝑀, С𝑒 → С (2.19) k Таким образом, когда получено Сe 𝑚𝑜𝑑 𝑁 ≡ С , мы прекращаем выполнение алгоритма и берем предыдущий элемент С𝑒 𝑘−1 𝑚𝑜𝑑 𝑁, который и будет решение RSA(M) Рассмотрим пример на данную теорему: 𝑒 = 17; N = 2773; С = 2342. Вычислим элементы последовательности для к = 1,2,3,... с помощью следующего алгоритма: 𝑒 ← 17 2773 С ← 2342. N← для k от 1 по 100 выполнять 𝑘 𝐴 ← С𝑒 𝑚𝑜𝑑 2773 если A = C, то 𝑀 ← С𝑒 𝑘−1 𝑚𝑜𝑑 2773 вывести (k, M, C); получаем следующее: 2365 1157 2018 985 1421 2101 1664 2047 1539 980 1310 1103 1893 1629 2608 218 1185 1039 602 513 КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 20 772 744 720 2755 890 2160 2549 926 536 449 2667 2578 728 2276 248 454 1480 1393 2313 2637 2247 1688 1900 → 𝑀 2342 → 𝐶 44 Поскольку 𝐶 = 234217 (𝑚𝑜𝑑 2773) является неподвижной точкой 43 𝑅𝑆𝐴(17,2773) для k = 44, то М = С17 = 1900 (𝑚𝑜𝑑 2773) является открытым текстом для 𝐶 = 2342. Действительно, 1900 является открытым текстом для 2342, что нетрудно проверить следующим образом: 190017 (𝑚𝑜𝑑 2773) = 2343 Нетрудно видеть, что в данном примере не используется ни один из конфиденциальных параметров {d, p, q, φ(N)}, чтобы расшифровать С. 2.3 Атака на основе Китайской теоремы об остатках Как отмечалось ранее, системы шифрования с открытыми ключами работают сравнительно медленно. Для повышения скорости шифрования RSA на практике используют малую экспоненту зашифрования. Если выбрать число 𝑒 небольшим или таким, чтобы в его двоичной записи было мало единиц, то процедуру шифрования можно значительно ускорить. Например, выбрав 𝑒 = 3 (при этом ни 𝑝 − 1, ни 𝑞 − 1 не должны делиться на 3), мы сможем реализовать шифрование с помощью одного возведения в квадрат по модулю 𝑁 и одного перемножения. Выбрав 𝑒 = 216 − 1 = 65537 - число, двоичная запись которого содержит только две единицы, мы сможем реализовать шифрование с помощью 16 возведений в квадрат по модулю 𝑁 и одного перемножения. Если экспонента 𝑒 выбирается случайно, то реализация шифрования по алгоритму RSA потребует 𝑠 возведений в квадрат по модулю 𝑁 и в среднем 𝑠/2 умножений по тому же модулю, где 𝑠 - длина двоичной записи числа 𝑁. Вместе с тем, КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 21 выбор небольшой экспоненты 𝑒 может привести к негативным последствиям. Дело в том, что у нескольких корреспондентов могут оказаться одинаковые экспоненты 𝑒. Пусть, например, три корреспондента имеют попарно взаимно простые модули 𝑁1 , 𝑁2 , 𝑁3 и общую экспоненту 𝑒 = 3. Если еще один пользователь посылает им некое циркулярное сообщение 𝑥, то криптоаналитик противника может получить в свое распоряжение три шифрованных текста 𝑦𝑖 = 𝑥 3 (𝑚𝑜𝑑 𝑁𝑖 ) 𝑖 = 1,2,3. Далее, он может найти решение системы сравнений, лежащее в интервале (0, 𝑁1 ∗ 𝑁2 ∗ 𝑁3 ) и удовлетворяющее уравнениям: 𝑦 ≡ 𝑦1 (𝑚𝑜𝑑 𝑁1 ) {𝑦 ≡ 𝑦2 (𝑚𝑜𝑑 𝑁2 ) 𝑦 ≡ 𝑦3 (𝑚𝑜𝑑 𝑁3 ) (2.20) По китайской теореме об остатках такое решение 𝑦 единственно, а так как 𝑥 3 < 𝑁1 ∗ 𝑁2 ∗ 𝑁3 , то 𝑦 = 𝑥 3 . Значение 𝑥 можно найти, вычислив кубический корень 𝑥 = 3√𝑦. Рассмотрим пример Три пользователя имеют модули N1 = 26549, N2 = 45901, N3 = 25351. Все пользователи используют экспоненту e = 3. Всем пользователям было послано некое сообщение x, причем пользователи получили сообщения y1 = 5366, y2 = 814, y3 = 4454. Найдем M0 = N1∙N2∙N3 = 30893378827799. Далее находим m1 = N2∙N3 = 1163636251 m2 = N1∙N3 = 673043699 m3 = N1∙N2 = 1218625649 n1 = m1-1 mod N1 = 13533 n2 = m2-1 mod N2 = 27930 n3 = m3-1 mod N3 = 22354 КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 22 S = y1∙n1∙m1 + y2∙n2∙m2 + y3∙n3∙m3 = 84501028038745578 + 15301661957638980 + + 121332116653000684 = 221134806649385242 S mod M0 = 1000000000 x = (S mod M0)1/3 = 1000 – исходное сообщение, отправленное пользователям. По основной теореме арифметики каждое натуральное число имеет единственное разложение на простые множители. Существует множество алгоритмов факторизации целого, с помощью которых можно факторизовать любое натуральное число до состава его простых множителей с помощью рекуррентных формул. 2.4 Выводы к главе В данной главе были дано теоретические атак на алгоритм RSA. Проанализировав все данные атаки, для дальнейшего использования будет применена каждая, чтобы показать различие по эффективности и для наглядности, показать особенности результатов. Теперь, когда знакомство с теорией окончено, можно приступить к процессу описания наиболее сложных моментов реализации. КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 23 3. РАЗРАБОТКА ПРОГРАММНОГО СРЕДСТВА, РЕАЛИЗУЮЩЕГО АТАКИ НА КРИПТОСИСТЕМУ RSA 3.1 Разработка программного средства В качестве языка программирования был выбран объектно- ориентированный язык программирования C#. В качестве среды разработки была выбрана Visual Studio. Главное преимущество - разработка консольного приложения с адаптивным пользовательским меню, а также возможность подключения различных модулей. Приложение должно решать две основные задачи выполнять все операции связанные с шифрование и расшифровыванием информации в различных представлениях, а именно числами и в файлах. Вторая задача заключается в организации атак на шифр RSA. Для реализации поставленных задач программа была построена из двух форм. RSA является ассиметричным шифром поэтому с ним связано три основных алгоритма, реализация которых представлена в виде статического класса RSA. Первый алгоритм это генерация ключей, код данного алгоритма представлен на рисунке 3.1. Рисунок 3.1 – Генерация ключей КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 24 Кроме того класс предусматривает возможность ввести параметры шифрования самостоятельно, для этого разработан специальный метод, который представлен на рисунке 3.2. Рисунок 3.2 – Ввод ключа Для шифрования предусмотрено два метода один метод шифрует числа, а второй шифрует массив байт, причем шифр массива байт ссылается на метод шифрования чисел. Метод шифрования байт представлен на рисунке 3.3. Рисунок 3.3 – Шифрование байт КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 25 Вторая форма содержит список атак, программная реализация так же представлена в классе RSA. Рисунок 3.4 – Метод атаки «Угадыванием открытого текста» Одна из атак «Атака угадыванием открытого текста» представлена на рисунке 3.4. Рисунок 3.5 – Фрагмент кода «Атаки угадыванием закрытого ключа» Кроме того среди атак представлены атаки на основе факторизации, так «Атака угадыванием закрытого ключа», представлена на рисунке 3.5. КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 26 3.2 Демонстрация работы и тестирование программного средства Программный продукт разработан так, чтобы интуитивным образом понятен любому пользователю. Выполнять различные операции в течении одного сеанса работы с программой необязательно, все файлы необходимые для работы криптосистемы RSA, хранятся в виде файлов, в корневом каталоге с программой. Основной интерфейс состоит из 3 трех частей, первая часть, отвечающая за генерацию ключа, представлена в виде кнопки «Генерация» и в виде панели смена ключа, которая позволяет частично сменить ключ введя вручную необходимые параметры, сгенерированный ключ выводится на панель внизу формы, как показано на рисунке 3.6. Рисунок 3.6 – Внешний вид основной формы Вторая часть отвечает за шифрование и расшифровывание чисел, представлена в виде двух панелей с текстовым полем и кнопкой. Для зашифровывания необходимо ввести число и нажать кнопку далее. Зашифровывание и расшифровывание представлено на рисунке 3.7. КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 27 Рисунок 3.7 – Внешний вид панели шифрования чисел Для работы с файлами предусмотрены две дополнительные панели, они оснащены кнопкой обзор, что позволяет выбрать файл для расшифровки или дешифровки, как показано на рисунке 3.8 Рисунок 3.8 – Внешний вид панели работы с файлами Вторая часть программы предназначена для реализации атак. Атаки собраны на одной форме разделенные на подписанные панели, как показано на рисунке 3.9. Рисунок 3.9 – Внешний вид формы атак КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 28 Рисунок 3.10 – Внешний вид панели «Атака угадыванием функции Эйлера» Все атаки условно можно разделить на атаки факторизацией и атаки на сообщение. Так «Атака угадыванием функции Эйлера» направлена на факторизацию числа n, но для этого используется лазейка в виде функции Эйлера, как показано на рисунке 3.10. 3.3 Вывод к главе В данной главе была рассмотрена разработка программного средства, реализующая атаки на криптосистему RSA, а так же представлен пример работы программы. Для наглядности показан реализованный интерфейс, а так же предоставлены примеры работы программы с каждой атакой на криптосистему. Теперь, когда знакомство с теоретической и практической частью законченно, можно перейти к выводу по проделанной работе. КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 29 ЗАКЛЮЧЕНИЕ В рамках курсовой работы были рассмотрены различные атаки на алгоритм RSA такие, как на основе алгоритмов разложения на множители составного числа N, бесключевое чтение, вычисления корня степени е. При достижении поставленной цели были решены следующие задачи: изучены теоретические сведения, требуемые для решения поставленной задачи; систематизированы и обобщены полученные знания; создан программный продукт, при помощи которого производится имитация атак на криптосистему RSA на основе нескольких алгоритмов; доказано, что разработанная программа обладает заявленной функциональностью. В ходе работы были рассмотрены понятия, которые необходимы для понимания данной темы, а также проанализированы различные виды атак на криптосистему. Достоинствами разработанного проекта является оптимальная реализация, работа с различными атаками для того, чтобы показать различие по времени и по сложности реализации. Сложность данного проекта заключается в том, что требуется достаточно большое количество времени на выполнение и на объем занимаемой памяти. Недостаток программы заключается в том, что при больших размерах ключей реализованные атаки чаще всего дают неверный результат и работают очень долго. Разработанный программный продукт можно использовать в учебной деятельности, для улучшения не только понимания принципов работы с различными атаками на криптосистему. Таким образом, рассмотренные атаки на криптосистему RSA на основе КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 30 различных алгоритмов следует применять в случае перехвата сообщения лицами, у которых нет доступа к данной информации. На основе проведенного тестирования программное средство можно обладает утверждать, заявленной что разработанное функциональностью и полностью соответствует поставленным задачам и установленной цели. КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 31 СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 1. Баричев С. В. Криптография без секретов.– М.: Наука, 2008. –120 с. 2. Василенко О. Н. Теоретико - числовые алгоритмы в криптографии — М.: МЦНМО, 2007. — 328 с. 3. Герасименко В. А., Скворцов А. А., Харитонов И. Е. Новые направления применения криптографических методов защиты информации. 2009. - 360с. 4. Девянин П. Н., Михальский О. О., Правиков Д. И., Щербаков А. Ю. Теоретические основы компьютерной безопасности: Учебное пособие для вузов – М.: Радио связь, 2007. – 286 с. 5. Ишмухаметов Ш. Т. Методы факторизации натуральных чисел — Казань: Казанский университет, 2011. — 190 с. 6. Коблиц, Нил Курс теории чисел и криптографии— 2-е издание — М.: Научное издательство ТВП, 2006. — 254 с. 7. Нестеренко А. Ю. Теоретико-числовые методы в криптографии — М.: Московский государственный институт электроники и математики, 2012. — 224 с. 8. Панасенко С. Алгоритмы шифрования. Специальный справочник. 2009г. - 576с. 9. Пашеку Х. Программирование в PyCharm 2006 для профессионалов = PyCharmfor .NET Developer'sGuide. - М.: Вильямс, 2006. - 944 с. 10. Прокофьев И. В., Шрамков И. Г., Ведение в теоретические основы компьютерной информации – М:, 2008. – 648 с. 11. Ростовцев А. Г., Михайлова Н. В. Методы криптоанализа классических шифров – М.: Наука, 2005. – 208 с. 12. Сэломон Д. Сжатие данных, изображений и звука. - М.: Техносфера, 2006. - 368с. 13. Черемушкин А. В. Лекции по арифметическим алгоритмам в КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 32 криптографии— М.: МЦНМО, 2002. — 401 с. 14. Шнайер, Б. Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке программирования Python- М:Триумф, 2002 — 816 с. 15. Ященко В. В. Введение в криптографию -М: МЦНМО, 2009. — 587 с. 16. Beazly David. Python. Подробный справочник, 4-е издание / ред. А.Галунов; – пер. с англ. А.Киселева – СПБ.: Символ-Плюс, 2010. – 864 с. КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 33 ПРИЛОЖЕНИЕ А Листинг программы using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WindowsFormsApp8 { static class RSA { public static BigInteger p; public static BigInteger q; public static BigInteger n; public static BigInteger f; public static BigInteger e; public static BigInteger d; public static int stack; static int size = 5; public static void GenerationKeys() { Random rand = new Random(); p = new BigInteger(); q = new BigInteger(); p.genRandomBits(size, rand); q.genRandomBits(size, rand); КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 34 while (!p.RabinMillerTest(100) || !q.RabinMillerTest(100) || p == q || p * q < 10|| p==q) { p.genRandomBits(size, rand); q.genRandomBits(size, rand); } n = p * q; f = (p - 1) * (q - 1); int exp = rand.Next(size); var v = new BigInteger(2); e = v.modPow(exp, f) + 1; while (e > f || e.gcd(f) != 1) { exp = rand.Next(size*2); e = v.modPow(exp, f) + 1; } d = Number.Euclid(e, f); d = (f + d).modPow(1, f); stack = n.getBytes().Length; } public static Boolean SetKey(BigInteger p, BigInteger q , BigInteger e) { BigInteger n = p * q; BigInteger f = (p - 1) * (q - 1); if (e.gcd(f) != 1 || e >= f) return false; d = Number.Euclid(e, f); d = (f + d).modPow(1, f); КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 35 RSA.n = n; RSA.f = f; RSA.e = e; RSA.p = p; RSA.q = q; return true; } public static Boolean SetKey( BigInteger e) { if (e.gcd(f) != 1 || e >= f) return false; d = Number.Euclid(e, f); d = (f + d).modPow(1, f); RSA.e = e; return true; } public static BigInteger Encrypt(BigInteger m) { return m.modPow(e, n); } public static BigInteger Decrypt(BigInteger c) { return c.modPow(d, n); } public static byte[] CryptoByte(byte[] byteArray) { byte[] cryptoByte = new byte[byteArray.Length * stack]; for (int i = 0, t = 0; i < byteArray.Length; i++) { BigInteger c = Encrypt((int)byteArray[i]); КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 36 byte[] temp = c.getBytes(); for (int j = 0; j < stack - temp.Length; j++, t++) cryptoByte[t] = 0; for (int j = 0; j < temp.Length; j++, t++) cryptoByte[t] = temp[j]; } return cryptoByte; } public static byte[] DecryptoByte(byte[] byteArray) { byte[] decryptoByte = new byte[byteArray.Length / stack]; for (int i = 0, t = 0; i < decryptoByte.Length; i++) { byte[] temp = new byte[stack]; for (int j = 0; j < stack; j++, t++) temp[j] = byteArray[t]; decryptoByte[i] = (byte)Decrypt(new BigInteger(temp)).IntValue(); } return decryptoByte; } //Атака угадывание открытого текста public static BigInteger AttackM(BigInteger c) { BigInteger m = 0; for (m = 0; m<n; m++) if (m.modPow(e, n) == c) break; return m; } public static BigInteger AttackSubscribe(BigInteger m) { Random rand = new Random(); КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 37 BigInteger r = rand.Next(n.IntValue()/2)+1; while (r.gcd(n) != 1) { r = rand.Next(n.IntValue() / 2) + 1; } BigInteger mEva = r.modPow(e,n) * m; BigInteger sEva = mEva.modPow(d, n); BigInteger rObr = Number.Euclid(r, n); BigInteger S = sEva * rObr; S = S.modPow(1, n); S = (S + n).modPow(1, n); return S; } //по функции эйлера public static int[] AttackEyler(BigInteger n, BigInteger f) { //ПРЕДПОЛОЖИМ ЧТО МЫ УГАДАЛИ F BigInteger t = n - f + 1; //ВЫЧИСЛЯЕМ ДИСКРИМИНАНТ int[] x = Number.Sqrt(1, -t.IntValue(), n.IntValue()); return x; } //угадывание закрытого ключа public static int[] AttackD(BigInteger e , BigInteger d) { p = 0; q = 0; КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 38 //УГАДАЛИ D var v = new BigInteger(2); List<BigInteger> mul = new List<BigInteger>(10); for (int i = 2; i < 100; i++) { BigInteger s = e * d - 1; Console.WriteLine(s); if (s % i == 0) { s /= i; var t = v.modPow(s, n)-1; var k = t.gcd(n); mul.Add(k); } } for (int i = 0; i < mul.Count; i++) { p = mul[i]; q = (n/p).IntValue(); if (q != 1 && q != n ) break; } int[] x = new int[] { p.IntValue(), q.IntValue() }; return x; } //вычисление корня степени e public static BigInteger AttackE(BigInteger c) { BigInteger d = Number.Euclid(e, f); BigInteger m = c.modPow(d,n); КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 39 return m; } public static BigInteger AttackMod(BigInteger e1, BigInteger e2, BigInteger n, BigInteger c1, BigInteger c2) { Number.Euclid(e1, e2, out BigInteger[] x, out BigInteger[] y); var с1x = c1.modPow(Number.Abs(x[2]), n); if (x[2] < 0) с1x = Number.Euclid(с1x, n); var с2y = c2.modPow(Number.Abs(y[2]), n); if (y[2] < 0) с2y = Number.Euclid(с2y, n); BigInteger m = (с1x * с2y).modPow(1,n); if (m < 0) m += RSA.n; return m; } //атака неподвижной точкой public static BigInteger AttackPoint(BigInteger c) { BigInteger e = RSA.e; BigInteger n = RSA.n; int k = 1; for (k = 2; k < 100; k++, e *= RSA.e) if (c.modPow(e, n) == c) break; e /= RSA.e; BigInteger m = c.modPow(e, n); return m; } } } КМЗИ.250000.000 КР Изм. Лист № докум. Подпись Дата Лист 40