Введение

Формат файла изображения

JBIG2 — это стандарт сжатия изображений для бинарных (двухуровневых) изображений, разработанный Объединенной группой экспертов по бинарным изображениям (Joint Bi-level Image Experts Group). Он подходит как для сжатия без потерь, так и с потерями. Согласно пресс-релизу группы, в режиме сжатия без потерь JBIG2 обычно генерирует файлы в 3–5 раз меньше, чем файлы формата Fax Group 4, и в 2–4 раза меньше, чем JBIG — предыдущий стандарт сжатия бинарных изображений, выпущенный группой. JBIG2 был опубликован в 2000 году как международный стандарт ITU T.88, а в 2001 году как ISO/IEC 14492.

Функциональность

В идеале, кодировщик JBIG2 сегментирует входную страницу на области текста, области полутоновых изображений и области других данных. Области, которые не являются ни текстом, ни полутонами, обычно сжимаются с помощью контекстно-зависимого алгоритма арифметического кодирования, называемого кодером MQ. Текстовые области сжимаются следующим образом: пиксели переднего плана в этих областях группируются в символы. Затем создается словарь символов, который кодируется, как правило, также с использованием контекстно-зависимого арифметического кодирования, а области кодируются путем описания того, какие символы где встречаются. Обычно символ соответствует символу текста, но это не является обязательным требованием метода сжатия. При сжатии с потерями разница между похожими символами (например, слегка отличающиеся отпечатки одной и той же буквы) может быть проигнорирована; при сжатии без потерь эта разница учитывается путем сжатия одного похожего символа, используя другой в качестве шаблона. Полутоновые изображения могут быть сжаты путем восстановления градации серого, использованной для генерации полутона, а затем отправки этого изображения вместе со словарем полутоновых шаблонов. В целом, алгоритм, используемый JBIG2 для сжатия текста, очень похож на схему сжатия JB2, применяемую в формате файла DjVu для кодирования бинарных изображений. PDF-файлы версий 1.4 и выше могут содержать данные, сжатые с помощью JBIG2. Открытые декодеры для JBIG2 включают jbig2dec (AGPL), jbig2 imageio на основе Java (Apache 2), jbig2.js на основе JavaScript (Apache 2) и декодер Glyph & Cog LLC, используемый в Xpdf и Poppler (оба GPL). Открытый кодировщик – jbig2enc (Apache 2).

Технические детали

Как правило, бинарное изображение состоит главным образом из большого объема текстовых и растровых данных, в которых одни и те же формы повторяются многократно. Бинарное изображение сегментируется на три области: текст, растр и области общего назначения. Каждая область кодируется по-разному, и методологии кодирования описаны в следующем разделе.

Текстовые данные изображения

Текстовое кодирование основано на особенностях человеческого визуального восприятия. Человеческий наблюдатель не способен различить два экземпляра одного и того же символа в двух уровневом изображении, даже если они не совпадают пиксель в пиксель. Поэтому кодируется только растровое изображение одного представительного экземпляра символа, а не растровые изображения каждого вхождения одного и того же символа по отдельности. Для каждого экземпляра символа закодированный экземпляр сохраняется в "символьном словаре". Существует два метода кодирования текстовых изображений: сопоставление и замена шаблонов (PM&S) и мягкое сопоставление шаблонов (SPM). Сопоставление и замена шаблонов (PM&S) – более классический метод кодирования. Кодировщик выполняет сегментацию изображения для выделения фрагментов размером с символ. Для каждого фрагмента кодировщик ищет соответствие в растровом словаре. Если соответствие найдено, кодируется индекс соответствующего растрового изображения в словаре и позиция символа на странице. Позиция обычно задается относительно другого, ранее закодированного символа. Если соответствие не найдено, сегментированный пиксельный блок кодируется напрямую и добавляется в словарь. Типичная последовательность действий алгоритма сопоставления и замены шаблонов представлена на левой блок-схеме на рисунке выше. Хотя метод PM&S может обеспечить высокую степень сжатия, при низком разрешении изображения возможны ошибки замены. Поскольку для совпадения в словаре требуется высокая степень сходства между фактическим и словарным символами, SPM добавляет лишь небольшое количество данных.

Ошибки в замене символов в отсканированных документах

Некоторые реализации JBIG2, использующие сжатие с потерями, могут потенциально изменять символы в документах, сканируемых в PDF. В отличие от некоторых других алгоритмов, где артефакты сжатия очевидны, такие как размытие или "москитный шум", "сопоставление с образцами" в JBIG2 сопоставляет символы, похожие по виду. Если сопоставление реализовано некачественно, особенно при сканировании с низким разрешением, где символы менее четко определены, похожие символы могут быть ошибочно заменены. Однако, как отметил ученый-компьютерщик Дэвид Кризель, обнаруживший проблему, описанную ниже, "причина ошибки не в самом JBIG2". В 2013 году сообщалось о различных заменах (включая замену "6" на "8") на многих копировально-печатных аппаратах Xerox Workcentre. Цифры, напечатанные на отсканированных (но не распознанных с помощью OCR) документах, могли быть изменены. Это было продемонстрировано на строительных чертежах и некоторых таблицах с числами; потенциальное влияние таких ошибок замещения в документах, таких как медицинские рецепты, было кратко упомянуто. Дэвид Кризель, немецкий ученый-компьютерщик, и Xerox проводили расследование. Xerox впоследствии признала, что это давняя ошибка программного обеспечения, и их первоначальные заявления о том, что замену могут вызвать только нестандартные настройки, были неверными. Никаких попыток отозвать или принудительно обновить затронутые устройства – которых, как было признано, насчитывалось более десятка семейств – предпринято не было. Однако в августе 2013 года был выпущен программный патч, который при установке автоматически отключал сопоставление с образцами. Ранее отсканированные документы по-прежнему могут содержать ошибки, что затрудняет подтверждение их подлинности. После появления публикаций о потенциальных ошибках власти некоторых стран выступили с заявлениями о предотвращении использования JBIG2. В Германии Федеральное управление по информационной безопасности выпустило техническое руководство, в котором говорится, что кодирование JBIG2 "НЕ ДОЛЖНО использоваться" для "сканирования для замены". В Швейцарии Координационное управление по постоянному архивированию электронных документов (Koordinationsstelle für die dauerhafte Archivierung elektronischer Unterlagen) рекомендовало не использовать JBIG2 при создании PDF-документов.

Эксплуатируйте

Уязвимость в реализации JBIG2 в Xpdf, используемая в операционной системе iOS для телефонов Apple, была использована шпионским ПО Pegasus для осуществления атаки без взаимодействия с пользователем на iPhone путем создания эмулированной компьютерной архитектуры внутри потока JBIG2. Apple устранила эту уязвимость "FORCEDENTRY" в iOS 14.8 в сентябре 2021 года.