302
правки
Изменения
RSA
,Нет описания правки
{{Определение
|definition='''RSA''' (аббревиатура от фамилий Rivest, Shamir и Adleman) — криптографический алгоритм с открытым ключом, основывающийся на вычислительной сложности задачи факторизации больших целых чисел.}}
Криптосистема <tex>\mathtt{RSA }</tex> стала первой системой, пригодной и для шифрования, и для цифровой подписи.
==Реализация==
Алгоритм <tex>\mathtt{RSA }</tex> включает в себя четыре этапа: генерация ключей, передача ключей, шифрование и расшифрование.
Криптографические системы с открытым ключом используют так называемые [[Односторонние_функции_и_псевдослучайные_генераторы|односторонние функции]].
Под односторонностью понимается не теоретическая однонаправленность, а практическая невозможность вычислить обратное значение, используя современные вычислительные средства, за обозримый интервал времени.
В основу криптографической системы с открытым ключом <tex>\mathtt{RSA }</tex> положена сложность [[Разложение_на_множители_(факторизация)|задачи факторизации]] произведения двух больших простых чисел. Для шифрования используется операция возведения в степень по модулю большого числа. Для дешифрования (обратной операции) за разумное время необходимо уметь вычислять [[Функция_Эйлера|функцию Эйлера]] от данного большого числа, для чего необходимо знать разложение числа на простые множители.
{{Определение
|definition='''Возведение в степень по модулю''' (англ. ''modular exponentiation'') — это вычисление остатка от деления натурального числа <tex>b</tex> (основание), возведенного в степень <tex>n</tex> (показатель степени), на натуральное число <tex>m</tex> (модуль). Обозначается:
<tex>c\equiv b^{n} \pmod m</tex>}}
В криптографической системе с открытым ключом каждый участник располагает как '''открытым ключом''' (англ. ''public key''), так и '''закрытым ключом''' (англ. ''private key''). В криптографической системе <tex>\mathtt{RSA }</tex> каждый ключ состоит из пары целых чисел. Каждый участник создаёт свой открытый и закрытый ключ самостоятельно. Закрытый ключ каждый из них держит в секрете, а открытые ключи можно сообщать кому угодно или даже публиковать их. Открытый и закрытый ключи каждого участника обмена сообщениями в криптосистеме <tex>\mathtt{RSA }</tex> образуют «согласованную пару» в том смысле, что они являются взаимно обратными. То есть для любых допустимых пар открытого и закрытого ключей <tex>(p,s)</tex> существуют соответствующие функции шифрования <tex>E_p(x)</tex> и расшифрования <tex>D_s(x)</tex> такие, что для любого сообщения <tex>m \in M</tex>, где <tex>M</tex> — множество допустимых сообщений, <tex>m=D_s(E_p(m))=E_p(D_s(m)).</tex>
===Создание открытого и секретного ключей===
<tex>\mathtt{RSA}</tex>-ключи генерируются следующим образом:
# Выбираются два различных [[простые_числа|случайных простых числа]] <math>p</math> и <math>q</math> заданного размера (например, <tex>1024</tex> бита каждое).
#* Число <tex>e</tex> называется открытой экспонентой (англ. ''public exponent'')
#* Время, необходимое для шифрования с использованием [[Быстрое_возведение_в_степень|быстрого возведения в степень]], пропорционально числу единичных бит в <tex>e</tex>.
#* Слишком малые значения <tex>e</tex>, например 3, потенциально могут ослабить безопасность схемы <tex>\mathtt{RSA}</tex>.
# Вычисляется число <tex>d</tex>, [[Мультипликативность_функции,_свертка_Дирихле|мультипликативно]] обратное к числу <tex>e</tex> по модулю <tex>\varphi(n)</tex>, то есть число, удовлетворяющее сравнению:
#: <tex>d\cdot e \equiv 1 \pmod{\varphi(n)}.</tex>
#* Число <tex>d</tex> называется секретной экспонентой. Обычно, оно вычисляется при помощи [[Наибольший_общий_делитель|расширенного алгоритма Евклида]].
# Пара <tex>\left\{ e, n \right\}</tex> публикуется в качестве открытого ключа <tex>\mathtt{RSA }</tex> (англ. ''<tex>\mathtt{RSA }</tex> public key'').# Пара <tex>\left\{ d, n \right\}</tex> играет роль закрытого ключа <tex>\mathtt{RSA }</tex> (англ. ''<tex>\mathtt{RSA }</tex> private key'') и держится в секрете.
{{Определение
|definition='''Случайное простое число''' (англ. ''random prime numbers'') — в криптографии, простое число, содержащее в двоичной записи заданное количество битов <tex>k</tex>}}
===Передача ключей===
Предположим, что Боб хочет отправить Алисе информацию . Если они решат использовать <tex>\mathtt{RSA}</tex>, Боб должен знать открытый ключ Алисы для того чтобы зашифровать сообщение, а Алиса должна использовать свой закрытый ключ для расшифрования сообщения. Чтобы позволить Бобу отправлять свои зашифрованные сообщения, Алиса передает свой открытый ключ Бобу через надежный, но не обязательно секретный маршрут. Закрытый ключ Алисы никогда никому не передается.
===Шифрование===
==Применение==
Система <tex>\mathtt{RSA }</tex> используется для защиты программного обеспечения и в схемах цифровой подписи. Также она используется в открытой системе шифрования PGP и иных системах шифрования (к примеру, DarkCryptTC и формат xdc) в сочетании с симметричными алгоритмами.
Наиболее используемым в настоящее время является смешанный алгоритм шифрования, в котором сначала шифруется сеансовый ключ, а потом уже с его помощью участники шифруют свои сообщения симметричными системами. После завершения сеанса сеансовый ключ, как правило, уничтожается.
==Минусы==
Алгоритм <tex>\mathtt{RSA }</tex> намного медленнее, чем AES и другие алгоритмы, использующие симметричные блочные шифры.
При неправильной или неоптимальной реализации или использовании алгоритма возможны специальные криптографические атаки, такие как атаки на схемы с малой секретной экспонентой или на схемы с общим выбранным значением модуля.
Из-за низкой скорости шифрования (около 30 кбит/с при 512 битном ключе на процессоре 2 ГГц), сообщения обычно шифруют с помощью более производительных симметричных алгоритмов со случайным сеансовым ключом (например, AES, IDEA, Serpent, Twofish), а с помощью <tex>\mathtt{RSA }</tex> шифруют лишь этот ключ, таким образом реализуется гибридная криптосистема.
==См. также==
== Источники информации ==
* [https://en.wikipedia.org/wiki/RSA_<tex>\mathtt{RSA}</tex>_(cryptosystem) <tex>\mathtt{RSA }</tex> (cryptosystem)]* [https://ru.wikipedia.org/wiki/<tex>\mathtt{RSA }</tex> <tex>\mathtt{RSA}</tex>]
[[Категория: Алгоритмы и структуры данных]]
[[Категория: Криптографические алгоритмы]]