В этом репозитории находятся реализации лабораторных работ по курсу «Защита информации». Проект ориентирован на практическую реализацию криптографических алгоритмов и утилит в виде библиотек и отдельных программ, которые:
- поддерживают работу с большими целыми числами (длинная арифметика);
- покрывают алгоритмы от базовых (быстрое возведение по модулю, тесты простоты, НОД) до прикладных (RSA, ElGamal, шифр Шамира, электронные подписи, протоколы обмена ключами, ментальный покер и т.д.);
- предназначены для демонстрации, тестирования и учебного использования.
Примечание по требованию в задании: в тексте указано «операции с числами порядка 10!». Я интерпретировал это требование как необходимость поддержки длинной арифметики (например, 1024-битных чисел и выше), поскольку во всех лабораторных работах используются большие числа (ключи, модули и т.д.).
-
Длинная арифметика: Все реализации должны корректно работать с большими целыми числами (использовать встроенную поддержку bignum в выбранном языке или библиотеку — например,
BigInteger,gmp,Python int,java.math.BigInteger). -
Интерфейс: Каждая лабораторная должна иметь:
- библиотечную часть (функции/классы);
- CLI-обёртку для запуска из командной строки;
- тесты по основным сценариям;
-
Опции ввода/генерации: Реализовать и поддерживать оба режима:
- ввод параметров с клавиатуры;
- внутренняя генерация параметров (с возможностью генерировать требуемые простые числа и ключи, используя тест простоты).
Лаб.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 — Слепая подпись / Анонимное голосование
- Логическая разделённость: клиентская часть (формирование бюллетеня с помощью слепой подписи), серверная часть (проверка, подсчёт). Поддержка вывода всех необходимых чисел для отладки.