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), потребление памяти, прогресс по смещениям.


Примеры использования

# Взлом стего-контейнера по известной книге
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
Description
Высокопроизводительный C# CLI для ассоциативной стеганографии: шифрование, проверка и многопоточное восстановление ключа методом перебора по известному тексту книги.
Readme Apache-2.0 340 KiB
Languages
C# 100%