необходимо решить задачу по применению pygost в python

Задание по расшифровке базового сообщения

Задача: Расшифруйте сообщение A3D9F1C8B0E5A3D9 (hex), зашифрованное по ГОСТ 28147-89 в режиме простой замены. Ключ: 4E921FA57B30C8D94E921FA57B30C8D9 (32 байта).

Теория: ГОСТ использует 64-битные блоки и 256-битные ключи. Дешифрование требует обратного порядка подключей.

Подсказки:

  1. Используйте библиотеку pygost.
  2. Дополнение открытого текста — нулевые байты.

Решение:

from pygost import gost3412
key = bytes.fromhex("4E921FA57B30C8D94E921FA57B30C8D9")
ciphertext = bytes.fromhex("A3D9F1C8B0E5A3D9")
decrypted = gost3412.ECB(key).decrypt(ciphertext)
print(decrypted.decode())  # Ответ: HELLOW\x00\x00

Есть проблемы с нахождением и установкой нужной версии библиотеки (для выполнения использую версию с репозитория mosquito) и выборе метода. Преподаватель утверждает что код, метод (Магма из госта 3412), ключ и шифр являются верными и как минимум 3 человека смогли верно решить задачу. Были попытки подгонять ответы под разные стандарты, например:

  1. Поменять метод ECB(key) на GOST3412Magma(key) который есть в библиотеке. Ошибка bytearray index out of range
  2. Импортировать ГОСТ 28147 для метода ECB, но в ECB надо передать еще один аргумент которого у нас нет.

Преподаватель требует для выполнения использовать метод Магма и именно библиотеку pygost. Как этого достичь преподаватель не объяснил и не объяснит.


Ответы (1 шт):

Автор решения: Pak Uula

В вашем вопросе вопросов больше, чем вы думаете.

Во-первых, что такое "библиотека pygost"? То, что лежит в PyPy - просто заглушка без кода. При попытке установить pip install pygost выбрасывает исключение RuntimeError: You are trying to install a stub package pygost. Maybe you are using the wrong pypi?

Я взял pygost из гугла: https://github.com/mosquito/pygost Но там другие интерфейсы.

Откуда вы взяли ту библиотеку, для которой написан ваш пример?

Во-вторых, невооруженным глазом видно, что коль скоро от вас требуют ГОСТ 28147-89, то from pygost import gost3412 здесь точно не подходит. Доложно быть что-то вроде from pygost import gost28147

В-третьих и в главных, вас явно обманули составители задания, написав Ключ: 4E921FA57B30C8D94E921FA57B30C8D9 (32 байта). Вы удивитесь, но строка из 32-х букв задаёт 16 байтов. В вашем ключе не хватает ещё 32-х шестнадцатиричных цифр. Поэтому ваша задача принципиально неразрешима - крайне маловероятно подобрать недостающие 16 байтов ключа за оставшееся время существования вселенной.

Исправьте ваш вопрос:

  • укажите детали установки библиотеки pygost
  • и приведите правильный 32-х байтовый ключ.
→ Ссылка