Files
StegoHackathonConsole/README.md

97 lines
6.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# StegoHackathon CLI
Консольный инструмент на C# для экспериментов с ассоциативной стеганографией: шифрование фрагмента книги, проверка ключа и высокопроизводительный перебор (взлом) стего-контейнера по известному тексту книги.
---
## Идея проекта
Проект реализует схему ассоциативной стеганографии на битовых векторах (10 эталонов), где каждый байт исходного текста кодируется через три стего-блока, соответствующие десятичным разрядам числа (09).
Ключ системы представляет собой набор битовых масок для каждого эталона, а сам стего-контейнер выглядит как «шумный» массив байтов без очевидной структуры.
Основная исследовательская идея:
- показать, как **спрятать фрагмент книги** в бинарный контейнер (encrypt);
- показать, как **корректно его восстановить** по ключу (verify);
- продемонстрировать, что при знании исходной книги и наличии стего-контейнера можно выполнить **оптимизированный многопоточный перебор смещений** и восстановить и **ключ**, и **сам фрагмент текста** (hack).
---
## Основные возможности
Консольное приложение `StegoHackathonConsole` поддерживает три режима работы:
### 1. `--mode encrypt` — шифрование фрагмента книги
- Читает текст книги из файла (`--book <книга.txt>`).
- Выбирает случайный фрагмент длиной примерно 200600 символов.
- Кодирует его в бинарный стего-контейнер с использованием класса `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` для подробного вывода.
Алгоритм:
1. Читает стего-контейнер и текст книги.
2. По длине контейнера вычисляет количество скрытых байт.
3. Разбивает контейнер на блоки фиксированной длины (каждый байт → 3 стего-блока).
4. Запускает многопоточный перебор всех возможных смещений в книге:
- для каждого смещения:
- рассматривает последовательность байт книги длиной, равной длине скрытого текста;
- для каждого байта вычисляет десятичные цифры (d2, d1, d0);
- по соответствующим стего-блокам и эталонам строит битовые маски для цифр 09;
- быстрыми побитовыми операциями (`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