From 6267449205f16a8cc0a45e9f1d5a40a1ac31d844 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D1=85=D0=B0=D0=B8=D0=BB=20=D0=9D=D0=B8=D0=BA?= =?UTF-8?q?=D0=BE=D0=BB=D0=B0=D0=B5=D0=B2?= Date: Thu, 11 Dec 2025 15:05:05 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 97 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 95 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b6d0fc1..a38dde9 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,96 @@ -# StegoHackathonConsole +# StegoHackathon CLI -Высокопроизводительный C# CLI для ассоциативной стеганографии: шифрование, проверка и многопоточное восстановление ключа методом перебора по известному тексту книги. \ No newline at end of file +Консольный инструмент на C# для экспериментов с ассоциативной стеганографией: шифрование фрагмента книги, проверка ключа и высокопроизводительный перебор (взлом) стего-контейнера по известному тексту книги. :contentReference[oaicite:0]{index=0} + +--- + +## Идея проекта + +Проект реализует схему ассоциативной стеганографии на битовых векторах (10 эталонов), где каждый байт исходного текста кодируется через три стего-блока, соответствующие десятичным разрядам числа (0–9). + +Ключ системы представляет собой набор битовых масок для каждого эталона, а сам стего-контейнер выглядит как «шумный» массив байтов без очевидной структуры. + +Основная исследовательская идея: + +- показать, как **спрятать фрагмент книги** в бинарный контейнер (encrypt); +- показать, как **корректно его восстановить** по ключу (verify); +- продемонстрировать, что при знании исходной книги и наличии стего-контейнера можно выполнить **оптимизированный многопоточный перебор смещений** и восстановить и **ключ**, и **сам фрагмент текста** (hack). :contentReference[oaicite:1]{index=1} + +--- + +## Основные возможности + +Консольное приложение `StegoHackathonConsole` поддерживает три режима работы: + +### 1. `--mode encrypt` — шифрование фрагмента книги + +- Читает текст книги из файла (`--book <книга.txt>`). +- Выбирает случайный фрагмент длиной примерно 200–600 символов. +- Кодирует его в бинарный стего-контейнер с использованием класса `AssocStego` и потока `AssocStegoStream`. +- Генерирует ключ (набор битовых масок для 10 эталонов). +- Сохраняет: + - стего-контейнер: `--out <имя>.bin` (по умолчанию `output.bin`); + - ключ: `<имя>.key.bin`. :contentReference[oaicite:2]{index=2} + +Фрагмент книги берётся из обычного текстового файла (например, художественного произведения). :contentReference[oaicite:3]{index=3} + +--- + +### 2. `--mode verify` — проверка / расшифровка по ключу + +Позволяет убедиться, что контейнер и ключ согласованы. + +- На вход подаются: + - `--data <файл.bin>` — стего-контейнер; + - `--key <файл.key.bin>` — файл с ключом. +- Программа инициализирует систему `AssocStego` с заданным ключом. +- Через поток `AssocStegoStream` последовательно читает скрытые байты. +- Восстановленный текст выводится в консоль. :contentReference[oaicite:4]{index=4} + +--- + +### 3. `--mode hack` — оптимизированный взлом стего-контейнера + +Режим, для которого проект и задумывался как демонстрация криптоанализа. + +На вход подаются: + +- `--data <файл.bin>` — стего-контейнер; +- `--book <книга.txt>` — текст книги, в которой прятался фрагмент; +- опционально `--threads ` — максимальное количество потоков; +- флаг `--verbose` для подробного вывода. :contentReference[oaicite:5]{index=5} + +Алгоритм: + +1. Читает стего-контейнер и текст книги. +2. По длине контейнера вычисляет количество скрытых байт. +3. Разбивает контейнер на блоки фиксированной длины (каждый байт → 3 стего-блока). :contentReference[oaicite:6]{index=6} +4. Запускает многопоточный перебор всех возможных смещений в книге: + - для каждого смещения: + - рассматривает последовательность байт книги длиной, равной длине скрытого текста; + - для каждого байта вычисляет десятичные цифры (d2, d1, d0); + - по соответствующим стего-блокам и эталонам строит битовые маски для цифр 0–9; + - быстрыми побитовыми операциями (`FastAndNotXor`, `FastPopCount`) отбрасывает заведомо неверные смещения; + - как только обнаружено смещение, дающее достаточно «информативные» маски (достаточное количество единичных битов), перебор останавливается. :contentReference[oaicite:7]{index=7} +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