Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Книга бельфер.docx
Скачиваний:
228
Добавлен:
20.09.2019
Размер:
9.74 Mб
Скачать

В.2. Алгоритм rsa

Один из алгоритмов с открытым ключом был разработан в 1978 году. Он назван по начальным буквам фамилий трёх разработчиков Массачусетского технологического института: RSA (Rivest, Shamir, Adleman). Этот метод к настоящему моменту выдерживает попытки взлома и считается очень прочным. На его основе построены многие практические системы безопасности. Главным недостатком шифрования с открытым ключом является его медленная работа по сравнению с алгоритмами симметричного шифрования. Поэтому шифрование/дешифрование сообщений обычно производится с помощью криптографии с общим ключом, передача этого ключа другому абоненту соединения с помощью асимметричной криптографии.

Для обеспечения достаточной защищённости в RSA требуется ключ длиной, по крайней мере, 1024 бита (против 256 бит в алгоритме AES с симметричными ключами). Опишем в общих чертах, как пользоваться алгоритмом RSA. Создаётся закрытый и открытый ключи абонента. Для этого:

  • Выбираем два больших простых числа p и q (обычно длиной 1024 бита). Целое число a>1 называется простым, если его делителями являются только числа ±1 и ±a.

  • Определяем значения n = pq и z = (p − 1)(q − 1).

  • Выбираем число d, которое является закрытым ключом абонента. Значение d должно быть взаимно простым с числом z.Целые числа d и z являются взаимно простыми, если они не имеют общих простых делителей, т.е. если их единственным общим делителем является 1. Например, числа 8 и 15 являются взаимно простыми, поскольку делителями числа 8 являются 1, 2, 4 и 8, а делителями числа 15-1, 3, 5 и 15, так, что 1 оказывается единственным числом, присутствующим в обоих списках.

  • Находим такое число e (которое является открытым ключом абонента), что остаток от деления произведения ed на число z равен 1, т.е. ed = 1(modz) или e = d − 1modz.

Можно определить ключи d и e в другой последовательности, т.е. сначала e, потом d. Тогда п.3 определяет число e, а п.4 – число d. После вычисления этих параметров можно начинать шифрование. Сначала разбиваем весь открытый текст (рассматриваемый в качестве битовой строки) на блоки так, чтобы каждое сообщение M попало в интервал 0<M<n.

Для того, чтобы зашифровать сообщение M вычисляем C = Me(modn). Чтобы расшифровать C и получить открытый текст, вычисляем M = Cd(modn). В этом случае e и d являются соответственно открытым и закрытым ключами получателя. Если абонент А отправляет сообщение М абоненту В, то e и d являются ключами абонента В. В качестве М обычно используют общий ключ симметричного шифрования. Асимметричная криптография позволяет осуществить обмен общими ключами по сети связи общего пользования. Шифрование всего сообщения с помощью алгоритма с открытым ключом имеет недостаток в низкой скорости, т.к. эта операция требует большой производительности процессора. Поэтому для шифрования сообщений используется симметричная криптография (с общим ключом). Поскольку длина общего ключа шифрования небольшая, асимметричная криптография позволяет произвести обмен этими ключами.

Можно показать, что для всех значений М в указанном диапазоне функции шифрования и дешифрации являются взаимно обратными. При этом сообщение М отправляется от абонента B абоненту A (т.е. сообщение шифруется C1 = Md(modn) закрытым ключом d и расшифровывается открытым ключом e абонента В). Здесь e и d являются ключами отправителя. В этом случае используются данные для электронного документообмена с помощью электронно-цифровой подписи. Приведём пример шифрования и дешифрования сообщения М соответственно открытым (e) и закрытым (d) ключами получателя B (рис. В.2). Сообщение передаётся отправителем A.

Исходные данные: p=17, q=11, M=88 (p и q – простые числа).

а) Находим n=pq=17•11=187, 0<M<n, z = (p − 1)(q − 1) = 160

б) Выбираем e=7 (взаимно простое число с z).

в) Определяем закрытый ключ d из выражения 7d = 1mod160 или d = 7 − 1mod160.

г) Получаем d=23.

Тогда C = 887mod187. Для упрощения таких задач, требующих возведения больших величин в большие степени, используются правила модульной арифметики.

Тогда C = 887mod187 = [(884mod187)(882mod187)(881mod187)]mod187

884mod187 = 59969536mod187 = 132

882mod187 = 7744mod187 = 77

881mod187 = 88

M = 1123mod187 = [(111mod187) (112mod187) (114mod187) (118mod187) (118mod187) = 88

Рис. В.2. Пример шифрования/дешифрования сообщения открытым/закрытым ключом получателя

Таким образом, открытый ключ состоит из пары (e, n), а закрытый ключ – из пары (d, n). В приведённом примере это соответственно (7, 187) и (23, 187). Надёжность метода обеспечивается сложностью нахождения множителей больших чисел. Если бы криптоаналитик мог разложить на множители открытое число n, он мог бы тогда найти значения p и q, а следовательно, и число z. После этого ключи e и d можно найти при помощи алгоритма Евклида. В настоящем материале этот алгоритм не приводится. Длина блока открытого текста при выборе больших p и q в алгоритме RSA больше, чем в случае симметричного шифрования. Если p и q порядка 2512, тогда n порядка 21024. В этом случае каждый блок для RSA мог бы содержать до 1024 бит, т.е. больше по сравнению с длинами блоков алгоритма DES (64 бита) или алгоритма AES (128 бит).