# StegoHackathon CLI Консольный инструмент на C# для экспериментов с ассоциативной стеганографией: шифрование фрагмента книги, проверка ключа и высокопроизводительный перебор (взлом) стего-контейнера по известному тексту книги. --- ## Идея проекта Проект реализует схему ассоциативной стеганографии на битовых векторах (10 эталонов), где каждый байт исходного текста кодируется через три стего-блока, соответствующие десятичным разрядам числа (0–9). Ключ системы представляет собой набор битовых масок для каждого эталона, а сам стего-контейнер выглядит как «шумный» массив байтов без очевидной структуры. Основная исследовательская идея: - показать, как **спрятать фрагмент книги** в бинарный контейнер (encrypt); - показать, как **корректно его восстановить** по ключу (verify); - продемонстрировать, что при знании исходной книги и наличии стего-контейнера можно выполнить **оптимизированный многопоточный перебор смещений** и восстановить и **ключ**, и **сам фрагмент текста** (hack). --- ## Основные возможности Консольное приложение `StegoHackathonConsole` поддерживает три режима работы: ### 1. `--mode encrypt` — шифрование фрагмента книги - Читает текст книги из файла (`--book <книга.txt>`). - Выбирает случайный фрагмент длиной примерно 200–600 символов. - Кодирует его в бинарный стего-контейнер с использованием класса `AssocStego` и потока `AssocStegoStream`. - Генерирует ключ (набор битовых масок для 10 эталонов). - Сохраняет: - стего-контейнер: `--out <имя>.bin` (по умолчанию `output.bin`); - ключ: `<имя>.key.bin`. Фрагмент книги берётся из обычного текстового файла (например, художественного произведения). --- ### 2. `--mode verify` — проверка / расшифровка по ключу Позволяет убедиться, что контейнер и ключ согласованы. - На вход подаются: - `--data <файл.bin>` — стего-контейнер; - `--key <файл.key.bin>` — файл с ключом. - Программа инициализирует систему `AssocStego` с заданным ключом. - Через поток `AssocStegoStream` последовательно читает скрытые байты. - Восстановленный текст выводится в консоль. :contentReference --- ### 3. `--mode hack` — оптимизированный взлом стего-контейнера Режим, для которого проект и задумывался как демонстрация криптоанализа. На вход подаются: - `--data <файл.bin>` — стего-контейнер; - `--book <книга.txt>` — текст книги, в которой прятался фрагмент; - опционально `--threads ` — максимальное количество потоков; - флаг `--verbose` для подробного вывода. Алгоритм: 1. Читает стего-контейнер и текст книги. 2. По длине контейнера вычисляет количество скрытых байт. 3. Разбивает контейнер на блоки фиксированной длины (каждый байт → 3 стего-блока). 4. Запускает многопоточный перебор всех возможных смещений в книге: - для каждого смещения: - рассматривает последовательность байт книги длиной, равной длине скрытого текста; - для каждого байта вычисляет десятичные цифры (d2, d1, d0); - по соответствующим стего-блокам и эталонам строит битовые маски для цифр 0–9; - быстрыми побитовыми операциями (`FastAndNotXor`, `FastPopCount`) отбрасывает заведомо неверные смещения; - как только обнаружено смещение, дающее достаточно «информативные» маски (достаточное количество единичных битов), перебор останавливается. 5. При успехе: - извлекает фрагмент книги по найденному смещению; - формирует ключ (набор битовых масок) из полученных масок; - сохраняет: - `<имя_контейнера>.recovered.key.bin` — восстановленный ключ; - `<имя_контейнера>.txt` — восстановленный текст. Выводится краткая статистика: время перебора, оценка скорости (ops/s), потребление памяти, прогресс по смещениям. --- ## Примеры использования ```bash # Взлом стего-контейнера по известной книге dotnet run -- --mode hack --data stego_data.bin --book WarAndPeace.txt --threads 8 # Генерация стего-контейнера и ключа по книге dotnet run -- --mode encrypt --book WarAndPeace.txt --out stego_data.bin # Проверка / расшифровка контейнера по ключу dotnet run -- --mode verify --data stego_data.bin --key stego_data.key.bin