Рубрики
Без рубрики

Понимание теории чисел позади шифрования RSA

С моим отборочным экзаменом, приходящим через пару месяцев, я подумал, что могу документировать некоторые вещи Я … помечен с компьютером, Python, Java, арифметикой.

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

Обзор шифрования RSA

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

Encryption RSA, которое исходит от названий изобретателей: Rivest, Shamir и Adelman – это метод шифрования, который опирается на людской функции Trapdoor для генерации пары ключей для шифрования данных. Один ключ известен как закрытый ключ, и он хранится спрятанным для личного пользования. Между тем, другой ключ известен как открытый ключ, и он распространяется ни с кем, кто может его использовать.

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

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

Независимо от следующих разделов я немного охвачу о теории числа за шифрованием RSA, и я охвачу фактическое алгоритм шифрования RSA. Много этого контента заимствовано из Огайо государственный университет CSE 6331 лекции по лекции , но весь анализ строго мой.

Номер теории фон

Чтобы понять алгоритм за шифрованием RSA, полезно иметь немного фона в теории чисел.

Модульная арифметика

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

Прежде чем мы попадем в любой из этих забавных вещей, давайте поговорим о операторе модуля. На многих языках оператор модуля – это знак процента (%). Большинство пожилых языков нет истинного модуля. Вместо этого у них есть остаток оператора. Разница в тонком, но это то, что имеет значение.

С истинным модулем-оператором модуль определяет диапазон значений, которые вы можете проехать. Например, 13% 5 Было бы 3 из-за 13 циклов около 5 дважды, прежде чем урегулировать на 3-х подобных часах, только пять клещей (1, 2, 3, 4, 5 (0)). По совпадению, 13, разделенные на 5, также имеют оставшуюся часть 3, поэтому не удивительно, что операции запутаются.

Тем не менее, все становится интересным, когда введены отрицательные числа. Например, 13% -5 будет -2, тогда как остаток все равно будет 3. В случае модуля мы определили новый цикл, который содержит только отрицательные значения (-5 (0), -4, -3, -2, -1).

Для моего собственного здравомыслия я действительно проверил несколько из них в Python (True Mod) и в Java (остаток). Вот результаты:

>>> 17 % 4
1
>>> 17 % -4
-3
>>> -17 % 4
3
>>> -17 % -4
-1
> 17 % 4
1
> 17 % -4
1
> -17 % 4
-1
> -17 % -4
-1

С модульной арифметикой мы получаем четыре разных ответа – один для каждой ориентации цикла и направления. Между тем остаток только дает нам два-один для каждого дивиденда.

Конгруэнтность

В то время как только модульная арифметика не все это интересно, оно имеет несколько веселых свойств. В частности, мы можем начать говорить о конгруэнции. Для этого мы, вероятно, должны охватывать новую конвенцию, называемую деление.

В математике мы показываем, что А делится B С новым символом: | . Например, 3 | 9 утверждает, что 3 делится 9. Хотя это простой символ, мы можем использовать его для определения конгруэнции.

Теперь А Connoguent (≡) до B мод н Если N | (A-B) Отказ Другими словами, А и преступность иметь такой же «остаток», когда делится на n Отказ Например, 121 ≡ 16 мод 7 Поскольку оба значения имеют остаток 2, когда делится на 7.

С этим конгруэнтом отношения мы можем придумать некоторые довольно интересные свойства модульной арифметики. Например, A ≡ мод n С А и А иметь такой же «остаток», когда делится на n . Мы называем это рефлексивным имуществом.

В дополнение к рефлексивному свойству также есть симметричная собственность, в котором говорится, что A ≡ B MOD N эквивалентно B ≡ мод n Отказ Наконец, у нас есть переходное свойство, в котором говорится, что если A ≡ B MOD N и B ≡ C MOD N тогда A ≡ C MOD N Отказ

Вместе эти три свойства демонстрируют, что Congruence Modulo N – это отношение эквивалентности. Затем мы можем использовать эту связь, чтобы начать группировки значений, которые конгруэнтны наборы: [A] n = {x ∈ Z: x ≡ мод n}. Например, Modulo 2 создает два набора номеров: Evens ([0] 2 ) и шансы ([1] 2 ). Эти наборы называются Классы остатков где остаток можно рассматривать как другое слово для остатка.

Группы

К сожалению, по-прежнему довольно много теории номера для удара до того, как мы сможем действительно выросли в алгоритм шифрования. Например, важно исследовать концепцию групп.

На высоком уровне группа ( g ) – это набор, в которой можно использовать двоичный оператор ( * ) для объединения двух элементов в третий элемент. Однако связь между тремя элементами должна следовать четырех условиях: закрытие, ассоциативность, идентичность и обратное.

  • Закрытие: ∀x, y ∈ G, x * y ∈ G (в словах, для всех X и Y в G, результат X * Y также в G)
  • Ассоциативность: x * (y * z) = (x * y) * z
  • Идентичность: ∃e ∈. G S.T. ∀x ∈ G, * E (На словах существует элемент e в G таких, что для каждого элемента X уравнение удерживается)
  • Обратно: ∀x ∈ G, ∃y ∈ G S.t. x * * (В словах, для каждого X в G существует y в g, такие, как выполнение двоичной работы между элементами дает элемент идентичности)

Одним из примеров группы является набор всех целых чисел и оператора дополнения или (Z, +). Аналогично, то же самое можно сказать и для набора всех рациональных чисел, (Q, +) и набор всех действительных чисел, (R, +).

Группы классов остатков

С тому, что мы знаем о классах и группах остатков, мы можем начать определять группы классов остатков, таких как один, связанный добавлением, (z n , +). В частности, z n Определяется как набор, содержащий все классы остатков модуль N (I.E. {[0], [1], [2], ..., [n - 1]} ).

Во-первых, однако, мы должны определить несколько операций для классов остатков. Как оказалось, классы остатков имеют простое свойство: их можно добавить и умножить напрямую. В частности, если x ∈. [а], у ∈ [B] Тогда x + y ∈ [A + B] и x ⋅ y ∈ [A ⋅ B] Отказ

Теперь достаточно дополнение, чтобы составлять группу? Как оказывается, да. В конце концов, он проверяет все четыре коробки:

  • Закрытие: целое число уже проходит эти критерии
  • Ассоциативность: То же самое!
  • Личность: как целое добавление, 0 – наш элемент идентификации
  • Обратно: Опять же, целое добавление определяет – в качестве обратного

К сожалению, (z n , ⋅) не является группой с 0 -1 не существует. Чтобы сделать все хуже, некоторые инверсии не существуют даже, когда набор целых чисел строго положительно. В частности, мы определяем обратное такое, что для a ∈ Z n , а -1 Существует, если GCD (A, где GCD является величайшим общим делителем. Другими словами, должен быть относительно простым на n.

Естественно, следующим шагом будет определить новый набор классов остатков, который содержит только относительные простые простыни на N. Мы называем этот набор z n * И это определяется следующим образом: {a ∈ Z n : GCD (A,}. Пример этого набора будет Z 12 * который содержит 1, 5, 7 и 11 – все относительные простые простыния от 0 до 11.

Теперь этот новый набор достаточно, чтобы сформировать группу с умножением? Еще раз, да! В частности, ассоциативность и свойства идентичности следуют умножению. Кроме того, мы можем вычислить обратное использование расширенного евклидового алгоритма. Это недвижимость закрытия, который я нахожу самое интересное. Как-то, A ⋅ B (MOD N) всегда находится в наборе.

Кардинальность

Далее интересная недвижимость наборов и групп является кардинальностью: размер или количество элементов (| S | где S – какой-то набор). С типичным набором классов остатков модуля N у нас ровно n элементов. Как мы идем о измерении мощности нашего набора относительных классов простых остатков?

Как оказывается, кардинальность нашего набора Z n * Может быть измерено с использованием итоговой функции Эйлера. Существует два способа использовать функцию:

  1. φ (P E ) = (P – 1) P (E-1) для Prime P.
  2. φ (ab) = φ (а) φ (б) если

Зная этот факт, мы можем на самом деле вычислить кардинальность для любого n в z n * Отказ Например, скажем, 15. Тогда, φ (15) = φ (5) φ (3) ⋅. Теперь давайте посмотрим, сможем ли мы перечислить их все: {1, 2, 4, 7, 8, 11, 13, 14}.

Интересно, что есть несколько свойств, которые выходят из здания кардинальности Z n * . Например, Теорема Лангранза Показывает, что для любого в нашей группе A к мощности кардинальности этой группы равна идентичности этой группы (a ∈ G, a | g ). Из примера выше:

2 8 мод

В качестве следствия к тому, что имущество A до мощности некоторого M равно к мощности M MOD кардинальности G (a ∈ G, A M Mod | G |). Опять же, используя пример выше:

2 57 57 мод 8 1 Отказ

Кроме того, теорема Эйлера утверждает, что для любого в Z n * , до сил кардинальности Z n * 1 (a ∈ Z n * , а φ (n) ). Используя наш пример снова снова:

7 8 мод

Наконец, теорема Fermat Littler заявляет, что если есть в Z P * где P – премьер, то A к кардинальности Z p * равно до мощности P минус 1 или 1 (a ∈ Z p * , а φ (p) P-1 ). Используя новый пример, где P – 11:

7 Φ (11) 10 .

Алгоритм шифрования RSA

Учитывая наш новый фон в теории чисел, алгоритм шифрования RSA должен быть довольно простым.

Шаг 1: Выберите большие простые числа

Для начала, первое, что мы хотим сделать, это выбирать два очень больших числа простых чисел). Мы хотим сделать это, потому что главная факторизация – очень сложная задача. Хотя чрезвычайно легко умножить два простыня для создания составной ценности, намного сложнее выяснить, какие два простыня создали это составное значение (aka односторонняя функция).

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

Чтобы проверить, если значение Prime, мы можем грубое усилие разделить значение всеми числами между 2 и квадратным корнем значения значения. Конечно, этот процесс медленный для типов больших значений, которые мы хотели бы проверить, поэтому было бы здорово, если бы был лучший метод.

Введите: тест Fermat. Ранее мы заявили, что если N Prime, то для любого A: A N-1 (мод n). Другими словами, выберите случайное расстояние между 1 и N-1 и решайте уравнение. Если результат 1, мы, вероятно, имеем премьер. Однако есть композитные значения, которые проходят этот тест, и они известны как Carmichael Numbers.

Для улучшения теста Fermat родился тест Miller-Rabin. В дополнение к вычислению теста FERMAT, тест Miller-Rabin добавляет дополнительный вероятностный тест, который дополнительно исключает Carmichael Numbers. В будущем я мог бы копать этот алгоритм намного глубже.

Во всяком случае, с двумя простыми числами (P и Q) выбраны, мы захочем вычислить как продукт P и Q.

Шаг 2: вычислить ключи шифрования

От n, нам нужно выбрать первый е Ключ Ncryption, е Отказ Мы делаем это, выбрав значение между 1 и кардинальностью Z n * (aka φ (n)). В качестве дополнительных критериев E должно быть копирование для φ (n).

В качестве примера рассмотрим два небольших простых числа: 13 и 23. В этом случае N P ⋅ ⋅. Оттуда φ (n) просто вычислить: (p – 1) (q – 1) =. Другими словами, нам нужно выбрать E от 1 до 264, то есть также Coprime до 264. Для простоты мы выберем немного небольшого простого числа, которое не разделяет на 264. Как насчет 19?

С E, мы можем вычислить Ключ дешифрования, D , следующее: -1 мод φ (n). Другими словами, ED ≡ 1 мод φ (n). Для этого мы можем использовать расширенный алгоритм Euclid, но для простоты давайте использовать этот Модульный мультипликативный обратный калькулятор. В таком случае,.

Шаг 3: прибыль

С нашими двумя постоянными мы можем начать шифрование и расшифровывать сообщения. Для этого нам нужно распределить наш открытый ключ. По соглашению мы будем использовать D в сочетании с N (139, 299) в качестве нашего закрытого ключа и E в сочетании с N (19, 299) в качестве нашего открытого ключа.

Оттуда, если кто-то хочет отправить нам зашифрованное сообщение, они возьмут наш открытый ключ и зашифруют их сообщение с ним. Для простоты они могут принять каждый символ в сообщении и преобразовывать его в значение ASCII (M). Затем они будут применять открытый ключ к этому значению следующим образом: е мод n. Когда мы расшифруем это значение, мы будем использовать ту же функцию, кроме E, будет заменено D (так как они защищены): D мод n.

Поскольку мы распределяем наряду с е, мы должны обеспечить, чтобы N достаточно большой. В противном случае кто-то может легко уменьшить его основные факторы и вычислить d. На сегодняшний день отраслевой стандарт требует N более 2048 бит.

Хотите узнать больше?

В процессе написания этой статьи я понял, что я не буду тестировать на нем, поэтому я перестал вложить так много усилий в него. В результате могут быть понятия, которые вы все еще хотите исследовать, как тестирование в целях. Точно так же вы, вероятно, хотите увидеть более конкретные примеры. К сожалению, в это время я не смогу предоставить какую-либо дополнительную поддержку.

Однако, если есть достаточно интереса, я могу расширить эту статью или написать дополнительную статью, уточняющую все, что вы хотели бы знать. Как тот, кто борется с математической стороной информатики, я не уверен, насколько я могу быть, но я всегда хочу попробовать!

Тем временем помогите мне почувствовать себя менее пустой тратой времени, подписываясь на Как член или через список электронной почты .

Если книги не ваша вещь, но вы заинтересованы в темах, связанные с шифрованием RSA, а затем посмотрите некоторые следующие статьи:

Еще раз спасибо за вашу поддержку!

Пост Понимание теории чисел позади шифрования RSA появился первым на Renegade Coder Отказ

Оригинал: “https://dev.to/renegadecoder94/understanding-the-number-theory-behind-rsa-encryption-1pdo”