Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
tird — Инструмент стеганографического хранения и шифрования файлов | Kitploit
Инструменты/GitHubGitHub/hakavlad/tird
Инструменты шифрования/дешифрованияФорензикаСтеганографияВосстановление ДанныхКриптографияКонфиденциальность
GitHubhakavlad/tird

tird

Инструмент стеганографического хранения и шифрования файлов

Репозиторий
2222 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

🏠 Главная    📑 Спецификация    📜 man страница    📄 Параметры ввода    📖 Учебник    ❓ ЧаВо    📥 Установка


Логотип: визуализация случайных данных

tird и tirdFS

Releases PyPI

tird /tɪrd/ (акроним от "this is random data") — это инструмент шифрования файлов, который минимизирует метаданные и скрывает зашифрованные данные.

С помощью tird вы можете:

  1. Создавать файлы, заполненные случайными данными, для использования в качестве контейнеров или ключевых файлов.
  2. Перезаписывать содержимое блочных устройств и обычных файлов случайными данными для подготовки контейнеров или уничтожения остаточных данных.
  3. Шифровать содержимое файлов и комментарии с помощью ключевых файлов и паролей. Формат зашифрованных данных (криптоблоб) представляет собой заполненный равномерный случайный блок (PURB): он выглядит как случайные данные и имеет случайный размер. Это уменьшает утечку метаданных из формата файла и его длины, а также позволяет скрывать криптоблобы среди случайных данных.
  4. Создавать стеганографические (скрытые, необнаруживаемые) управляемые пользователем файловые системы (tirdFS) внутри файлов-контейнеров и блочных устройств. В отличие от VeraCrypt и Shufflecake, контейнеры tirdFS не содержат заголовков; пользователь указывает расположение данных внутри контейнера и отвечает за сохранение разделения этих областей. Любая область файла или блочного устройства, выглядящая как случайная, может использоваться в качестве контейнера.
  5. Предотвращать быстрый доступ к расшифрованным данным с помощью шифрования с временной задержкой.

tird обеспечивает встроенное правдоподобное отрицание, даже когда зашифрованные файлы хранятся вне контейнеров. Он также помогает противостоять атакам с принуждением законам о раскрытии ключей (криптоанализ с резиновым шлангом, xkcd 538).

[!WARNING] Перед использованием tird прочтите раздел «Предупреждения». Безопасность зависит не только от инструмента, но и от ваших действий: безопасное хранение ключей, работа в безопасной среде и избегание режима отладки с реальными данными.

Стабилизация формата и формальная спецификация запланированы на версию 1.0.0.

Цели

  1. Защита файлов: Обеспечить защиту отдельных файлов, включая:
    • Конфиденциальность и целостность с использованием аутентифицированного симметричного шифрования.
    • Минимизацию утечки метаданных, включая скрытие факта наличия зашифрованных данных.
    • Предотвращение или противодействие атакам с принуждением.
  2. Стабильный формат: Поддерживать стабильный формат зашифрованных данных без криптографической гибкости для долгосрочного хранения.
  3. Простота: Отдавать приоритет простоте и избегать разрастания функций; отказываться от реализации функций, не связанных напрямую с основными целями безопасности.

Возможности

  • Зашифрованные блоки в формате PURB: случайный размер и равномерно случайное содержимое; ограниченные метаданные (утекает только общий размер — никаких заголовков, типов или подсказок открытого текста).
  • Заполненные и зашифрованные комментарии: никаких подсказок в открытом виде о содержимом.
  • Встраивание скрытых данных (опционально): скрывать криптоблобы внутри случайных/зашифрованных контейнеров для правдоподобного отрицания.
  • Шифрование с временной задержкой (опционально): медленное офлайн-выведение ключа на основе PoW для задержки расшифровки (против принуждения).
  • Надёжное аутентифицированное шифрование: полностью фиксирующая, квантово-устойчивая AEAD ChaCha20-BLAKE2b.
  • Сильное растяжение ключа: Argon2id (профиль libsodium "sensitive") — 1 ГиБ памяти, 1 поток, 4 прохода (по умолчанию и минимум).
  • Произвольный ключевой материал: выводить ключи из паролей, файлов, блочных устройств или каталогов — порядок не важен.
  • CLI на основе подсказок: интуитивно понятный и интерактивный, не нужно запоминать флаги.
  • [TODO] Стабильный документированный формат: планируется для долгосрочного архивирования и совместимости.

Использование

Вам не нужно запоминать параметры командной строки для использования tird. Этот инструмент имеет CLI на основе подсказок: просто запустите его, выберите пункт меню и ответьте на последующие вопросы.``` $ tird

root@kitploit:~
                   MENU
———————————————————————————————————————————
0. Exit              1. Info & Warnings
2. Encrypt           3. Decrypt
4. Embed             5. Extract
6. Encrypt & Embed   7. Extract & Decrypt
8. Create w/ Random  9. Overwrite w/ Random
———————————————————————————————————————————

A0. SELECT AN OPTION [0-9]:

root@kitploit:~
## Параметры ввода

Существует 4 группы параметров ввода: A (Action), D (Data), K (Keys), P (Proceed). Они пронумерованы для удобства описания.```
+——————————————————————+————————————————————————+
| A0. SELECT AN OPTION | A. Select an action    |
+——————————————————————+————————————————————————+
| D1. INPUT FILE PATH  |                        |
| D2. COMMENTS         | D. Enter data,         |
| D3. OUTPUT FILE PATH |    data location,      |
| D4. OUTPUT FILE SIZE |    data size           |
| D5. START POSITION   |                        |
| D6. END POSITION     |                        |
+——————————————————————+————————————————————————+
| K1. KEYFILE PATH     | K. Enter values        |
| K2. PASSPHRASE       |    related to          |
| K3. TIME COST        |    key derivation      |
+——————————————————————+————————————————————————+
| P0. PROCEED?         | P. Confirm to continue |
+——————————————————————+————————————————————————+

A detailed description of these options with examples can be found здесь.

Полезная нагрузка

Полезная нагрузка, которая будет зашифрована при создании криптоблоба, состоит из:

  • Содержимое одного файла (опционально): Обычный файл или блочное устройство (целый диск/раздел). Если не указано, шифруется пустая полезная нагрузка.
  • Комментарии (опционально): Произвольная строка UTF‑8, до 1 КиБ. По умолчанию используется имя входного файла. Расшифрованные комментарии отображаются при расшифровке.

Указание полезной нагрузки в интерфейсе выглядит следующим образом:``` D1. FILE TO ENCRYPT (OPT): files.zip I: path: 'files.zip'; size: 2,824,230,648 B (2.6 GiB) D2. COMMENTS (DEFAULT='files.zip'): The X-Files, zip (секретные материалы) I: comments will be shown as ['The X-Files, zip (секретные материалы)']

root@kitploit:~
## Входной ключевой материал

`tird` предоставляет возможность использовать содержимое ключевых файлов и парольную фразу для получения одноразовых ключей.

- **Ключевые файлы (опционально):** Ноль, один или несколько путей к ключевым файлам; порядок ввода не имеет значения. Путь к ключевому файлу может быть:
  - <ins>Обычный файл</ins>. Содержимое ключевого файла будет хэшировано, и его дайджест будет использован для дальнейшего растяжения ключа и вывода ключа.
  - <ins>Блочное устройство</ins>. Обрабатывается так же, как обычный ключевой файл: содержимое будет хэшировано.
  - <ins>Каталог</ins>. Все файлы в каталоге будут хэшированы и использованы как ключевые файлы.
- **Парольная фраза (опционально):** До 2048 байт после Unicode [нормализации](https://www.unicode.org/reports/tr15/) (форма C); может быть опущена.

Указание IKM в интерфейсе выглядит следующим образом:```
K1. KEYFILE PATH (OPT): key 
    I: path: 'key'; size: 32 B
    I: reading and hashing contents of 'key'
    I: keyfile accepted
K1. KEYFILE PATH (OPT): 
K2. PASSPHRASE (OPT): 
K2. CONFIRM PASSPHRASE: 
    I: passphrase accepted

Формат зашифрованных данных

  • Формат PURB:
    • Данные, которые выглядят случайными и не содержат идентифицируемых заголовков; их невозможно отличить от случайных данных без соответствующих ключей. Это свойство позволяет скрывать криптоблобы среди других случайных данных.
    • Случайный размер: длина дополнения выбирается равномерно от 0% до 25% от размера недополненного криптоблоба (эквивалентно до 20% от конечного размера криптоблоба).
  • Комментарии дополняются (или усекаются) до фиксированного размера в 1 КиБ перед шифрованием, полностью скрывая их исходную длину.
  • Двусторонне применяемые соли: перезапись начала или конца криптоблоба (или хранение неполного криптоблоба) делает успешную дешифровку невозможной.
 Показать схему криптоблоба``` +————————————————————————————————————————————————————————+ | CSPRNG output: | | Salt for key stretching used with Argon2 (16 B) | +————————————————————————————————————————————————————————+ | ChaCha20 output: | | Encrypted pad_ikm (8 B) | +————————————————————————————————————————————————————————+ | CSPRNG/BLAKE2 output: | | Randomized padding (0-25% of the unpadded size) | | + MAC tag (32 B) | +————————————————————————————————————————————————————————+ | ChaCha20/BLAKE2 output: | | Encrypted payload file contents + MAC tags (0+ B) | +————————————————————————————————————————————————————————+ | ChaCha20/BLAKE2 output: | | Encrypted padded comments (1 KiB) + MAC tag (32 B) | +————————————————————————————————————————————————————————+ | CSPRNG output: | | Salt for pre‑hashing IKM used with BLAKE2 (16 B) | +————————————————————————————————————————————————————————+ ```

Для получения дополнительной информации обратитесь к спецификации.

Низкая наблюдаемость и минимизация метаданных

Хотя содержимое зашифрованного сообщения защищено, его размер, происхождение, назначение… не защищены. Данные скрыты, метаданные видны. Иногда этого достаточно, чтобы ваш враг раскрыл ваши секреты.

— Loup Vaillant

Мы убиваем людей на основе метаданных.

— Michael Hayden


Против
  • Формат PURB:
    • Зашифрованные файлы выглядят как случайные данные.
    • Зашифрованные файлы имеют рандомизированный размер: не раскрывают полезный размер данных.
    • Комментарии дополняются до постоянного размера, не раскрывая свой размер или наличие.
    • Не доказывает, что введённые ключи неверны.
    • CLI с приглашениями: отсутствие утечки использованных опций через историю оболочки.
    • Путь выходного файла задаётся пользователем и по умолчанию не связан с путём входного файла.
    • Опционально: сокрытие зашифрованных данных в контейнерах.

tirdFS — Управляемая пользователем стеганографическая файловая система

tird использует технику, которая описана следующим образом:

Сокрытие данных внутри зашифрованных данных или внутри случайных данных. Сообщение, которое нужно скрыть, шифруется, а затем используется для перезаписи части гораздо большего блока зашифрованных данных или блока случайных данных (нераскрываемый шифр, например одноразовый блокнот, генерирует шифротексты, которые выглядят совершенно случайными без закрытого ключа).

Вы можете шифровать файлы и встраивать криптоблобы в контейнеры, начиная с произвольных позиций. После записи криптоблоба вам необходимо запомнить его местоположение в контейнере (начальную и конечную позиции), которые будут использоваться позже для извлечения криптоблобов. Таким образом, вы можете создать tirdFS — скрытую, без заголовков, управляемую пользователем файловую систему внутри контейнера:

  • Она скрыта, потому что невозможно отличить случайные данные контейнера от данных криптоблоба, а также определить местоположение записанных криптоблобов без знания позиций и ключей.
  • Она без заголовков, так как контейнеры не содержат никаких заголовков; все данные о местоположениях криптоблобов должны храниться пользователем отдельно.
  • Начальная позиция криптоблоба в контейнере определяется пользователем, и пользователь должен хранить как начальную, так и конечную позиции отдельно от контейнера. Именно поэтому она называется управляемой пользователем файловой системой.

tirdFS не является монтируемой файловой системой с внутренними структурами метаданных. Это управляемая пользователем модель скрытого хранилища, построенная из независимо размещённых криптоблобов.

Любой файл, диск или раздел, размер которого превышает минимальный размер криптоблоба (1160 байт), может быть допустимым контейнером. Криптоблобы могут быть встроены в любую область.

Примеры допустимых контейнеров включают:

  1. Специально сгенерированные файлы со случайными данными.
  2. Области диска, содержащие случайные данные. Например, вы можете перезаписать диск случайными данными, отформатировать его в FAT32 или exFAT и использовать большую часть диска, оставив несколько десятков мегабайт с начала. Диск будет выглядеть пустым, если вы не добавите на него файлы.
  3. Зашифрованные тома LUKS.
  4. Контейнеры VeraCrypt, даже те, которые уже содержат скрытые тома.

Пример структуры контейнера:``` +—————————+—————————————+ <— Position 0 of the container | | | | | Random data | | | | | +—————————————+ <— Cryptoblob1 start position | Header- | | | less | Cryptoblob1 | | | | | Layer +—————————————+ <— Cryptoblob1 end position | | Random data | | Cake +—————————————+ <— Cryptoblob2 start position | | | | | Cryptoblob2 | | | | | +—————————————+ <— Cryptoblob2 end position | | Random data | +—————————+—————————————+

root@kitploit:~
**Пользовательский заголовок**

Отдельный пользовательский текстовый заголовок `tirdFS` может выглядеть следующим образом:```
[100000000:100345765] secret_video.mp4
[100345765:234765345] various_secrets.zip
[12654876456:14765345098] Epstein_files_part1.zip

То есть, он должен обычно содержать местоположение каждого криптоблоба в контейнере и краткий комментарий. Однако пользователь волен решать, как хранить позиции и что включать в такой заголовок.

Визуализация встраивания

Следующее изображение показывает, насколько трудно отличить одну случайную запись данных от другой, и процесс встраивания криптоблобов в контейнер.

 Показать изображения

Пустой контейнер со случайными данными: Контейнер

Один криптоблоб, встроенный в контейнер: Встроенный1

Два криптоблоба, встроенные в контейнер: Встроенный2

Три криптоблоба, встроенные в контейнер: Встроенный3

Анимация: визуализация встраивания: GIF: визуализация встраивания

Хранение и перенос скрытых зашифрованных данных

Носите повсюду. Это ваше право.

— Кайл Риттенхаус

Пожалуйста, посмотрите на следующий скриншот.

Скриншот

Похоже, что этот том объемом 16 ГБ содержит только один файл размером 8,7 МиБ. Правда ли это? Возможно, да, возможно, нет.

Файловая система сообщает нам, что здесь есть только один файл. Но действительно ли в томе только один файл? Мы не можем определить это с помощью файловой системы. Фактически, данные могут находиться за пределами файловой системы и быть необнаружимыми для инструментов файловой системы. Пространство размером 15,2 ГиБ, отмеченное как свободное, может быть занято скрытой файловой системой. Это «свободное» пространство может быть занято скрытыми зашифрованными данными.

Можем ли мы опровергнуть существование этих данных? Да, например, исследуя уровень энтропии этого свободного пространства с помощью binwalk. Низкая энтропия указывает на вероятное отсутствие скрытых данных. Высокая энтропия сама по себе не доказывает наличие скрытых зашифрованных данных. Области с высокой энтропией могут быть либо просто остаточными данными, либо скрытыми зашифрованными данными.

Если вы заинтересованы в сокрытии данных за пределами видимой файловой системы, то tird к вашим услугам, чтобы предоставить Плащ-невидимку для ваших файлов.

Шифрование с временной блокировкой (Time-lock Encryption)

Изображение TLE

Шифрование с временной блокировкой (TLE) может использоваться для предотвращения быстрого доступа злоумышленника к открытым текстам в случае компрометации IKM (например, при принуждении пользователя). В нашей реализации это фактически вывод ключа с временной блокировкой на основе PoW. Опция ввода «Time cost» указывает количество проходов Argon2. Если вы укажете достаточно большое количество проходов, выполнение займет значительное время. Однако злоумышленнику потребуется такое же время при использовании аналогичного оборудования. Выполнение Argon2 не может быть ускорено за счет распараллеливания, поэтому ожидается, что время, затраченное злоумышленником, будет примерно таким же, как и у защитника.

Эта реализация TLE работает офлайн, в отличие от tlock.

Установите желаемое значение TIME COST:``` K3. TIME COST (DEFAULT=4): 1000000 I: time cost: 1,000,000 W: decryption will require the same "TIME COST" value!

root@kitploit:~
**Правдоподобный TLE:** Противник не знает фактического значения временных затрат, поэтому вы можете правдоподобно исказить количество проходов. Противник не сможет опровергнуть ваше утверждение, пока не попытается расшифровать криптоблоб, используя указанное значение временных затрат.

## Параметры командной строки

`tird` не требует параметров командной строки для обычного использования.```
$ tird --help
tird v0.30.0
        A tool for encrypting files and hiding encrypted data.
        Homepage: https://github.com/hakavlad/tird

Usage:
    tird [--unsafe-debug] [--unsafe-decrypt]

    Start without options for normal usage.

Options:
    --help            print this help message and exit
    --unsafe-debug    enable unsafe debug mode
    --unsafe-decrypt  release plaintext even if MAC verification
                      failed (dangerous)

Examples:
    $ tird
    $ tird --unsafe-debug

Небезопасный режим отладки

[!WARNING] Режим отладки не предназначен для использования в производстве!

Запустите tird с опцией --unsafe-debug, чтобы заглянуть под капот во время работы программы.

Включение режима отладки дополнительно показывает:

  • Файловые операции:
    • Открытие и закрытие файловых дескрипторов.
    • Реальные пути к открытым файлам.
    • Перемещение файловых указателей.
  • Строки байтов, связанные с криптографическими операциями: соли, парольные фразы, дайджесты, ключи, nonce и теги.
  • Некоторую другую информацию, включая различные размеры.

Небезопасный режим расшифровки

[!WARNING] В этом режиме возвращаемый открытый текст может быть изменен или подменён злоумышленником!

В небезопасном режиме расшифровки tird выдаст открытый текст, даже если аутентификация не удалась. Используйте только в том случае, если вы ставите доступность выше целостности, когда не можете успешно расшифровать криптоблоб в обычном режиме.

Компромиссы и ограничения

  • tird не поддерживает:
    • Криптографию с открытым ключом.
    • Сжатие файлов.
    • Вывод в ASCII-армированном формате.
    • Коррекцию ошибок Рида–Соломона.
    • Разделение вывода на части.
    • Использование стандартных потоков для обработки файлов (не предназначено для автоматизированных скриптов).
    • Низкоуровневое чтение и запись блочных устройств в MS Windows. В результате эти устройства не могут использоваться как ключевые файлы, не могут быть перезаписаны, зашифрованы или встроены.
  • tird не предоставляет:
    • Графического интерфейса пользователя.
    • Генератора паролей.
  • tird не может обработать (зашифровать/встроить) более одного файла за один проход. Шифрование каталогов и нескольких файлов не поддерживается.
  • tird не очищает метаданные файловой системы (atime, mtime, ctime).
  • Скорость шифрования tird не очень высока (до 730 МиБ/с в моих тестах на современном оборудовании).

Предупреждения

Криптография может помочь, но она не спасёт вас от неправильного использования, уязвимостей, социальной инженерии или физических угроз.

— Loup Vaillant

DANGER MINES
  • ⚠️ Автор не имеет опыта в криптографии.
  • ⚠️ Код не покрыт автоматическими тестами.
  • ⚠️ tird не проходил независимый аудит безопасности людьми.
  • ⚠️ tird неэффективен в скомпрометированной среде; его выполнение в таких случаях может привести к катастрофическим утечкам данных.
  • ⚠️ tird вряд ли будет эффективен при использовании коротких и предсказуемых ключей.
  • ⚠️ tird не стирает свои конфиденциальные данные из памяти после использования; ключи могут оставаться в памяти после выхода из программы.
  • ⚠️ Конфиденциальные данные могут просочиться в область подкачки.
  • ⚠️ Временные метки файловой системы не очищаются — может произойти утечка служебных метаданных.
  • ⚠️ tird не сортирует дайджесты ключевых файлов и парольных фраз за константное время.
  • ⚠️ Перезапись содержимого файлов не гарантирует безопасное уничтожение данных на носителе.
  • ⚠️ Вы не можете доказать противнику, что ваши случайные данные не содержат зашифрованной информации.
  • ⚠️ tird защищает данные, а не пользователя; он не может предотвратить пытки, если вы находитесь под подозрением.
  • ⚠️ Вывод ключа потребляет 1 ГиБ ОЗУ, что может привести к проблемам с производительностью или сбоям в системах с низким объемом памяти.
  • ⚠️ Целостность/аутентичность выше доступности — изменение даже одного байта криптоблоба предотвращает расшифровку.
  • ⚠️ Разработка не завершена, и возможны проблемы с обратной совместимостью.

Требования

  • Python >= 3.9.2
  • cryptography >= 2.1 (предоставляет HKDF и быструю реализацию ChaCha20)
  • PyNaCl >= 1.2.0 (предоставляет быстрые реализации Argon2 и BLAKE2)
  • colorama >= 0.4.6 (специфично для Windows)

Документация

  • 📜 Справочная страница tird(1)
  • 📑 Спецификация
  • 📄 Параметры ввода
  • 📖 Учебник/демонстрация
  • ❓ Часто задаваемые вопросы/обоснование
  • 📥 Установка

TODO

Улучшить документацию.

Обратная связь

Пожалуйста, не стесняйтесь задавать вопросы, оставлять отзывы или предоставлять критику в разделе Обсуждения.

Скачать инструмент