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

tird и tirdFStird /tɪrd/ (акроним от "this is random data") — это инструмент шифрования файлов, который минимизирует метаданные и скрывает зашифрованные данные.
С помощью tird вы можете:
tirdFS) внутри файлов-контейнеров и блочных устройств. В отличие от VeraCrypt и Shufflecake, контейнеры tirdFS не содержат заголовков; пользователь указывает расположение данных внутри контейнера и отвечает за сохранение разделения этих областей. Любая область файла или блочного устройства, выглядящая как случайная, может использоваться в качестве контейнера.tird обеспечивает встроенное правдоподобное отрицание, даже когда зашифрованные файлы хранятся вне контейнеров. Он также помогает противостоять атакам с принуждением законам о раскрытии ключей (криптоанализ с резиновым шлангом, xkcd 538).
[!WARNING] Перед использованием
tirdпрочтите раздел «Предупреждения». Безопасность зависит не только от инструмента, но и от ваших действий: безопасное хранение ключей, работа в безопасной среде и избегание режима отладки с реальными данными.
Стабилизация формата и формальная спецификация запланированы на версию 1.0.0.
Вам не нужно запоминать параметры командной строки для использования tird. Этот инструмент имеет CLI на основе подсказок: просто запустите его, выберите пункт меню и ответьте на последующие вопросы.```
$ tird
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]:
## Параметры ввода
Существует 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 здесь.
Полезная нагрузка, которая будет зашифрована при создании криптоблоба, состоит из:
Указание полезной нагрузки в интерфейсе выглядит следующим образом:``` 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 (секретные материалы)']
## Входной ключевой материал
`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
Для получения дополнительной информации обратитесь к спецификации.
Хотя содержимое зашифрованного сообщения защищено, его размер, происхождение, назначение… не защищены. Данные скрыты, метаданные видны. Иногда этого достаточно, чтобы ваш враг раскрыл ваши секреты.
Мы убиваем людей на основе метаданных.
![]() Против ![]() |
|---|
tirdFS — Управляемая пользователем стеганографическая файловая системаtird использует технику, которая описана следующим образом:
Сокрытие данных внутри зашифрованных данных или внутри случайных данных. Сообщение, которое нужно скрыть, шифруется, а затем используется для перезаписи части гораздо большего блока зашифрованных данных или блока случайных данных (нераскрываемый шифр, например одноразовый блокнот, генерирует шифротексты, которые выглядят совершенно случайными без закрытого ключа).
Вы можете шифровать файлы и встраивать криптоблобы в контейнеры, начиная с произвольных позиций. После записи криптоблоба вам необходимо запомнить его местоположение в контейнере (начальную и конечную позиции), которые будут использоваться позже для извлечения криптоблобов. Таким образом, вы можете создать tirdFS — скрытую, без заголовков, управляемую пользователем файловую систему внутри контейнера:
tirdFS не является монтируемой файловой системой с внутренними структурами метаданных. Это управляемая пользователем модель скрытого хранилища, построенная из независимо размещённых криптоблобов.
Любой файл, диск или раздел, размер которого превышает минимальный размер криптоблоба (1160 байт), может быть допустимым контейнером. Криптоблобы могут быть встроены в любую область.
Примеры допустимых контейнеров включают:
Пример структуры контейнера:``` +—————————+—————————————+ <— 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 | +—————————+—————————————+
**Пользовательский заголовок**
Отдельный пользовательский текстовый заголовок `tirdFS` может выглядеть следующим образом:```
[100000000:100345765] secret_video.mp4
[100345765:234765345] various_secrets.zip
[12654876456:14765345098] Epstein_files_part1.zip
То есть, он должен обычно содержать местоположение каждого криптоблоба в контейнере и краткий комментарий. Однако пользователь волен решать, как хранить позиции и что включать в такой заголовок.
Следующее изображение показывает, насколько трудно отличить одну случайную запись данных от другой, и процесс встраивания криптоблобов в контейнер.
Пустой контейнер со случайными данными:

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

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

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

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

Носите повсюду. Это ваше право.
Пожалуйста, посмотрите на следующий скриншот.
Похоже, что этот том объемом 16 ГБ содержит только один файл размером 8,7 МиБ. Правда ли это? Возможно, да, возможно, нет.
Файловая система сообщает нам, что здесь есть только один файл. Но действительно ли в томе только один файл? Мы не можем определить это с помощью файловой системы. Фактически, данные могут находиться за пределами файловой системы и быть необнаружимыми для инструментов файловой системы. Пространство размером 15,2 ГиБ, отмеченное как свободное, может быть занято скрытой файловой системой. Это «свободное» пространство может быть занято скрытыми зашифрованными данными.
Можем ли мы опровергнуть существование этих данных? Да, например, исследуя уровень энтропии этого свободного пространства с помощью binwalk. Низкая энтропия указывает на вероятное отсутствие скрытых данных. Высокая энтропия сама по себе не доказывает наличие скрытых зашифрованных данных. Области с высокой энтропией могут быть либо просто остаточными данными, либо скрытыми зашифрованными данными.
Если вы заинтересованы в сокрытии данных за пределами видимой файловой системы, то tird к вашим услугам, чтобы предоставить Плащ-невидимку для ваших файлов.
Шифрование с временной блокировкой (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!
**Правдоподобный 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, чтобы заглянуть под капот во время работы программы.
Включение режима отладки дополнительно показывает:
[!WARNING] В этом режиме возвращаемый открытый текст может быть изменен или подменён злоумышленником!
В небезопасном режиме расшифровки tird выдаст открытый текст, даже если аутентификация не удалась. Используйте только в том случае, если вы ставите доступность выше целостности, когда не можете успешно расшифровать криптоблоб в обычном режиме.
tird не поддерживает:
tird не предоставляет:
tird не может обработать (зашифровать/встроить) более одного файла за один проход. Шифрование каталогов и нескольких файлов не поддерживается.tird не очищает метаданные файловой системы (atime, mtime, ctime).tird не очень высока (до 730 МиБ/с в моих тестах на современном оборудовании).Криптография может помочь, но она не спасёт вас от неправильного использования, уязвимостей, социальной инженерии или физических угроз.
tird не проходил независимый аудит безопасности людьми.tird неэффективен в скомпрометированной среде; его выполнение в таких случаях может привести к катастрофическим утечкам данных.tird вряд ли будет эффективен при использовании коротких и предсказуемых ключей.tird не стирает свои конфиденциальные данные из памяти после использования; ключи могут оставаться в памяти после выхода из программы.tird не сортирует дайджесты ключевых файлов и парольных фраз за константное время.tird защищает данные, а не пользователя; он не может предотвратить пытки, если вы находитесь под подозрением.HKDF и быструю реализацию ChaCha20)Argon2 и BLAKE2)tird(1)Улучшить документацию.
Пожалуйста, не стесняйтесь задавать вопросы, оставлять отзывы или предоставлять критику в разделе Обсуждения.