Skip to content

Latest commit

 

History

7 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Лабораторные работы по «Защите информации»

Описание проекта

В этом репозитории находятся реализации лабораторных работ по курсу «Защита информации». Проект ориентирован на практическую реализацию криптографических алгоритмов и утилит в виде библиотек и отдельных программ, которые:

  • поддерживают работу с большими целыми числами (длинная арифметика);
  • покрывают алгоритмы от базовых (быстрое возведение по модулю, тесты простоты, НОД) до прикладных (RSA, ElGamal, шифр Шамира, электронные подписи, протоколы обмена ключами, ментальный покер и т.д.);
  • предназначены для демонстрации, тестирования и учебного использования.

Примечание по требованию в задании: в тексте указано «операции с числами порядка 10!». Я интерпретировал это требование как необходимость поддержки длинной арифметики (например, 1024-битных чисел и выше), поскольку во всех лабораторных работах используются большие числа (ключи, модули и т.д.).

Общие требования к коду

  1. Длинная арифметика: Все реализации должны корректно работать с большими целыми числами (использовать встроенную поддержку bignum в выбранном языке или библиотеку — например, BigInteger, gmp, Python int, java.math.BigInteger).

  2. Интерфейс: Каждая лабораторная должна иметь:

    • библиотечную часть (функции/классы);
    • CLI-обёртку для запуска из командной строки;
    • тесты по основным сценариям;
  3. Опции ввода/генерации: Реализовать и поддерживать оба режима:

    • ввод параметров с клавиатуры;
    • внутренняя генерация параметров (с возможностью генерировать требуемые простые числа и ключи, используя тест простоты).

Описание лабораторных

Лаб.1 — Криптографическая библиотека

  • Быстрое возведение по модулю: fast_pow(a, e, p).
  • Тест простоты Ферма: is_probable_prime_fermat(n, k).
  • Обобщённый алгоритм Евклида: extended_gcd(a, b) возвращает (g, x, y).
  • Возможности: ввод с клавиатуры, внутренняя генерация (включая генерацию простых с тестом Ферма).

Лаб.2 — Дискретный логарифм

  • Алгоритм "Шаг младенца — шаг великана" (Baby-step Giant-step): discrete_log(a, y, p).
  • Оценка трудоёмкости: ожидаемая сложность (O(\sqrt p \cdot \log^2 p)) (реализация согласно учебнику).

Лаб.3 — Диффи-Хеллман

  • Построение общего ключа: diffie_hellman(p, g, Xa, Xb).

Лаб.4 — Шифр Шамира

  • Шифрование/дешифрование произвольных файлов. Поддержка ввода/генерации параметров.

Лаб.5 — Шифр Эль-Гамаля

  • Шифрование/дешифрование файлов, генерация/ввод параметров.

Лаб.6 — RSA

  • Шифрование/дешифрование файлов, генерация ключей (p, q), хранение ключей в PEM-подобном формате.

Лаб.7 — Вернам

  • Псевдослучайный ключ (one-time pad) с возможностью генерации ключа через Диффи-Хеллман.

Лаб.8 — RSA-подпись

  • Подпись файлов; разрешено использовать сторонние хеш-функции (не слабее MD5). Подпись может храниться в отдельном файле или внутри подписанного файла.
  • Реализация: подпись каждого байта хеша отдельно (см. условие) либо обработка хеша как большого числа при длинной арифметике.

Лаб.9 — Подпись Эль-Гамаля

Лаб.10 — ГОСТ Р 34.10-94

Лаб.11 — FIPS 186

Лаб.12 — Ментальный покер

  • GUI, распределённый протокол для честной раздачи карт; пример: Texas Hold'em (каждому по 2 карты + 5 на стол).
  • Обоснование защищённости и честности протокола — в репозитории в виде отчёта.

Лаб.13 — Слепая подпись / Анонимное голосование

  • Логическая разделённость: клиентская часть (формирование бюллетеня с помощью слепой подписи), серверная часть (проверка, подсчёт). Поддержка вывода всех необходимых чисел для отладки.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages