Системы с открытым ключом: алгоритм шифрования RSA

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



Нижегородский государственный университет им. Н. И. Лобачевского

Факультет вычислительной математики и кибернетики

Кафедра информатизации и автоматизации научных исследований

Курсовая работа

Системы с открытым ключом: алгоритм шифрования RSA

Выполнил: Скульский М. А.

Научный руководитель: Фомина И. А.

Н. Новгород, 1997 г.

Оглавление

Введение

Понятие криптосистемы с открытым ключом

Описание алгоритма RSA

Возможные атаки на RSA

Практическая реализация RSA

Обоснование алгоритма

Комментарии к программе

Текст программы

Литература

Введение

Основной целью построения криптографических систем всегда была защита информации при ее передаче и хранении. Эта проблема остается актуальной и до сегодняшнего дня, однако же развитие вычислительных систем придало ей новое качество: вопрос уже не просто в том, чтобы, скажем, Александр мог послать письмо Борису, не опасаясь, что оно будет прочитано Сергеем. Сетевые компьютерные системы могут включать в себя сотни и даже тысячи пользователей; в такой ситуации классическая симметричная схема оказывается неэффективной. Новым требованием к криптосистемам также является обеспечение аутентификации сообщения - доказательство того, что Борис получил именно то сообщение, которое ему отправил Александр, и что оно не было подделано или изменено злоумышленником в процессе передачи. Кроме того, приходится мириться с тем, что к зашифрованной информации потенциально может иметь доступ довольно большое количество людей - например, маршрут любого сообщения, проходящего через Internet, в принципе невозможно предсказать, оно может пройти через несколько десятков узлов прежде чем попадет к своему адресату. Так что, если прежде наиболее надежным подходом к защите информации был все-таки амбарный замок, то теперь задача все более усложняется противоречивыми требованиями одновременно надежности и секретности передачи и легкости доступа к информации.

Традиционная криптографическая схема выглядит следующим образом. Александр и Борис оба знают некий ключ, с помощью которого они могут обмениваться зашифрованными сообщениями так, что любое третье лицо, даже если ему удастся перехватить шифровку, не сможет ничего в ней понять. Такая схема называется симметричной, так как и адресат, и отправитель используют один и тот же ключ для шифрования и дешифрования. Давайте попробуем применить ее к какой-нибудь простой распределенной задаче. Пусть у нас есть некое сетевое устройство - например, ядерная ракетная установка, - принимающая команды по сети. Конечно, не от всех, а только от имеющих соответствующие права доступа. Пусть у нашего устройства есть некий ключ, которым должны быть зашифрованы все команды, подаваемые на него. Этот ключ, так как систему мы предполагаем симметричной, необходимо сообщить всем пользователям. Теперь предположим, что Александр зашифровал сообщение Стреляй в Бориса и отправил его нашему устройству. Другой пользователь, Сергей, подкупленный Борисом, перехватил это сообщение и, зная ключ, с легкостью расшифровал его, сообщив о содержании Борису. Казалось бы, проблема легко решается введением разных паролей для разных пользователей. Ну а если доступ к данному устройству должен быть более или менее свободным?

Теперь давайте представим себе сеть из, например, ста пользователей и сервера баз данных. Между пользователями и сервером происходит некий обмен информацией, причем всем пользователям совершенно необязательно и, более того, нежелательно знать информацию, хранимую и запрашиваемую на сервере другими пользователями. Разумеется, необходимо защитить сам сервер - так, чтобы каждый пользователь имел доступ только к своей информации. Но ведь все это происходит в одной сети, и все данные передаются по одним и тем же проводам, а если это, скажем, что-нибудь типа Token Ring, то информация от сервера до владельца последовательно проходит через все станции, находящиеся между ними в кольце. Следовательно, ее необходимо шифровать. Можно опять ввести для каждого пользователя свой пароль, которым и шифровать весь информационный обмен с сервером. Но как отличить одного пользователя от другого? Один вариант - перед началом работы спрашивать у пользователя этот самый пароль и сверять с хранящимся на сервере. Но тогда он с легкостью может быть перехвачен в том же самом канале связи. Другой вариант - пароль не спрашивать, а верить тому, что пользователь говорит о себе. Так как пароль секретный, то даже сказав серверу Я - Александр!, злоумышленник не сможет расшифровать получаемые данные. Но зато он сможет получить столько материала для взлома шифра, сколько ему захочется - при этом часто можно предсказать ответ сервера на какой-то специфический вопрос и получить сразу шифр и соответствующий оригинальный текст. Согласитесь, это очень продвигает нас в взломе сервера.

Данная проблема носит название проблемы распределения ключей. Ее наличие делает симметричную схему неприспособленной для задач обмена данными с большим количеством пользователей, так как в ней для шифрования и дешифрования используется один и тот же ключ.

Понятие криптосистемы с открытым ключом

Концепция криптосистем с открытым ключом была предложена в 1976 г Уайтфилдо