Как сгенерировать ключи RSA: пример на малых числах
Дано: простые числа и , открытая экспонента , сообщение . Найти: открытый и закрытый ключи RSA, шифртекст и проверку расшифровкой.
Пара ключей собирается из четырёх чисел: модуль , значение функции Эйлера , открытая экспонента и обратная к ней по модулю закрытая экспонента . Ответ: открытый ключ , закрытый ключ , шифртекст . Калькулятор сверху пересчитает всю пару под другие простые и другое сообщение, ниже - решение по шагам.
Решение по шагам
Шаг 1. Модуль. Перемножаем простые:
Модуль публикуется открыто, а вот сами множители 43 и 59 с этого момента становятся секретом: именно из них считается всё остальное.
Шаг 2. Значение функции Эйлера. Для произведения двух различных простых оно считается по формуле:
Это число знает только владелец ключа. Тот, кто видит лишь , посчитать не может, не разложив модуль на множители.
Шаг 3. Проверка открытой экспоненты. Экспонента годится, если она взаимно проста с , то есть . Прогоняем алгоритм Евклида для пары 2436 и 13:
Последний ненулевой остаток равен единице, значит подходит. Подробный разбор самого алгоритма с делениями и коэффициентами Безу лежит в разборе как найти НОД двух чисел, здесь он нужен как проверка.
Шаг 4. Закрытая экспонента. Разворачиваем цепочку делений снизу вверх, выражая единицу через 13 и 2436:
Коэффициент при 13 и есть искомое: . Проверка занимает строчку: , то есть .
Шаг 5. Шифрование. Шифртекст считается как . Возводить 1234 в тринадцатую степень целиком нельзя - число не влезет ни в какой калькулятор, поэтому берём последовательные квадраты по модулю 2537:
| Степень | 1 | 2 | 4 | 8 |
|---|---|---|---|---|
| Остаток по модулю 2537 | 1234 | 556 | 2159 | 812 |
Показатель раскладывается в сумму степеней двойки: , поэтому перемножаем три остатка из таблицы:
Техника подробно разобрана в задаче как быстро возвести в степень - без неё ручной счёт в RSA невозможен.
Шаг 6. Проверка расшифровкой. Расшифровка устроена симметрично: . Показатель 937 в двоичной записи равен 1110101001, то есть девять возведений в квадрат и пять домножений - четырнадцать умножений по модулю. Результат: , исходное число восстановилось.
Ответ. Открытый ключ , закрытый ключ , шифртекст сообщения 1234 равен 2391, обратное преобразование даёт исходное 1234.
Формула: почему расшифровка возвращает исходное число
Всё держится на одном условии, наложенном при выборе :
В нашем случае : произведение 12181 ровно на единицу больше, чем пять раз по 2436. Подставим это в цепочку преобразований и посмотрим, что происходит с сообщением:
Дальше работает теорема Эйлера: если и взаимно просты, то . Скобка обращается в единицу, и справа остаётся само . Никакой магии в схеме нет: закрытая экспонента просто «доводит» показатель до величины, кратной , плюс один.
Отдельно стоит редкий случай, когда сообщение делится на или на . Тогда теорема Эйлера напрямую не применима, но равенство всё равно выполняется - это проверяется малой теоремой Ферма по каждому простому множителю отдельно и китайской теоремой об остатках. Практического значения этот случай не имеет: угадать кратное сообщение не проще, чем разложить модуль.
Как выбирать открытую экспоненту
Требование к ровно одно: и . Если общий делитель есть, обратного элемента не существует, и расширенный алгоритм Евклида честно вернёт вместо единицы этот делитель. Переключи график калькулятора в режим выбора экспоненты: зелёные столбики - кандидаты с НОД, равным единице, оранжевые не подходят.
Для отпадают все чётные числа, а также кратные 3, 7 и 29. Поэтому популярное здесь тоже пришлось бы отбросить: тройка делит 2436. Число 13 в этот список не попадает и годится.
На практике экспоненту не ищут перебором, а берут одну из двух: почти всегда, реже . Причина простая: в двоичной записи 65537 всего две единицы, поэтому шифрование стоит семнадцать умножений независимо от длины ключа. А вот маленьким быть не должен - при ключ восстанавливается атакой Винера за считанные секунды.
Что меняется на настоящих ключах
Числа 43 и 59 годятся только для тетради. В боевом ключе и - случайные простые примерно по 1024 бита, чтобы модуль вышел на 2048 бит. Ищут их так: генерируют случайное нечётное число нужной длины и проверяют вероятностным тестом, а перебор делителей до корня, описанный в разборе как проверить число на простоту, для таких размеров не годится совсем.
Второе отличие - вместо чаще берут функцию Кармайкла . Условие слабее, поэтому ищется в меньшем диапазоне и в среднем выходит короче, а расшифровка быстрее. Для нашей пары , и обратный к 13 по этому модулю - то же самое число 937: оно и так меньше 1218, выигрыша на учебных числах не видно. Третье - сообщение никогда не шифруют «как есть»: перед возведением в степень к нему добавляют случайное дополнение по схеме OAEP, иначе одинаковые сообщения давали бы одинаковые шифртексты.
Стойкость же целиком сводится к сложности разложения модуля. Зная и , любой посчитает и повторит шаг 4 - наш раскладывается перебором за доли секунды, о чём подробно в разборе как найти простые множители. Для 2048 бит классических методов не хватает, но квантовый алгоритм Шора сводит факторизацию к поиску периода и решает задачу за полиномиальное время - поэтому RSA и считают схемой с ограниченным сроком годности.
До появления асимметричной криптографии стойкость искали в длине ключа: у шифра Виженера ключ-слово растягивали на весь текст, и именно повторяемость ключа его и погубила.
Частые ошибки
- Считают от произведения, а не от множителей. Формула работает только для двух различных простых. Брать вместо 2436 - самая частая ошибка в контрольных, и дальше всё расчётное дерево уезжает.
- Берут . При совпадении множителей формула другая: , а сам модуль раскладывается извлечением квадратного корня. Простые обязаны быть разными.
- Ищут по модулю вместо . Обратный элемент к 13 берётся по модулю 2436, а не 2537. Число получится другое, и проверка расшифровкой не сойдётся.
- Не приводят отрицательный коэффициент. Расширенный алгоритм Евклида часто выдаёт со знаком минус; к нему нужно прибавить , чтобы попасть в диапазон от 1 до .
- Возводят в степень без приведения по модулю. Число имеет 41 знак. Остаток берут после каждого умножения, иначе даже учебный пример не считается.
- Шифруют сообщение, большее модуля. Условие обязательно: при расшифровка вернёт остаток , а не исходное число. Длинные сообщения режут на блоки.
FAQ
Какие числа входят в открытый ключ, а какие в закрытый? Открытый ключ - пара , её можно публиковать. Закрытый - пара . Простые , и значение уничтожают или хранят вместе с закрытым ключом: по любому из них восстанавливается за один прогон алгоритма Евклида.
Обязательно ли должно быть простым числом? Нет. Требуется только взаимная простота с . Само может быть составным, например , если не делится на 5. Простые значения берут потому, что для них проверка НОД сводится к одному делению.
Почему нельзя вычислить , зная только открытый ключ? Для поиска нужно , а для него - разложение на множители. Обратная задача к умножению двух больших простых чисел и есть узкое место: перемножить их легко, разложить произведение обратно - вычислительно тяжело.
Что будет, если два человека случайно возьмут одно и то же простое? Их модули и получат общий делитель, и алгоритм Евклида найдёт его мгновенно, вскрыв оба ключа. Такие коллизии в реальных наборах ключей находили массово, поэтому качество генератора случайных чисел здесь важнее длины ключа.
Коротко
- Взять два различных простых и и посчитать модуль : .
- Найти значение функции Эйлера и держать его в секрете.
- Выбрать открытую экспоненту так, чтобы : для алгоритм Евклида даёт единицу.
- Вычислить закрытую экспоненту как обратный элемент: , проверка .
- Шифровать как , расшифровывать как : сообщение 1234 превращается в 2391 и обратно.
Похожие задачи
Как найти обратное по модулю: расширенный алгоритм Евклида
Как найти обратное по модулю: разбор на числах 37 и 120, условие существования через НОД, таблица расширенного алгоритма Евклида, приведение коэффициента и проверка остатка.
Теория чисел/криптографияКак найти функцию Эйлера: разбор на числе 7560
Как найти функцию Эйлера: разбор числа 7560 по шагам, каноническое разложение, формула через произведение скобок по простым делителям, проверка мультипликативностью и теорема Эйлера.
Теория чисел/криптографияКак найти первообразный корень: критерий и пример
Как найти первообразный корень по модулю: функция Эйлера, критерий через её простые делители, проверка кандидатов 2, 3, 5 и 6 по модулю 41 и таблица индексов.
Теория чисел/криптографияКак решить систему сравнений: китайская теорема об остатках
Как решить систему сравнений x = 2 (mod 3), x = 3 (mod 5), x = 2 (mod 7): проверка взаимной простоты модулей, сборка ответа по китайской теореме об остатках и проверка подстановкой.
Теория чисел/криптографияКак решить сравнение по модулю: 42x = 30 (mod 78)
Как решить сравнение по модулю на примере 42x = 30 (mod 78): критерий разрешимости через НОД, число решений, сокращение сравнения вместе с модулем и все шесть классов вычетов.
Теория чисел/криптографияКак найти НОК двух чисел: два способа с примером
Как найти НОК двух чисел на примере 126 и 120: разложение на простые множители со старшими степенями, формула через НОД, проверка ответа и задача про шестерни с зубьями.