1. Введение в асимметричную криптографию и историю RSA
Введение в асимметричную криптографию и историю RSA
Добро пожаловать в курс по практической реализации RSA. Прежде чем мы перейдем к написанию кода и генерации больших простых чисел, необходимо понять фундамент, на котором строится современная защита данных. В этой статье мы разберем проблему, которую решает асимметричное шифрование, историю появления алгоритма RSA и базовую математическую магию, стоящую за ним.
Проблема симметричного шифрования
До середины 1970-х годов вся криптография была симметричной. Это означает, что для зашифровки и расшифровки сообщения использовался один и тот же секретный ключ.
Представьте, что Алиса хочет отправить Бобу секретное письмо в сундуке. Она вешает на сундук замок и закрывает его своим ключом. Чтобы Боб мог открыть сундук, Алиса должна как-то передать ему этот же ключ. Если она отправит ключ почтой, его могут перехватить. Если они встретятся лично, то проблема решена, но в цифровом мире (интернет) личная встреча для обмена ключами с каждым сайтом невозможна.
Это называется проблемой распределения ключей. Как отмечает course.ugractf.ru, если бы для регистрации в каждом мессенджере нам приходилось лично посещать офис для обмена ключами, технологии не смогли бы так быстро проникнуть в нашу жизнь.
Революция: Асимметричная криптография
В 1976 году Уитфилд Диффи и Мартин Хеллман предложили концепцию криптографии с открытым ключом. Идея заключалась в использовании пары ключей:
Вернемся к аналогии с сундуком. В асимметричной системе Боб раздает всем желающим свои открытые замки (открытый ключ). Алиса берет замок Боба, вешает его на сундук и защелкивает. Теперь открыть сундук может только Боб, так как ключ от этого замка есть только у него. Даже сама Алиса не сможет открыть сундук после того, как защелкнула замок.
> В асимметричной криптографии и алгоритме RSA, в частности, публичный и приватный ключи являются двумя частями одного целого и неразрывны друг с другом. > > habr.com
История создания RSA
Хотя Диффи и Хеллман предложили концепцию, у них не было готовой реализации алгоритма, который позволял бы эффективно шифровать данные и создавать цифровые подписи. Эту задачу решили трое ученых из Массачусетского технологического института (MIT): Рон Ривест (Ron Rivest), Ади Шамир (Adi Shamir) и Леонард Адлеман (Leonard Adleman).
Поиск односторонней функции
Ривест и Шамир (информатики) предлагали различные функции, а Адлеман (математик) искал в них уязвимости. Они искали одностороннюю функцию с лазейкой (trapdoor function). Это такая математическая операция, которую легко выполнить в одну сторону, но практически невозможно обратить назад без знания специального секрета (лазейки).
Согласно ru.wikipedia.org, прорыв случился в апреле 1977 года после вечеринки в честь Песаха. Рон Ривест, не в силах уснуть, всю ночь формализовывал идею, и к утру статья была практически готова. Алгоритм получил название по первым буквам фамилий создателей: RSA.
Секретное открытие GCHQ
Интересный исторический факт: аналогичная система была изобретена еще в 1973 году английским математиком Клиффордом Коксом, работавшим в британской разведке (GCHQ). Однако из-за грифа секретности его работа не была опубликована и стала известна общественности только в 1997 году. Поэтому лавры первенства и название алгоритма достались ученым из MIT.
Публикация в Scientific American
Первое широкое описание RSA появилось в августе 1977 года в колонке «Математические игры» Мартина Гарднера в журнале Scientific American. Авторы предложили читателям расшифровать сообщение, зашифрованное с помощью RSA, пообещав награду в 100 долларов. Задача, известная как RSA-129, была решена только спустя 17 лет, в 1994 году, что продемонстрировало высокую надежность алгоритма на тот момент.
Математическая основа RSA
Безопасность RSA держится на сложности факторизации больших чисел.
Легко умножить два простых числа:
Где и — простые множители, а — их произведение.
Однако, если я дам вам число и попрошу найти два простых числа, которые при умножении дают этот результат, задача станет сложнее. А если числа будут состоять из сотен знаков, задача станет вычислительно неразрешимой для современных классических компьютеров за разумное время.
Основные операции
В RSA все вычисления происходят по модулю . Операция «по модулю» (обозначается как ) — это нахождение остатка от деления.
Пример:
Где — делимое, — делитель, а — остаток ().
#### Шифрование
Чтобы зашифровать сообщение (представленное как число), Алиса использует открытый ключ получателя (пару чисел и ) и вычисляет шифротекст :
Где: * — шифротекст (зашифрованное сообщение). * — исходное сообщение (число). * — открытая экспонента (часть открытого ключа). * — модуль (произведение двух больших простых чисел). * — операция взятия остатка от деления.
#### Расшифровка
Боб, получив , использует свой закрытый ключ (число ) для восстановления :
Где: * — восстановленное исходное сообщение. * — шифротекст. * — секретная экспонента (закрытый ключ). * — тот же самый модуль, что и при шифровании.
Магия заключается в том, что подобрать , зная только и , вычислительно невозможно, если достаточно велико (например, 2048 или 4096 бит).
Цифровая подпись
RSA обладает уникальным свойством: процессы шифрования и расшифровки зеркальны. Если зашифровать сообщение закрытым ключом, то расшифровать его можно открытым.
Это используется для цифровой подписи:
Итоги
* Симметричное шифрование требует безопасного канала для передачи ключа, что сложно реализовать в глобальной сети. * Асимметричное шифрование решает эту проблему, используя пару ключей: открытый (для всех) и закрытый (секретный). * Алгоритм RSA был создан в 1977 году Ривестом, Шамиром и Адлеманом и основан на сложности разложения больших чисел на простые множители. * Безопасность RSA гарантируется тем, что, зная произведение двух больших простых чисел (), практически невозможно найти сами эти числа. * RSA используется не только для шифрования данных, но и для создания цифровых подписей, подтверждающих авторство.