КРИПТОСИСТЕМА RSA 1 2 Чичикин Г.Я. , Семёнов Д.А.
1Чичикин Гордей Ярославович - студент;
2Семёнов Дмитрий Андреевич - студент, кафедра защиты информации, Институт комплексной безопасности и специального приборостроения, Российский технологический университет, г. Москва
Аннотация: в данной статье рассматривается ассиметричное шифрование RSA, которая основывается на сложности задачи факторинга. Этот алгоритм по сей день используется в различных криптографических приложениях. Эта криптосистема первая стала пригодна для надежного шифрования и цифровой подписи одновременно. Особенность этого алгоритма в том, что открытые ключи можно передавать по незащищенным каналам связи. Ключевые слова: RSA, шифрование, факторизация, цифровая подпись.
УДК 004.031.2
RSA (Rivest-Shamir-Adleman) является одной из первых криптосистем с открытым ключом, используемый для безопасной передачи данных. В криптосистеме ключ шифрования является открытым (public) и отличается от ключа дешифрования тем, что хранится в секрете (private). Ассиметрия в RSA основана на практической трудности факториала произведения двух больших простых чисел, "задачи факторинга". Аббревиатура состоит из начальных букв фамилий Рона Ривеста (Rivest), Ади Шамира(Shamir) и Леонарда Адлемана (Adelman), которые впервые опубликовали алгоритм в 1978 году
Пользователь RSA создает и публикует открытый ключ на основе двух больших простых чисел, а также вспомогательное значение. Простые числа должны быть засекречены. Любой может использовать открытый ключ для шифрования сообщения.
Из-за этого он реже используется для прямого шифрования пользовательских данных. Чаще всего RSA передает зашифрованные общие ключи для симметричной криптографии ключей, которые, в свою очередь, могут выполнять массовые операции шифрования-дешифрования с гораздо большей скоростью.
Идея асимметричной криптосистемы с открытым и закрытым ключами принадлежит Уитфилду Диффи и Мартину Хеллману, которые опубликовали эту концепцию в 1976 году. [1]
Основным принципом RSA является наблюдение, что практически найти три очень больших положительных целых числа e, d и n, таких, что с модулярной экспоненцией для всех целых чисел m (с 0 < m < n): (me)d = m(modn)
и что, даже зная e и n или даже m, может быть чрезвычайно трудно найти d.Кроме того, для некоторых операций удобно, что порядок двух экспонент может быть изменен и что это отношение также подразумевает: (md)e = m(modn)
Ключи для алгоритма RSA генерируются следующим образом: 1. Выбрать два различных простых числа p и q.
• В целях безопасности целые числа p и q следует выбирать случайным образом, и они должны быть одинаковыми по величине, но отличаться по длине на несколько цифр, чтобы сделать факторинг сложнее. Простые целые числа можно эффективно найти с помощью теста на примитивность.
2. Вычислить п = рq.
• n используется в качестве модуля как для открытого, так и для закрытого ключей. Его длина, обычно выражаемая в битах, является длиной ключа.
3. Вычислить Я (п) = НОК( (р ) , (q) ) = НОК(р — 1 , q — 1 ) = где Я - функция Кармайкла. Это значение хранится в секрете.
4. Выберите целое число e, такое, что 1 < е < Я (п),НОД(е ,Я (п) ) = 1 ; т.е. е и являются копримами.
5. Определить d как d = е —1 (то d Я (п) ) ; то есть d-модулярный мультипликативный обратный от e по модулю X (n).
Это означает: решить для D уравнение d • е = 1 (т о d Я (п) ) .
Наличие е короткой длины бита и небольшого веса Хэмминга приводит к более эффективному шифрованию - чаще всего е= 2 1 6 + 1 = 65,5 3 7. Однако в некоторых настройках было показано, что гораздо меньшие значения е (например, 3) менее безопасны. е освобождается как показатель открытого ключаЛ хранится как показатель частного ключа. Открытый ключ состоит из модуля n и открытого (или шифрования) показателя е. Закрытый ключ состоит из частного (или расшифровочного) показателя D, который должен храниться в секрете. р , q и Я (п) также должны храниться в секрете, поскольку их можно использовать для вычисления .
В оригинальной работе RSA для вычисления частного показателя d используется функция Эйлера е вместо X (п) . Поскольку (п) всегда делится на Я (п) , алгоритм также работает. Таким образом, любое d, удовлетворяющее d • е = 1 (то d (п) ) , также удовлетворяет d • е=(modX(n)). Однако вычисление d по модулю Ф (n) иногда дает результат, который больше, чем необходимо (например, d>X(n)). Любые "негабаритные" частные показатели, не удовлетворяющие этому критерию, всегда могут быть уменьшены по модулю X(n) для получения меньшего эквивалентного показателя.
Поскольку любые общие факторы (р - 1 ) и (q - 1 ) присутствуют в факторизации рекомендуется,
чтобы и имели только очень малые общие факторы, если они есть,
кроме необходимых двух.
Предположим, Боб хочет послать информацию Алисе. Если они решат использовать RSA, Боб должен знать открытый ключ Алисы для шифрования сообщения, а Алиса должна использовать свой закрытый ключ для расшифровки сообщения. Чтобы Боб мог отправлять свои зашифрованные сообщения, Алиса передает Бобу свой открытый ключ надежным, но не обязательно секретным
путем. Закрытый ключ Алисы никогда не распространяется.
После того, как Боб получит открытый ключ Алисы, он может отправить сообщение M Алисе. Для этого он сначала превращает M в целое число т, такое, что , используя согласованный обратимый протокол, известный как схема заполнения. Затем он вычисляет шифротекст с, используя открытый ключ Алисы е, соответствующий^ = шето d (п)
Это можно сделать достаточно быстро, даже для 500-битных чисел, используя модульное возведение в степень.
Алиса может восстановить m из с, используя ее показатель частного ключа d путем вычисления: cd = (m е) d = m (то d п)
Учитывая m, она может восстановить исходное сообщение M, изменив схему заполнения
Вот пример шифрования и дешифрования RSA. Параметры, используемые здесь, искусственно малы, но можно также использовать OpenSSL для генерации и изучения реальной пары клавиш.
1. Выберите два различных простых числа, например р = 6 1 и q = 5 3
2. Вычислить п = 61 * 5 3 = 32 3 3 давать
3. Вычислить функцию Кармайкла, X (п) = НОК (П — 1 , м — 1 ) дает
4. Выбрать любое число 1 < е < 780, которое соответствует 780. Выбор е в качестве простого числа оставляет нам только проверить, что e не является делителем .
Пусть e=17,
5. Вычислить d, е (mo d X (п) ) , дающий, d = 4 1 3 d * е = 1 то d X (п) , 4 1 3 * 1 7 = 1 то d 780Открытый ключ (п = 32 3 3, е = 1 7). Для дополненного сообщения открытого текста m функция шифрования с (т) = т1 7 то d 32 3 3
Закрытый ключ (n = 3233,d = 413)Для зашифрованного шифротекста c функция расшифровки т (с) = с4 1 3то d32 3 3 Например, чтобы зашифровать m = 65, мы вычисляем : с=6 5 1 7 mod 32 3 3 = 2 79 0. Чтобы расшифровать c = 2790, мы вычисляем :
Оба эти расчета могут быть эффективно вычислены с помощью квадрата и умножены по алгоритму модульного возведения в степень. В реальных ситуациях выбранные простые числа были бы намного больше; в нашем примере было бы тривиально разложить N, 3233 (полученные из открытого ключа) обратно на простые числа p и q. e, также из открытого ключа, затем инвертируется, чтобы получить d, таким образом, приобретая закрытый ключ.
Список литературы
1. [Электронный ресурс]. Режим доступа: http://people.csail.mit.edu/rivest/Rsapaper.pdf
(дата обращения 18.04.2019).
2. [Электронный ресурс]. Режим доступа:
https://people.csail.mit.edu/rivest/pubs/ARS03.rivest-slides.pdf (дата обращения
30.04.2019).