DEDA: инструмент на Python читает и маскирует жёлтые точки принтеров

DEDA: инструмент на Python читает и маскирует жёлтые точки принтеров

На GitHub опубликован DEDA (Tracking Dots Extraction, Decoding and Anonymisation Toolkit), набор инструментов на Python для работы с так называемыми жёлтыми точками. По описанию в README, это мелкие систематические точки, которые кодируют информацию о принтере и (или) о самой распечатке. Процесс встроен почти в каждый коммерческий цветной лазерный принтер, поэтому почти любая распечатка несёт закодированные данные об устройстве-источнике, например серийный номер.

Инструмент решает две задачи. Во-первых, он считывает и расшифровывает эти «криминалистические» признаки. Во-вторых, позволяет анонимизировать документы, чтобы не допустить произвольного отслеживания. README просит всех, кто пользуется программой, ссылаться на статью 2018 года «Forensic Analysis and Anonymisation of Printed Documents» (Тимо Рихтер, Штефан Эшер, Дагмар Шёнфельд и Торстен Штруфе, труды 6-го семинара ACM по сокрытию информации и мультимедийной безопасности IH&MMSec '18, страницы 127, 138).

Установка: нужен Python 3, затем pip3 install --user deda (или pip3 install --user . из каталога с кодом). Для графического интерфейса есть команда deda_gui. Необязательная библиотека Wand (только Unix и GNU/Linux) нужна для deda_anonmask_apply: без неё страницы с белыми областями на изображениях анонимизировать нельзя.

Чтение данных из скана: точки можно считать и иногда расшифровать по отсканированному изображению. Для хорошего результата README советует формат со сжатием без потерь (например, png), разрешение 300 dpi и нейтральный контраст. Команда deda_parse_print разбирает один файл, deda_compare_prints сравнивает несколько распечаток. Если новый шаблон точек не распознан, их можно выделить командой deda_extract_yd для дальнейшего анализа. Команда deda_create_dots позволяет создать собственную матрицу точек и добавить её в PDF.

Анонимизация документа для печати идёт в несколько шагов. Сначала командой deda_anonmask_create -w создаётся тестовая страница testpage.pdf, которую печатают без полей. Затем её сканируют (300 dpi, файл без потерь) и запускают deda_anonmask_create -r: получается файл mask.json, индивидуальная маска анонимизации конкретного принтера. После этого deda_anonmask_apply mask.json DOCUMENT.PDF создаёт masked.pdf, который печатают с нулевыми полями. Радиус точек и смещения по осям x и y в маске можно настроить параметрами. Отдельная команда deda_clean_document «в основном» (не полностью) убирает данные отслеживания из скана.

Как проверить результат: README советует с помощью микроскопа убедиться, что замаскированная страница перекрывает точки именно вашего принтера. Если точек нет совсем, можно создать свои (deda_create_dots) либо напечатать калибровочную страницу на другом принтере и использовать маску для своего. Там же приведены решения типичных проблем установки: путь к исполняемым файлам, зависимость eel для графического интерфейса и ошибка wand PolicyError, которую вызывает ImageMagick (лечится удалением Wand или добавлением строки политики для PDF в policy.xml).

Ключевые факты

  • Жёлтые точки (Document Colour Tracking Dots) кодируют данные о принтере и (или) распечатке, например серийный номер; по README они есть почти в каждом коммерческом цветном лазерном принтере.
  • DEDA читает и расшифровывает точки со сканов (рекомендуется 300 dpi и формат без потерь, например png) и умеет анонимизировать документы перед печатью.
  • Анонимизация: тестовая страница, её скан, индивидуальная маска mask.json для принтера, затем masked.pdf, который печатают без полей.
  • Маскировка не гарантирована: README советует проверять результат микроскопом, а команда deda_clean_document убирает данные лишь «в основном».
  • Установка через pip3 install --user deda; README просит цитировать статью 2018 года (IH&MMSec '18) Рихтера, Эшера, Шёнфельд и Штруфе.

Почему это важно

Распечатка кажется анонимной, но, по описанию в README, почти каждый цветной лазерный принтер добавляет к ней почти невидимые точки с закодированными данными об устройстве, в том числе серийным номером. DEDA делает этот механизм наблюдаемым: можно прочитать, что именно «знает» о вашем принтере напечатанная страница, и при необходимости замаскировать точки.

Кому это важно

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

Как это применить

Нужен Python 3 и команда pip3 install --user deda; графический интерфейс запускается командой deda_gui. Для чтения скана используйте формат без потерь и 300 dpi, затем deda_parse_print. Для анонимизации напечатайте тестовую страницу (deda_anonmask_create -w), отсканируйте её (deda_anonmask_create -r), получите mask.json и примените его к PDF (deda_anonmask_apply). Данных о цене или лицензии в README нет.

Можно ли доверять

Сведения взяты из README проекта на GitHub. Там нет результатов тестов, процентов успешной расшифровки или анонимизации, нет списка принтеров, которые добавляют точки. Сам README не обещает полной анонимизации: пишет, что данные удаляются «в основном», и просит проверять результат микроскопом. Методика опирается на статью 2018 года, на которую просят ссылаться.

Риски и подводные камни

Расшифровка удаётся не всегда: README говорит, что данные «иногда» можно декодировать, а новые шаблоны могут быть не распознаны. Без библиотеки Wand нельзя анонимизировать страницы с белыми областями на изображениях, а Wand работает только на Unix и GNU/Linux и может вызывать ошибку PolicyError из-за настроек ImageMagick. Монохромные страницы и струйные распечатки могут вообще не содержать точек. Для маски нужен печатный тест на конкретном принтере и печать с нулевыми полями.