Расшифруйте сообщение число 13 зашифрованное алгоритмом rsa с открытым ключом 11 35

Обновлено: 04.07.2024

Задача, положенная в основу метода состоит в том, чтобы найти такую функцию y=f(x), чтобы получение обратной функции x=f-1(y) , было бы в общем случае очень сложной задачей (NP-полной задачей), однако, если знать некую секретную информацию, то сделать это существенно проще. Такие функции также называют односторонними функциями с лазейкой или потайным ходом. Например, получить произведение двух чисел n=p*q просто, а разложить n на множители, если p и q достаточно большие простые числа, сложно.

1. Первым шагом в использовании алгоритма RSA является генерация ключей. Для этого нужно:

2. Выбрать два очень больших простых числа p и q.

3. Вычислить произведение n= p*q.

4. Выбрать большое случайное число d, не имеющее общих сомножителей с числом (p-1)*(q-1).

5. Определить число e, чтобы выполнялось (e*d) mod ((p-1)*(q-1))=1.

Тогда открытым ключом будут числа e и n, а секретным ключом - числа d и n.

Теперь, чтобы зашифровать данные по известному ключу , необходимо сделать следующее:

· Разбить шифруемый текст на блоки, где i-й блок может быть представлен в виде числа 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), которые представляют собой часть исходного текста.

· Выбираем p=5 и q=11 (числа на самом деле должны быть большими).

· Определяем (p-1)*(q-1) = 40. Тогда d будет равно, например 7.

· Выберем e, исходя из (e*7) mod 40=1. Например, e=3.

· C1 = (13)mod 55 = 1

· C2 = (23)mod 55 = 8

· C3 = (33)mod 55 = 27

Теперь расшифруем эти данные, используя закрытый ключ .

· M1 = (17)mod 55 = 1

· M2 = (87)mod 55 = 2097152mod 55 = 2

· M3 = (277)mod 55 = 10460353203 mod 55 = 3

Таким образом, все, данные расшифрованы.

Компьютер, чьи процессы имеют 1024 страницы в своем адресном пространстве, хранит таблицы страниц в памяти. На чтение слова из таблицы страниц требуется 5 нс. Чтобы уменьшить затраты, в компьютере существует буфер быстрого преобразования адреса (TLB), содержащий 32 пары (виртуальная страница – физический страничный блок), который может выполнять поиск за 1 нс. При какой частоте обращений к памяти, успешно реализуемых в TLB, средние затраты будут ниже 2 нс?

RSA использует разложение больших чисел (несколько сот разрядов) на простые множители, что требует большого объема вычислений и эта особенность определяет стойкость данного шифра.

Первым этапом асимметричного шифрования является создание получателем шифрограмм пары ключей. Процедура создания ключей RSA заключается в следующем.

  1. Выбирается два простых числа p и q, например p = 7 и q = 13
  2. Вычисляется произведение n = p*q, в нашем примере n = 7*13 = 91 Вычисляется функция Эйлера φ(n)

В нашем примере φ(n) = (7-1)*(13-1) = 72. Функция Эйлера определяет количество целых положительных чисел, не превосходящих n и взаимно простых с n.

Справка. Целые числа называются взаимно простыми, если они не имеют никаких общих делителей, кроме 1.

Задание на самостоятельное выполнение

ВариантpqВариантpq
119 73 14 71 79
229 73 15 1943
317 29 1613 61
423 61 1741 79
513 31 1813 53
623 31 1959 61
753 73 2013 83
831 37 2113 19
917 37 2219 29
1023 79 2317 67
1113 41 2413 17
1223 41 2531 73
1317 41 2631 67

Указания. Создайте открытый и закрытый ключи при заданных в вашем варианте p и q. (см. таблицу простых чисел).

12 3 57 11 13 17 19 23
2931 3741 43 47 53 59 61 67
71 73 79 83 89 97 101 103 107 109

Для того, чтобы увидеть форму, вам необходимо установить Java плагин для вашего браузера и разрешить выполнение Java-апплетов.

Если Вы пользуетесь браузером IE9 с установленным Java плагином и апплет тем не менее не работает, то возможно, что Java-апплет фильтруется ActiveX Filtering, новой функцией в IE9. Для ее отключения выберите Сервис/Безопасность и снимите галочку с Фильтрация ActiveX.


Задание на самостоятельное выполнение

Задание на самостоятельное выполнение

ВариантКриптограммаВариантКриптограмма
11127, 1310, 347, 1, 655, 26114 2949, 4840, 3887, 4765, 875, 1
21, 1423, 1841, 254, 134, 77715 190, 522, 439, 497, 447, 1
317, 361, 339, 304, 469, 225 16466, 543, 472, 269, 163, 437
41071, 1, 606, 449, 1215, 472 171701, 199, 384, 2051, 2561, 330
5379, 1, 396, 46, 1, 14 18546, 680, 95, 62, 227, 100
6219, 40, 468, 545, 1, 82 19324, 2414, 615, 718, 2497, 1100
7481, 1939, 1, 1655, 1123, 2957 201005, 271, 266, 967, 1030, 961
8219, 205, 738, 894, 205, 1005 2176, 227, 148, 177, 174, 4
9427, 1, 499, 181, 232, 441 2289, 474, 187, 113, 1, 474
101198, 1592, 591, 1, 1064, 951 23322, 811, 573, 99, 1, 38
11191, 251, 479, 346, 1, 251 2476, 86, 152, 58, 142, 130
12520, 16, 633, 623, 10, 468 25445, 1483, 274, 1765, 233, 1154
13576, 142, 639, 421, 208, 608 261811, 1, 1235, 844, 866, 214

Дешифрируйте шифрограмму с помощью закрытого ключа. Для проверки правильности своих расчетов заполните форму

Тест 4.3. Расшифровка криптограммы

Для того, чтобы увидеть форму, вам необходимо установить Java плагин для вашего браузера и разрешить выполнение Java-апплетов.

Если Вы пользуетесь браузером IE9 с установленным Java плагином и апплет тем не менее не работает, то возможно, что Java-апплет фильтруется ActiveX Filtering, новой функцией в IE9. Для ее отключения выберите Сервис/Безопасность и снимите галочку с Фильтрация ActiveX.

Шифрование происходит из текста в hex. Дешифрование - из hex в текст. Ключи предварительно генерируются или вводятся в hex. Возможно, понадобится преобразование из base64 в текст.

RSA (Rivest-Shamir-Adleman) является одной из первых криптосистем с открытым ключом и широко используется для безопасной передачи данных. В такой криптосистеме ключ шифрования является открытым и отличается от ключа расшифровки, который хранится в секрете (private). В RSA эта асимметрия основана на практической сложности факторизации произведения двух больших простых чисел, "проблема факторинга". Аббревиатура RSA состоит из начальных букв фамилий Рона Ривеста, Ади Шамира и Леонарда Адлемана, которые впервые публично описали алгоритм в 1978 году. Клиффорд Кокс, английский математик, работающий в Британском разведывательном управлении правительственной связи (GCHQ), разработал эквивалентную систему в 1973 году, но это не было рассекречено до 1997 года.

RSA является относительно медленным алгоритмом, и из-за этого он реже используется для прямого шифрования пользовательских данных. Чаще всего RSA передает зашифрованные общие ключи для шифрования с симметричным ключом, который, в свою очередь, может выполнять массовые операции шифрования-дешифрования на гораздо более высокой скорости.

Вокруг алгоритмов шифрования с отрытым и закрытым ключом существует множество недопониманий и мистификаций. Здесь я хотел бы предельно коротко и наглядно, с конкретными числами и минимумом формул, показать, как это работает.

Я не вдаюсь в теорию (не очень понятно, на какой уровень подготовки читателя следует рассчитывать), но я уверен, что прочитав эту короткую иллюстрацию, любому человеку будет проще разобраться в формулах и строгих доказательствах.

Итак. Допустим, я хочу получить от вас некие данные. Мы с вам не хотим, чтобы эти данные узнал кто-то, кроме нас. И у нас нет никакой уверенности в надёжности канала передачи данных. Приступим.

Шаг первый. Подготовка ключей

Я должен проделать предварительные действия: сгенерировать публичный и приватный ключ.

  • Выбираю два простых числа. Пусть это будет p=3 и q=7 .
  • Вычисляем модуль — произведение наших p и q : n=p×q=3×7=21 .
  • Вычисляем функцию Эйлера: φ=(p-1)×(q-1)=2×6=12 .
  • Выбираем число e , отвечающее следующим критериям: (i) оно должно быть простое, (ii) оно должно быть меньше φ — остаются варианты: 3, 5, 7, 11, (iii) оно должно быть взаимно простое с φ ; остаются варианты 5, 7, 11. Выберем e=5 . Это, так называемая, открытая экспонента.

Мне нужно вычислить число d , обратное е по модулю φ . То есть остаток от деления по модулю φ произведения d×e должен быть равен 1. Запишем это в обозначениях, принятых во многих языках программирования: (d×е)%φ=1 . Или (d×5)%12=1 . d может быть равно 5 ( (5×5)%12=25%12=1 ), но чтобы оно не путалось с e в дальнейшем повествовании, давайте возьмём его равным 17. Можете проверить сами, что (17×5)%12 действительно равно 1 ( 17×5-12×7=1 ). Итак d=17 . Пара — это секретный ключ, его я оставляю у себя. Его нельзя сообщать никому. Только обладатель секретного ключа может расшифровать то, что было зашифровано открытым ключом.

Шаг второй. Шифрование

Полученные данные E=10 , вы отправляете мне.

Шаг третий. Расшифровка

Я получил ваши данные ( E=10 ), и у меня имеется закрытый ключ = .

В чём гарантия надёжности шифрования

Надёжность шифрования обеспечивается тем, что третьему лицу (старающемуся взломать шифр) очень трудно вычислить закрытый ключ по открытому. Оба ключа вычисляются из одной пары простых чисел ( p и q ). То есть ключи связаны между собой. Но установить эту связь очень сложно. Основной загвоздкой является декомпозиция модуля n на простые сомножители p и q . Если число является произведением двух очень больших простых чисел, то его очень трудно разложить на множители.

Постараюсь это показать на примере. Давайте разложим на множители число 360:

  • сразу ясно, что оно делится на два (получили 2)
  • оставшееся 180 тоже, очевидно чётное (ещё 2)
  • 90 — тоже чётное (ещё двойка)
  • 45 не делится на 2, но следующая же попытка оказывается успешной — оно делится на три (получили 3)
  • 15 тоже делится на 3
  • 5 — простое.

Мы на каждом шагу, практически без перебора, получали всё новые и новые множители, легко получив полное разложение 360=2×2×2×3×3×5

Давайте теперь возьмём число 361. Тут нам придётся помучиться.

  • оно не чётное
  • три — нет, не делится
  • пять (допустим, мы поступаем умно и перебираем только простые числа, хотя, на практике, поиск больших простых чисел, сам по себе, является сложной задачей) — не подходит
  • семь? — нет.
  • и только 19 даст нам ответ: 361=19×19.

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

А как это всё работает на практике?

Сперва сгенерируем ключи с чуть бо́льшими числами. Они не так наглядны, но позволят нам шифровать не только числа от нуля до 20.

Оттолкнёмся от пары простых чисел = . Пусть наш открытый ключ будет = , а закрытый = .

Мы готовы к шифрованию. Переведём наше слово в цифровое представление. Мы можем взять просто номера букв в алфавите. У нас получится последовательность чисел: 11, 17, 15, 19.

Мы можем зашифровать каждое из этих чисел открытым ключом = и получить шифровку 197, 272, 2, 304. Эти числа можно передать получателю, обладающему закрытым ключом = и он всё расшифрует.

Немного о сложностях

То есть мы можем добавить случайное число в начало и получить (299, 11, 17, 15, 19). После перемешивания получится: 299, 310, 4, 19, 38. После шифрования уже невозможно будет догадаться где была какая буква.

Детали и принципы формирования блоков можно почитать тут. Я же в этой заметке хотел рассказать только про RSA. Надесь, удалось.

Читайте также: