Пользователь запускает бот (команда /start)
Бот сохраняет пользователя в своей БД. В ответном сообщении бот запрашивает у пользователя прислать его открытый (публичный) GPG ключ
Пользователь отправляет свой открытый GPG ключ в виде текста.
Бот принимает публичный ключ, после чего
Получает из публичного ключа ФИО пользователя, его группу ННГУ и добавляет эту информацию в БД
Сохраняет сам публичный ключ в БД
Генерирует случайное сообщение (например использовать библиотеку Faker), сохраняет выбранное сообщение в БД
Шифрует сообщение при помощи публичного ключа
Отправляет зашифрованное сообщение пользователю и пишет сообщение, что ожидает получить расшифровку
Пользователь расшифровывает сообщение бота, и отправляет результат обратно боту в виде текстового сообщения
Бот получает от пользователя декодированное сообщение и сравнивает его с исходным сообщением из БД. Если сообщения сходятся, то поздравляет пользователя. Так же записывает в БД успешный статус проверки (задание принято). Если результат не сошлись, то сообщает об этом пользователю и ожидает снова дешифрованное сообщение.