О проекте

Учебный сайт по курсу криптографии и теории информации: интерактивная лаборатория и справочные статьи.

Назначение

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

Как пользоваться лабораторией

  1. Откройте лабораторию и выберите алгоритм в окне выбора. Сменить его можно кнопкой «Алгоритм: … · изменить» рядом с заголовком.
  2. Для алгоритмов передачи введите сообщение и нажмите «Передать»: схема покажет результат на выходе источника, кодера, декодера и приёмника, а ниже появится пошаговый разбор.
  3. Для кодов Хэмминга и Адамара включите моделирование ошибок в канале и нажмите на блок, чтобы увидеть, где произошла ошибка и как декодер её исправил.
  4. Для шифра Эль-Гамаля задайте ключи вручную или сгенерируйте: «Случайные ключи» — маленькое учебное p, «Большое простое» — p заданной битности с доказательством простоты.
  5. В разделах по алгебре выберите пример во вкладках, измените параметры и нажмите «Решить».

Ссылка вида /lab?algorithm=hamming открывает лабораторию сразу на нужном алгоритме — её удобно давать в заданиях. Возможные значения: reverse, huffman, shannon, hamming, hadamard, elgamal, monoids, diophantine, congruences, residues.

Ограничения

Учебные реализации

Алгоритмы написаны для наглядности, а не для защиты реальных данных. В частности, шифр Эль-Гамаля шифрует каждый символ отдельно и работает в полной группе ℤₚ*, а размер ключа ограничен 1024 битами. Подробнее — в статье «Шифр Эль-Гамаля».

  • Длина сообщения в лаборатории ограничена, чтобы разборы оставались читаемыми, а сервер — отзывчивым.
  • Сервер не хранит введённые сообщения и ключи: каждый запрос обрабатывается независимо.

Технологии

  • Сервер — Python 3.12, FastAPI, шаблоны Jinja2.
  • Интерфейс — HTML, CSS и JavaScript без сторонних библиотек; сайт работает без подключения к внешним CDN.
  • Исходный код разделён на модули: transmission/ — источник, кодер, декодер, приёмник и алгоритмы кодирования; algebra/ — теория чисел и генерация простых; content/ — каталог статей и справочные данные.