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 <N>— максимальное количество потоков; - флаг
--verboseдля подробного вывода.
Алгоритм:
- Читает стего-контейнер и текст книги.
- По длине контейнера вычисляет количество скрытых байт.
- Разбивает контейнер на блоки фиксированной длины (каждый байт → 3 стего-блока).
- Запускает многопоточный перебор всех возможных смещений в книге:
- для каждого смещения:
- рассматривает последовательность байт книги длиной, равной длине скрытого текста;
- для каждого байта вычисляет десятичные цифры (d2, d1, d0);
- по соответствующим стего-блокам и эталонам строит битовые маски для цифр 0–9;
- быстрыми побитовыми операциями (
FastAndNotXor,FastPopCount) отбрасывает заведомо неверные смещения;
- как только обнаружено смещение, дающее достаточно «информативные» маски (достаточное количество единичных битов), перебор останавливается.
- для каждого смещения:
- При успехе:
- извлекает фрагмент книги по найденному смещению;
- формирует ключ (набор битовых масок) из полученных масок;
- сохраняет:
<имя_контейнера>.recovered.key.bin— восстановленный ключ;<имя_контейнера>.txt— восстановленный текст.
Выводится краткая статистика: время перебора, оценка скорости (ops/s), потребление памяти, прогресс по смещениям.
Примеры использования
# Взлом стего-контейнера по известной книге
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