Форум программистов, компьютерный форум, киберфорум
Криптография
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9

RSA шифрование. Как правильно?

28.06.2015, 20:27. Показов 2862. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сначала немного о грустном (можно не читать).
Кликните здесь для просмотра всего текста
Как-то было у меня такое задание:

Было перехвачено зашифрованное сообщение. По данным разведки в нем содержится два слова: пароль и отзыв на русском языке для доступа на секретный объект. Также из открытых источников было установлено, что для шифрования использовался алгоритм RSA с открытым ключом (e, n).
Из других источников стало известно о наличии уязвимости в генераторе случайных простых чисел, используемом в момент создания криптосистемы. А именно, из-за ошибки в ПО генератора при задании параметров шифра были выбраны не слишком далекие друг от друга простые числа.
Используя эту информацию, необходимо взломать криптографическую систему RSA, найти секретный ключ и расшифровать сообщение.
Публичный ключ и зашифрованное сообщение:
(e, n) = (7, 1384229008335999500787886773947516718775 458375276829134498757)

1736164314502319024768, 1781594144997124173696, 1637563138325435542097, 1804688569158695124992, 1626909883459371532288, 34359738368, 1828039120816690000000, 1680776328907480889853, 1816331681783800622529, 1626909883459371532288, 1736164314502319024768
В задании, видимо, предлагалось найти числа p и q, которые дадут нам такой публичный ключ. И найдя эти числа, можно было бы получить приватный ключ и расшифровать сообщение.

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

Нет, я сначала попытался взломать сообщение по предложенному алгоритму, и даже сделал программу многопоточной чтобы быстрее вёлся перебор. Но спустя пару часов ожидания мне это надоело.

А сделал я намного проще. В перехваченном сообщении длина шифруемого блока равнялась 2 байтам (один символ в юникоде). Зная публичный ключ, почему бы не зашифровать им все доступные комбинации (а их всего 2^16=65535) и потом, сравнивать уже зашифрованные блоки?

Таким образом сообщение было расшифровано: "кобра тесак".

К сожалению, данное решение не было принято (задание сделано наполовину, не найден приватный ключ, решение найдено не тем способом).


Допустим есть ключ длиной 256 бит. Какой максимальной длинны можно зашифровать сообщение этим ключом? Сколько байт рекомендуется отводить для случайных чисел? (Например, есть сообщение "hello\0" длиной 6 байт, остальное будет занимать случайные числа?)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.06.2015, 20:27
Ответы с готовыми решениями:

XOR шифрование. Как правильно?
Недавно прочитал одну статью (Тривиальное шифрование во вредоносных файлах / Блог компании «Лаборатория Касперского» / Хабрахабр), где...

Шифрование RSA. Зашифровать ФИО этим методом (Звонов Сергей Александрович)
Помогите пожалуйста написать хотя бы листинг программы! блок-схему и принт - скрины попробую найти сам.

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

4
653 / 161 / 64
Регистрация: 08.04.2015
Сообщений: 411
29.06.2015, 05:28
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Нет, я сначала попытался взломать сообщение по предложенному алгоритму, и даже сделал программу многопоточной чтобы быстрее вёлся перебор. Но спустя пару часов ожидания мне это надоело.
А готовую тулзу взять? MSIEVE всего-то 20 секунд понадобилось, чтобы это число факторизовать.

Цитата Сообщение от Рыжий Лис Посмотреть сообщение
А сделал я намного проще. В перехваченном сообщении длина шифруемого блока равнялась 2 байтам (один символ в юникоде). Зная публичный ключ, почему бы не зашифровать им все доступные комбинации (а их всего 2^16=65535) и потом, сравнивать уже зашифрованные блоки?
А почему бы просто не извлечь корень 7-ой степени из каждого числа? Очевидно, что остаток от деления не требуется.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
29.06.2015, 08:24  [ТС]
Вопрос другой. Как правильно зашифровать сообщение.

Допустим есть ключ длиной 256 бит и сообщение длиной несколько КБ. На блоки какого размера разбивать данное сообщение?
0
653 / 161 / 64
Регистрация: 08.04.2015
Сообщений: 411
29.06.2015, 16:47
Сообщения - это числа от 0 до n-1. Исходя из этого и разбивать. При длинном ключе шифровать короткие блоки неэффективно + криптостойкость падает, сами же пример привели.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
29.06.2015, 18:32  [ТС]
Если уж цитировать википедию:
Данная схема на практике не используется по причине того, что она не является практически надежной (semantically secured). Действительно, односторонняя функция E(m) является детерминированной — при одних и тех же значениях входных параметров (ключа и сообщения) выдает одинаковый результат —, а это значит, что не выполняется необходимое условие практической (семантической) надежности шифра.
Возьмём, кусочек из готовой библиотеки:
Python
1
2
    key_bytes = common.bit_size(pub_key.n) // 8
    blocksize = key_bytes - 11 # keep space for PKCS#1 padding
Размер блока вычисляется как длина ключа в байтах минус 11. А эти 11 байт заполняются случайными данными.

Возможно в RFC 3447 есть ответ на интересующий меня вопрос.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.06.2015, 18:32
Помогаю со студенческими работами здесь

Не понимаю, как работает RSA
Здравствуйте. Такая проблема. Я знаю математический принцип, как работает RSA. Отрытым ключом являются одно число e , а также n. Однако,...

Как написать шифрование RSA на python без import RSA
Нужнен код без использование RSA библиотеки. Буду блогодарен!

Как поменять результат шифрование \ Метод шифрование RSA
Здравствуйте! Прошу помощи! В просторах интернета нашла одну статью в которой реализован метод шифрования RSA. Решила его опробовать, но...

RSA-шифрование. Зависает при больших числах P и Q. Как исправить?
Есть программа на C#, которая шифрует текст методом RSA. Но преподаватель требует в качестве P и Q использовать числа в несколько...

Как в php правильно считывать rsa/pem файлы?
Добрый день, Следуя данной инструкции php.net/manual/ru/function.openssl-pkcs12-read.php , создал файл egov/exapmle.pem с таким...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru