97 lines
6.5 KiB
Markdown
97 lines
6.5 KiB
Markdown
# 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` для подробного вывода.
|
||
|
||
Алгоритм:
|
||
|
||
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
|