LINUX.ORG.RU

Тихо и незаметно вышел tird v0.20.0 - инструмент для шифрования файлов и сокрытия зашифрованных данных

 steganography, tird,


1

2

tird - инструмент для шифрования файлов, сфокусированный на минимизации метаданных и сокрытии зашифрованных данных. Предназначен для использования на современных персональных компьютерах. Написан на Python. Код открыт под 0BSD.

Для шифрования используется ChaCha20-IETF.

Для key stretching и выведения ключей используется Argon2id с 1 GiB памяти и с 4 проходами.

Для аутентификации используется keyed BLAKE2b-512.

Входными ключевыми материалами могут быть:

  • Пароли;
  • Ключевые файлы (в тоом числе блочные устройства и целые директории).

Зашифрованные данные имеют формат PURB (padded uniform random blob) - неотличимы от случайных, имеют рандомизировавнный размер.

Минимизация метаданных:

  • PURB формат - невозможно доказать наличие зашифрованных данных без ключей, неизвестны параметры и структура файла, скрыт настоящий размер полезной нагрузки.
  • Путь к выходному файлу не зависит от пути к входному, не имеет стандартного расширения, определяется пользователем.
  • Интерфейс в виде диалога с юзером, основанный на подсказках. CLI параметры не протекают в shell history.
  • Опционально: данные можно встроить в другой файл и устройство, сделав их недетектируемыми, а их наличие недоказуемым.

Построение скрытой ФС, управляемой пользователем:

Зашифрованные данные можно записывать в контейнеры, указав начальную позицию (отступ в байтах от начала контейнера). В качестве контейнеров могут выступать специально сгенерированные файлы, съемные устройства (пустые или полупустые диски), разделы с LUKS. Дело в том, что загловок FAT32/exFAT ФС расположен в начале раздела, а контент записываемых файлов пишется от начала в конец последовательно. Таким образом, на свежеотформатированной ФС можно сделать отступ от начала и записывать наши данные, запомним их расположение для последующего извлечения.

Далее: смотрите домашнюю страницу https://github.com/hakavlad/tird

Вопросы приветствуются.

★★★
Ответ на: комментарий от token_polyak
  1. Так сложилось исторически.
  2. Во-вторых:

Ключевая схема на основе BLAKE2b, если использовать при ней 512-битный ключ и 512-битный MAC (или, точнее, тег), при классическом подсчёте обеспечивает 512 бит стойкости, а при квантовом учёте (с учетом алгоритма Гровера) примерно 256 бит эффективной безопасности. В то же время Poly1305, имеющий классическую стойкость ≈128 бит (при условии корректного использования nonce), при квантовых атаках будет примерно 64-битовой устойчивостью.

Таким образом, можно утверждать, что с квантовой точки зрения схема на базе BLAKE2b с 512-битным ключом и тегом обеспечивает значительно более высокий уровень защиты, чем Poly1305.

  1. В-третьих, MAC tag - это метаданные, которые могут быть нежелательтными. Тэг может помогать отличить настоящий пароль от некорректного. Меньше тэгов - меньше метаданных.

  2. Если чанков много и тэгов много, что при повреждении одного из чанков, противник видит какой чанк поврежден. Это создает еще одну утечку, что противоречит цели инструмента.

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

См также https://gist.github.com/hakavlad/5cbcb19e3916f7ac916427e3ed7e95bc

hakavlad ★★★
() автор топика
Последнее исправление: hakavlad (всего исправлений: 1)

На лицензию ругается

configuration error: `project.license` must be valid exactly by one definition (2 matches found):

    - keys:
        'file': {type: string}
      required: ['file']
    - keys:
        'text': {type: string}
      required: ['text']

DESCRIPTION:
    `Project license <https://peps.python.org/pep-0621/#license>`_.

GIVEN VALUE:
    "0BSD"

OFFENDING RULE: 'oneOf'

irton ★★★★★
()
Ответ на: комментарий от irton

Кто ругается? Как воспроизвести?

На pip залит без проблем. Установка также без проблем:

$ pip install tird
Defaulting to user installation because normal site-packages is not writeable
Collecting tird
  Downloading tird-0.20.0-py3-none-any.whl.metadata (27 kB)
Requirement already satisfied: cryptography>=2.1 in ./.local/lib/python3.9/site-packages (from tird) (39.0.1)
Requirement already satisfied: pynacl>=1.2.0 in ./.local/lib/python3.9/site-packages (from tird) (1.5.0)
Requirement already satisfied: cffi>=1.12 in ./.local/lib/python3.9/site-packages (from cryptography>=2.1->tird) (1.15.0)
Requirement already satisfied: pycparser in ./.local/lib/python3.9/site-packages (from cffi>=1.12->cryptography>=2.1->tird) (2.21)
Downloading tird-0.20.0-py3-none-any.whl (48 kB)
Installing collected packages: tird
Successfully installed tird-0.20.0
hakavlad ★★★
() автор топика
Ответ на: комментарий от MoldAndLimeHoney

Оно как-то приспособлено для облачного хранения?

Подходит для долгосрочного хранения отдельных файлов.

Не предназначено для инкрементальных бэкапов. Инкрементальные бэкапы сильно протекают метаданными. См также:

«в системах, использующих дедупликацию, при наличии возможности добавлять свои файлы в резервную копию можно поступить проще и определить наличие интересующих файлов косвенным путём. После добавления проверяемого файла можно оценить изменение размера хранилища - если файл уже имеется в хранилище, то его повторное добавление из-за дедупликации не приведёт к должному увеличению размера.» – https://www.opennet.ru/opennews/art.shtml?num=62996

при изменении 1 байта нужно перекачивать все 50Гб?

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

Примнение в контексте облаков:

  • Шифруете 1 файл. Это может быть zip, если много файлов нужно залить сразу.
  • Залифаете в облако или в публичное место.
  • Скачать, расшифровать, использовать.
hakavlad ★★★
() автор топика
Ответ на: комментарий от alysnix

если записать случайный байт внутрь зашифрованного файла - сколько байт сломается при расшифровке?

Смотря куда записывать.

  • Запись в соль полностью изменит plaintext и его размер.

  • Запись в часть шифротекста, соответствующую файлу, ведет к повреждению 1 байта.

  • Запись в часть шифротекста, соответствующую комментарию, либо повредит 1 байт комментария, либо ведет к некорректности всего комментария вследствие UnicodeDecodeError - будет отображен пустой комментарий (комментарий отображается как [None] в интерфейсе). Может отобразиться обрезанный комментарий, если расшифрованным байтом будет 0xFF - этот байт используется как разделитель между введенным комментарием и случайными данными, используемыми для дополнения комментария до 512 байт.

  • Повреждение тега аутентификации не повреждает шифротекст, это просто приведет к ошибке аутентификации.

  • Запись в padding не влияет на оригинальный plaintext и аутентификацию. Это позволяет использовать содержимое паддинга как своеобразные карманы, в которых можно прятать дополнительные данные. См.

hakavlad ★★★
() автор топика
Последнее исправление: hakavlad (всего исправлений: 4)
Ответ на: комментарий от irton

У вас setuptools устаревший.

См https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license

The new format for license is a valid SPDX license expression consisting of one or more license identifiers. The full license list is available at the SPDX license list page. The supported list version is 3.17 or any later compatible one.

[project]
license = "GPL-3.0-or-later"

До недавнего времени PEP 621 требовал представления поля license в виде таблицы с ключами file или text, что и приводило к рекомендациям использовать запись вида

  license = { text = "0BSD" }

Однако setuptools, начиная с версии 77.0.0, изменил свою позицию: теперь предпочтительным считается использование строки, содержащей SPDX-выражение (например, «0BSD»).

tird использует современную рекомендуемую форму указания лицензии.

hakavlad ★★★
() автор топика
Последнее исправление: hakavlad (всего исправлений: 1)
Ответ на: комментарий от hakavlad

Думаю никто не захочет обновлять setuptools в платформе сейчас, главное что собралось, опакетилось, лежит в репе.

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

irton ★★★★★
()