Алгоритм шифрования RSA
На данный момент асимметричное шифрование на основе открытого ключа RSA (расшифровывается, как Rivest, Shamir and Aldeman — создатели алгоритма) использует большинство продуктов на рынке информационной безопасности.
Его криптостойкость основывается на сложности разложения на множители больших чисел, а именно — на исключительной трудности задачи определить секретный ключ на основании открытого, так как для этого потребуется решить задачу о существовании делителей целого числа. Наиболее криптостойкие системы используют 1024-битовые и большие числа.
Рассмотрим алгоритм RSA с практической точки зрения.
- Возьмем два больших простых числа p and q.
- Определим n, как результат умножения p on q (n= p*q).
- Выберем случайное число, которое назовем d. Это число должно быть взаимно простым (не иметь ни одного общего делителя, кроме 1) с результатом умножения (p-1)*(q-1).
- Определим такое число е, для которого является истинным следующее соотношение (e*d) mod ((p-1)*(q-1))=1.
- Hазовем открытым ключем числа e и n, а секретным — d и n.
- разбить шифруемый текст на блоки, каждый из которых может быть представлен в виде числа M(i)=0,1,2. n-1( т.е. только до n-1).
- зашифровать текст, рассматриваемый как последовательность чисел M(i) по формуле C(i)=(M(I)^e)mod n.
Чтобы расшифровать эти данные, используя секретный ключ , необходимо выполнить следующие вычисления: M(i) = (C(i)^d) mod n. В результате будет получено множество чисел M(i), которые представляют собой исходный текст.
Следующий пример наглядно демонстрирует алгоритм шифрования RSA:
- Выберем p=3 and q=11.
- Определим n= 3*11=33.
- Hайдем (p-1)*(q-1)=20. Следовательно, d будет равно, например, 3: (d=3).
- Выберем число е по следующей формуле: (e*3) mod 20=1. Значит е будет равно, например, 7: (e=7).
- Представим шифруемое сообщение как последовательность чисел в диапозоне от 0 до 32 (незабывайте, что кончается на n-1). Буква А =1, В=2, С=3.
Теперь зашифруем сообщение, используя открытый ключ
C1 = (3^7) mod 33 = 2187 mod 33 = 9;
C2 = (1^7) mod 33 = 1 mod 33 = 1;
C3 = (2^7) mod 33 = 128 mod 33 = 29;
Теперь расшифруем данные, используя закрытый ключ .
M1=(9^3) mod 33 =729 mod 33 = 3(С);
M2=(1^3) mod 33 =1 mod 33 = 1(А);
M3=(29^3) mod 33 = 24389 mod 33 = 2(В);
При публикации статьи установка активной индексируемой гиперссылки на источник — сайт E-NIGMA.RU обязательна!
Все права защищены © 2006–2023
Что такое RSA?
Среди множества аббревиатур, связанных с компьютерами, есть отдельная каста акронимов — это термины, так или иначе связанные с вопросами информационной безопасности.
Как и у любой нормальной аббревиатуры, у RSA есть несколько вариантов расшифровок. Мы, как всегда, будем вести речь только об одном из них. RSA — это криптографический алгоритм с открытым ключом, название которого происходит от первых букв фамилий его создателей (Rivest, Shamir, Adleman). На сегодняшний день RSA является одним из самых популярных алгоритмов шифрования самых разнообразных данных, кроме того, его используют для цифровой подписи различных документов.
Для начала необходимо прояснить, что скрывается за словосочетанием «алгоритм с открытым ключом». Дело в том, что в таких системах шифрования используется два вида шифрующих ключей. Первый — это закрытый ключ, его используют при шифровании и дешифровании сообщения. Второй ключ — открытый, его можно передавать по незащищённым каналам связи, и используется он для того, чтобы можно было проверить достоверность электронной цифровой подписи. В основе подобных алгоритмов шифрования лежат односторонние функции — то есть, такие математические функции, которые являются однозначными (одному аргументу всегда соответствует одно-единственное значение такой функции), но которые при этом технически невозможно обратить, то есть вычислить по значению функции значение её аргумента.
В RSA используется факторизация простых чисел (разложение их на составные множители). Эта задача является, с точки зрения вычислений, односторонней, что и позволяет использовать её в алгоритме шифрования с открытым ключом. Алгоритм считается надёжным, когда берутся два случайных простых числа длиной не менее 512 битов каждое. Сами формулы, на которых базируется RSA-шифрование, приводить вряд ли имеет смысл, поскольку они достаточно сложны и вряд ли нужны каждому читателю.
Надёжность RSA во многом обеспечивается тем, что при использовании достаточно длинных чисел разложить их произведение на составные множители за приемлемое время пока что не удаётся, хотя и существует ряд атак, использующих специфичные просчёты при шифровании. Ожидается, что с созданием квантовых компьютеров от алгоритма RSA придётся отказаться, поскольку они будут в состоянии быстро раскладывать на множители длинные целые числа.
Какие математические функции используются в алгоритме шифрования rsa
Криптосистема [math]\mathtt[/math] стала первой системой, пригодной и для шифрования, и для цифровой подписи.
Реализация
Алгоритм [math]\mathtt[/math] включает в себя четыре этапа: генерация ключей, передача ключей, шифрование и расшифрование.
Криптографические системы с открытым ключом используют так называемые односторонние функции.
Определение: |
Односторонняя функция (англ. one-way function) — математическая функция, которая легко вычисляется для любого входного значения, но задача нахождения аргумента по заданному значению функции относится к классу NP-полных задач. |
Под односторонностью понимается не теоретическая однонаправленность, а практическая невозможность вычислить обратное значение, используя современные вычислительные средства, за обозримый интервал времени.
В основу криптографической системы с открытым ключом [math]\mathtt[/math] положена сложность задачи факторизации произведения двух больших простых чисел. Для шифрования используется операция возведения в степень по модулю большого числа. Для дешифрования (обратной операции) за разумное время необходимо уметь вычислять функцию Эйлера от данного большого числа, для чего необходимо знать разложение числа на простые множители. В криптографической системе с открытым ключом каждый участник располагает как открытым ключом (англ. public key), так и закрытым ключом (англ. private key). В криптографической системе [math]\mathtt[/math] каждый ключ состоит из пары целых чисел. Каждый участник создаёт свой открытый и закрытый ключ самостоятельно. Закрытый ключ каждый из них держит в секрете, а открытые ключи можно сообщать кому угодно или даже публиковать их. Открытый и закрытый ключи каждого участника обмена сообщениями в криптосистеме [math]\mathtt[/math] образуют «согласованную пару» в том смысле, что они являются взаимно обратными. То есть для любых допустимых пар открытого и закрытого ключей [math](p,s)[/math] существуют соответствующие функции шифрования [math]E_p(x)[/math] и расшифрования [math]D_s(x)[/math] такие, что для любого сообщения [math]m \in M[/math] , где [math]M[/math] — множество допустимых сообщений, [math]m=D_s(E_p(m))=E_p(D_s(m)).[/math]
Создание открытого и секретного ключей
[math]\mathtt[/math] -ключи генерируются следующим образом:
- Выбираются два различных случайных простых числа [math]p[/math] и [math]q[/math] заданного размера (например, [math]1024[/math] бита каждое).
- Вычисляется их произведение [math]n=p\cdot q[/math] , которое называется модулем.
- Вычисляется значение функции Эйлера от числа [math]n[/math] : [math]\varphi(n) = (p-1)\cdot (q-1).[/math]
- Выбирается целое число [math]e[/math] ( [math]1 \lt e \lt \varphi(n)[/math] ), взаимно простое со значением функции [math]\varphi(n)[/math] . Обычно в качестве [math]e[/math] берут простые числа, содержащие небольшое количество единичных бит в двоичной записи.
- Число [math]e[/math] называется открытой экспонентой (англ. public exponent)
- Время, необходимое для шифрования с использованием быстрого возведения в степень, пропорционально числу единичных бит в [math]e[/math] .
- Слишком малые значения [math]e[/math] , например [math]3[/math] , потенциально могут ослабить безопасность схемы [math]\mathtt[/math] .
- Вычисляется число [math]d[/math] , мультипликативно обратное к числу [math]e[/math] по модулю [math]\varphi(n)[/math] , то есть число, удовлетворяющее сравнению: [math]d\cdot e \equiv 1 \pmod.[/math] Примечание Сравнеие двух целых чисел по модулю натурального числа [math]m[/math] — математическая операция, позволяющая ответить на вопрос о том, дают ли два выбранных целых числа при делении на [math]m[/math] один и тот же остаток. Любое целое число при делении на [math]m[/math] дает один из [math]m[/math] m возможных остатков: число от [math]0[/math] до [math]m-1[/math] .
- Число [math]d[/math] называется секретной экспонентой. Обычно, оно вычисляется при помощи расширенного алгоритма Евклида.
- Пара [math]\left\< e, n \right\>[/math] публикуется в качестве открытого ключа [math]\mathtt[/math] (англ. [math]\mathtt[/math] public key).
- Пара [math]\left\< d, n \right\>[/math] играет роль закрытого ключа [math]\mathtt[/math] (англ. [math]\mathtt[/math] private key) и держится в секрете.
Определение: |
Случайное простое число (англ. random prime numbers) — в криптографии, простое число, содержащее в двоичной записи заданное количество битов. |
Передача ключей
Предположим, что Боб хочет отправить Алисе информацию . Если они решат использовать [math]\mathtt[/math] , Боб должен знать открытый ключ Алисы для того чтобы зашифровать сообщение, а Алиса должна использовать свой закрытый ключ для расшифрования сообщения. Чтобы позволить Бобу отправлять свои зашифрованные сообщения, Алиса передает свой открытый ключ Бобу через надежный, но не обязательно секретный маршрут. Закрытый ключ Алисы никогда никому не передается.
Шифрование
Предположим, Боб хочет послать Алисе сообщение [math]m[/math] . Сообщениями являются целые числа в интервале от [math]0[/math] до [math]n — 1[/math] , то есть [math]m \in \mathbb_[/math] . Алгоритм:
- Взять открытый ключ [math](e,n)[/math] Алисы
- Взять открытый текст [math]m[/math]
- Зашифровать сообщение с использованием открытого ключа Алисы: [math]c = E(m) = m^e \mod n ~~~~ (1)[/math]
Расшифрование
- Принять зашифрованное сообщение [math]c[/math]
- Взять свой закрытый ключ [math](d,n)[/math]
- Применить закрытый ключ для расшифрования сообщения: [math]m = D(c) = c^d \mod n ~~~~ (2)[/math]
Корректность схемы [math]\mathtt[/math]
Уравнения [math](1)[/math] и [math](2)[/math] , на которых основана схема [math]\mathtt
Действительно, для [math]\forall m \in \mathbb_[/math]
[math]\forall m \in \mathbb_: m^ \equiv m \pmod
[/math] .
Возможны два случая:
- [math]m \not\equiv 0 \pmod
[/math] .
Поскольку числа [math]e[/math] и [math]d[/math] являются взаимно обратными относительно умножения по модулю [math]\varphi(n)=(p-1)(q-1)[/math] , то есть
[math]ed=1+k(p-1)(q-1)[/math] для некоторого целого [math]k[/math] ,
[math]\begin m^ & \equiv m^ \right)\left( \right)> \pmod
\\ & \equiv m\left( > \right)^
\\ & \equiv m\left( 1 \right)^
\equiv m \pmod
\end[/math]
где второе тождество следует из теоремы Ферма.
- Рассмотрим второй случай:
[math]m^ \equiv 0 \pmod
\equiv m \pmod
[/math]
Таким образом, при всех [math]m[/math] выполняется равенство
[math]m^ \equiv m \pmod
[/math]
Аналогично можно показать, что:
[math]\forall m \in \mathbb_: m^ \equiv m \pmod[/math] .
Криптографическая стойкость
Стойкость алгоритма основывается на сложности вычисления обратной функции к функции шифрования
[math]c = E(m) = m ^ e \mod n[/math] .
Для вычисления [math]m[/math] по известным [math]c, e, n[/math] нужно найти такой [math]d[/math] , чтобы
[math]e \cdot d \equiv 1 \pmod,[/math]
Вычисление обратного элемента по модулю не является сложной задачей, однако злоумышленнику неизвестно значение [math]\varphi(n)[/math] . Для вычисления функции Эйлера от известного числа [math]n[/math] необходимо знать разложение этого числа на простые множители. Нахождение таких множителей и является сложной задачей, а знание этих множителей — «потайной дверцей» (англ. backdoor), которая используется для вычисления [math]d[/math] владельцем ключа. Существует множество алгоритмов для нахождения простых сомножителей, факторизации, самый быстрый из которых на сегодняшний день — общий метод решета числового поля, скорость которого для k-битного целого числа составляет
[math] \exp (( c + o(1))k^> \log^>k)[/math] для некоторого [math]c \lt 2[/math] .
В [math]2010[/math] году группе учёных из Швейцарии, Японии, Франции, Нидерландов, Германии и США удалось успешно вычислить данные, зашифрованные при помощи криптографического ключа стандарта [math]\mathtt[/math] длиной [math]768[/math] бит. Нахождение простых сомножителей осуществлялось общим методом решета числового поля. По словам исследователей, после их работы в качестве надежной системы шифрования можно рассматривать только [math]\mathtt[/math] -ключи длиной [math]1024[/math] бита и более. Причём от шифрования ключом длиной в [math]1024[/math] бит стоит отказаться в ближайшие три-четыре года. С [math]31[/math] декабря [math]2013[/math] года браузеры Mozilla перестали поддерживать сертификаты удостоверяющих центров с ключами [math]\mathtt[/math] меньше [math]2048[/math] бит.
Применение
Система [math]\mathtt[/math] используется для защиты программного обеспечения и в схемах цифровой подписи. Также она используется в открытой системе шифрования PGP [1] и иных системах шифрования (к примеру, DarkCryptTC [2] и формат xdc [3] ) в сочетании с симметричными алгоритмами.
Наиболее используемым в настоящее время является смешанный алгоритм шифрования, в котором сначала шифруется сеансовый ключ, а потом уже с его помощью участники шифруют свои сообщения симметричными системами. После завершения сеанса сеансовый ключ, как правило, уничтожается.
Алгоритм шифрования сеансового ключа выглядит следующим образом:
Шифрование
- Взять открытый ключ [math](e,n)[/math] Алисы
- Создать случайный сеансовый ключ [math]m[/math]
- Зашифровать сеансовый ключ с использованием открытого ключа Алисы: [math]c = E(m) = m^e \mod n[/math]
- Расшифровать сообщение [math]C[/math] с помощью сеансового ключа симметричным алгоритмом: [math]M_A = D_m(C)[/math]
Расшифрование
- Принять зашифрованный сеансовый ключ Боба [math]c[/math]
- Взять свой закрытый ключ [math](d,n)[/math]
- Применить закрытый ключ для расшифровывания сеансового ключа: [math]m = D(c) = c^d \mod n[/math]
- Зашифровать сообщение [math]M_A[/math] с помощью сеансового ключа симметричным алгоритмом: [math]C = E_m(M_A)[/math]
Минусы
Алгоритм [math]\mathtt[/math] намного медленнее, чем AES [4] и другие алгоритмы, использующие симметричные блочные шифры.
При неправильной или неоптимальной реализации или использовании алгоритма возможны специальные криптографические атаки, такие как атаки на схемы с малой секретной экспонентой или на схемы с общим выбранным значением модуля.
Из-за низкой скорости шифрования (около [math]30[/math] кбит/с при [math]512[/math] битном ключе на процессоре [math]2[/math] ГГц), сообщения обычно шифруют с помощью более производительных симметричных алгоритмов со случайным сеансовым ключом (например, IDEA [5] , Serpent [6] , Twofish [7] ), а с помощью [math]\mathtt[/math] шифруют лишь этот ключ, таким образом реализуется гибридная криптосистема.
См. также
Примечания
- ↑Wikipedia — PGP
- ↑Русскоязычная база знаний о Total Commander — DarkCryptTC
- ↑DarkCrypt IV description
- ↑Wikipedia — AES
- ↑Википедиа — IDEA
- ↑Википедиа — Serpent
- ↑Википедиа — Twofish
Источники информации
- [math]\mathtt[/math] (cryptosystem)
- [math]\mathtt[/math]
Криптосистема RSA Текст научной статьи по специальности «Математика»
Аннотация научной статьи по математике, автор научной работы — Чичикин Гордей Ярославович, Семёнов Дмитрий Андреевич
В данной статье рассматривается ассиметричное шифрование RSA , которая основывается на сложности задачи факторинга. Этот алгоритм по сей день используется в различных криптографических приложениях. Эта криптосистема первая стала пригодна для надежного шифрования и цифровой подписи одновременно. Особенность этого алгоритма в том, что открытые ключи можно передавать по незащищенным каналам связи.
i Надоели баннеры? Вы всегда можете отключить рекламу.
Похожие темы научных работ по математике , автор научной работы — Чичикин Гордей Ярославович, Семёнов Дмитрий Андреевич
Аналог системы шифрования RSA на платформе m2(Zn)
Разработка программы-тренажера для изучения асимметричного алгоритма шифрования RSA
Сравнительный анализ модифицированной постквантовой криптографической системы NTRUEncrypt и общепринятой криптосистемы RSA
Новая семантически стойкая система шифрования с открытым ключом на базе RSA
Цифровая подпись в криптосистемах с ключом общего пользования
i Не можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.
Текст научной работы на тему «Криптосистема RSA»
КРИПТОСИСТЕМА RSA 1 2 Чичикин Г.Я. , Семёнов Д.А.
1Чичикин Гордей Ярославович — студент;
2Семёнов Дмитрий Андреевич — студент, кафедра защиты информации, Институт комплексной безопасности и специального приборостроения, Российский технологический университет, г. Москва
Аннотация: в данной статье рассматривается ассиметричное шифрование RSA, которая основывается на сложности задачи факторинга. Этот алгоритм по сей день используется в различных криптографических приложениях. Эта криптосистема первая стала пригодна для надежного шифрования и цифровой подписи одновременно. Особенность этого алгоритма в том, что открытые ключи можно передавать по незащищенным каналам связи. Ключевые слова: RSA, шифрование, факторизация, цифровая подпись.
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 ) = где Я — функция Кармайкла. Это значение хранится в секрете.
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 ) дает
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. [Электронный ресурс]. Режим доступа: