1. Главная
  2. Библиотека
  3. Информационные технологии
  4. Легенда Агент искусственного интеллекта шифрует исходящ...
Разбор задачи

Легенда Агент искусственного интеллекта шифрует исходящие сообщения с помощью классического (и слабого) алгоритма XOR с повторяющимся ключом. Секретный ключ из K байтов выбирается один раз. Для шифрования сообщения в открытом виде P(последовательности

  • Предмет: Информационные технологии
  • Автор: Кэмп
  • #Программирование (языки C++, Java, Python и др.)
  • #Алгоритмы и структуры данных
Легенда Агент искусственного интеллекта шифрует исходящие сообщения с помощью классического (и слабого) алгоритма XOR с повторяющимся ключом. Секретный ключ из K байтов выбирается один раз. Для шифрования сообщения в открытом виде P(последовательности

Условие:

Легенда
Агент искусственного интеллекта шифрует исходящие сообщения с помощью классического (и слабого) алгоритма XOR с повторяющимся ключом. Секретный ключ из K байтов выбирается один раз. Для шифрования сообщения в открытом виде P(последовательности байтов) каждый байт открытого текста подвергается операции XOR с байтом ключа, который циклически повторяет ключ:\ncipher[i] = plain[i] XOR key[i mod K]
Затем зашифрованный текст передается в виде шестнадцатеричной строки в нижнем регистре (две шестнадцатеричные цифры на байт).

Протокол имеет фатальный недостаток: каждое сообщение начинается с одной и той же фиксированной строки рукопожатия H (баннера или заголовка протокола). Вы знаете H, и вы знаете длину ключа K(с помощью K <= len(H)). Это классический пример атаки с известным открытым текстом: первые K байты открытого текста известны, чего достаточно для восстановления всего ключа.

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

Задача
Имея длину ключа K, известный префикс открытого текста H и M зашифрованные в шестнадцатеричном формате данные, восстановите K ключ в -байтах и ​​распечатайте полный расшифрованный открытый текст каждого сообщения.

Формат ввода
Первая строка содержит два целых числа K и M( 1 <= K <= 64, 1 <= M <= 100).
Вторая строка содержит известную строку рукопожатия H, приведенную дословно (она может содержать пробелы) с помощью K <= len(H) <= 1000.
Каждая из следующих M строк содержит один зашифрованный текст в виде шестнадцатеричной строки в нижнем регистре четной длины. Каждое сообщение занимает от K до 100000байтов (до 200000 шестнадцатеричных символов).
Формат вывода
Вывод M строк. Строка t — это расшифрованный открытый текст i t-го зашифрованного текста, выводимый в виде необработанного текста. Гарантируется, что каждый открытый текст состоит из печатных символов ASCII (байтов 32..126), возможно, включая пробелы.

Решение:

Для решения этой задачи воспользуемся свойством операции XOR: если C=PKC = P \oplus K, то K=CPK = C \oplus P. Поскольку нам известно начало открытого текста HH и соответствующий ему зашифрованный текст CC, мы можем легко восстановить ключ KK.

Дано

  • Длина ключа: KK
  • Известный префикс открытого текста: HH
  • Количество сообщений: MM
  • Зашифрованные сообщения: C1,C2,,CMC_1, C_2, \dots, C_M (в шестнадцатеричном виде)

Решение

  1. Восстановление ключа: Так как каждое сообщение начинается с HH, а ключ повторяется циклически, первые KK байт любого сообщения зашифрованы первыми KK байта...

Внутри — полный разбор, аргументация, алгоритм решения, частые ошибки и как отвечать на каверзные вопросы препода, если спросит

Попробуй решить по шагам

Попробуй один шаг и продолжи в режиме обучения или посмотри готовое решение

Какое свойство операции XOR используется для восстановления ключа в данной задаче?

Что нужно знать по теме:

Что нужно знать по теме

Алгоритм решения

Топ 3 ошибок

Что спросит препод

Выбери предмет