Путешествие от шифра Цезаря до RSA. Прикладная теория чисел

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

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

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

Атбаш

Атбаш — простой шифр подстановки, который можно встретить в священных иудейских книгах VI век до н. э.  Правило шифрования состоит в замене i-й буквы алфавита буквой с номером n - i + 1, где n — число букв в алфавите. Пример для латинского алфавита выглядит так: при исходном тексте abcdefghijklmnopqrstuvwxyz шифр будет таким — zyxwvutsrqponmlkjihgfedcba.

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

Шифр Цезаря

Суть алгоритма заключалась в сдвиге алфавита на целое количество символов (для алфавита а,б,в…,ю,я при сдвиге на 1 символ вправо результат был бы — я,а,б...,ю).

Алгоритм шифра Цезаря
Алгоритм шифра Цезаря

Стоит признать, что этот метод был уже менее тривиальным. Несмотря на это, третья сторона, зная, что вы использовали шифр Цезаря, могла расшифровать сообщение, перебрав разные «сдвиги» — даже вручную это не занимало много времени. Что дальше?

Пляшущие человечки и другие алгоритмы сопоставления букв символам/знакам

При переборе «в лоб» мы имеем нерешаемую задачу, так как приходится перебирать порядка 30! вариантов (если брать 30 букв за средний размер алфавита) — на первый знак есть 30 вариантов заменяемой его буквы, на второй знак — 29 букв и так далее; то есть 30 * 29 \,*...*\,2*1=30!. Это огромное число, которое с трудом обработает даже современный компьютер. Казалось бы, рабочий алгоритм!

Пляшущие человечки
Пляшущие человечки

Но лингвистика и статистика тоже не стояли на месте: появился такой термин, как «число вхождений» буквы в текст. Соответственно, впервые расшифровав букву «а» или «о», мы знаем, как расшифровать ее еще несколько десятков раз в тексте. Это позволило значительно сократить величину перебора вариантов (уже не 30!, а гораздо меньше).

Статистика использования букв латинского алфавита
Статистика использования букв латинского алфавита

Улучшенное сопоставление букв символам/знакам

Решили, что можно производить шифровку, заменяя не одну букву, а сочетание из двух-трех-четырех. Например — ab = @, bc = #, ac = $ и так далее. Ну и в чем здесь проблема?

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

На помощь пришла теория чисел

Для начала предлагаю вспомнить ту математическую базу, которая понадобится для понимания процессов шифровки: о чем гласит теорема Эйлера и Эйлерова функция? Для составного числа n можно посчитать функцию φ(n), вычисляющую количество различных натуральных чисел, не превосходящих n и не имеющих общих делителей с n; так вот, a^{φ(n)}\equiv \,1\,(mod\, n)для всех a, взаимно простых с n— так и выглядит теорема Эйлера. Разбираемся дальше: если n — произведение p и q, то справедливо утверждение о том, что φ(n)= (p-1) * (q-1)— назовем эту величину K. Попытаемся подобрать два числа \alpha и \beta так, чтобы \alpha * \beta = t * K + 1при t — любом целом числе.

Начинается магия — процесс шифрования

Как же в действительности все описанное работает? Предположим, нам необходимо безопасно передать другу важное послание. В первую очередь нужно, чтобы человек, который намерен переслать нам информацию, знал два числа: nи \alpha(эти данные можно передать как угодно — в любом мессенджере, например). Назовем передаваемую информацию буквой I. И дальше говорим отправителю, используя I, посчитать J, равное I ^ \alpha \equiv J\,(mod\, n) и сообщить нам результат. Отлично, J мы знаем.

Внимательно следите за математикой: J ^ \beta=(I ^ \alpha) ^\beta = I ^{t * K + 1}= (I^K)^t * I \equiv I\,(mod\, n). Значит, посчитав остаток от деления J ^ \betaна n, мы узнаем исходную информацию. Соответственно, если мы возьмем p и q такими, чтобы n = p * q было громадным 700-значным числом, то алгоритм нам позволит «резать» информацию на части по 2 килобита информации. Круто, да?

Алгоритм RSA

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

Даже если мы открытым образом передаем информацию об n и \alpha, человеку, перехватившему эти данные, необходимо знать φ(n), чтобы найти \beta. А для того чтобы посчитать φ(n), ему нужно разложить на множители гигантское число n — а это не такая простая задача, как кажется. Еще не существует алгоритмов, способных разложить на множители 700-значное число за разумное время.

Алгоритм ассиметричного шифрования
Алгоритм ассиметричного шифрования

Подводя итог по RSA, не умея разложить n на простые множители, вы никогда не сможете найти \beta и расшифровать информацию.

Применение шифрования в блокчейне

На мой взгляд, блокчейн — это вершина шифрования, так как децентрализация подразумевает под собой постоянное использование алгоритмов шифрования данных. Разберем один из примеров шифровки: при создании нового криптовалютного кошелька генерируется пара ключей (открытый и закрытый ключ). Для чего это нужно? С одной стороны есть публичный адрес, который генерируется с использованием открытого ключа и может безопасно передаваться другим; с другой стороны используется закрытый ключ для создания цифровых подписей и проверки транзакций. Как только транзакция была подтверждена путем валидации хэша, содержащегося в цифровой подписи, эта транзакция может быть добавлена в блокчейн-регистр.

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

Работа RSA
Работа RSA

Заключение

Конечно, те алгоритмы, которые мы разобрали в этой статье — это далеко не всё, что придумало человечество. Я обошел стороной развивающийся алгоритм Elliptic Curve Digital Signature Algorithm (Алгоритм Цифровой Подписи Эллиптической Кривой, ECDSA), который может посоревноваться с RSA во многих аспектах. Но эллиптические кривые — это отдельная тема с суровой математикой и множеством нюансов.

Математика повсюду! Задумайтесь: математические теоремы, сформулированные в 17-18 веках, нашли свое применение через сотни лет в банковских системах, современных базах данных. И все эти системы можно взломать, лишь понимая, как устроены простые числа!

Источник: https://habr.com/ru/articles/757558/


Интересные статьи

Интересные статьи

На портале «Литрес» вышла книга, написанная двумя людьми и одним ИИ. Поскольку сейчас нейросети и чат-боты на волне популярности или, как принято говорить, «на хайпе», то и к новостям, связанным с ИИ,...
Что нужно знать начинающему тестировщику, который готовится к собеседованию? На самом деле, не так уж много (и в то же время, не мало). Первое, с чего лучше начинать - это теория и основные понятия.
Шифр Цезаря 1.    ВведениеС быстрым развитием обмена цифровыми данными в электронном виде, информационная безопасность приобретает все большее зн...
Java и другие управляемые языки просты и удобны во многих случаях, но иногда их возможностей недостаточно — например, если нужна библиотека, написанная только на C или C++. Иногда х...
Жизнь с многомодульным проектом не так уж проста. Чтобы избежать рутины создания нового модуля мы создали собственный плагин для Android Studio. В процессе реализации мы столкнулись с отсутствием...