# JBIG2

JBIG2 ist ein Verfahren zur Bildkompression von Binärbildern für sowohl verlustfreie als auch verlustbehaftete Kompression. JBIG2 wurde von der „Joint Bi-level Image Experts Group“ entwickelt und wurde im Jahre 2000 als internationaler Standard ITU T.88 und 2001 als ISO/IEC 14492 veröffentlicht. Es ist eine Weiterentwicklung von JBIG.

## Funktionsweise

Obwohl der JBIG2-Standard sich nur auf die Decodierung bezieht, wird vom Encoder erwartet, dass die Seiten der Eingabedokumente in drei Typen von Regionen eingeteilt werden: Text, Grafik und generische Regionen. Letztere enthalten Objekte, die sich weder als Text noch als Bild klassifizieren lassen, zum Beispiel Linien oder Rauschen.
Eine Textregion besteht aus einer Anzahl von Symbolen, die auf einem Hintergrund platziert werden. Typischerweise entspricht ein Symbol einem Zeichen (z. B. Buchstaben), das in einem Text vorkommt. Die Symbole werden in einem Symbolwörterbuch gespeichert und können durch Angabe ihrer Indizes wiederverwendet werden. Die Speicherung im Wörterbuch erfolgt entweder als codierte Bitmap oder als Verfeinerung eines anderen Wörterbucheintrags, wobei lediglich die Differenz zur Vorlage gespeichert wird. Bei der verlustbehafteten Komprimierung verweisen auch geringfügig unterschiedliche Symbole auf denselben Symbolwörterbucheintrag.
Rastergrafiken werden durch Rekonstruktion von Graustufenbildern komprimiert und häufig auftretende Muster werden in einer Bibliothek gespeichert. Verlustfreie und verlustbehaftete Kodierung werden wie bei Textregionen gehandhabt.
Die vom Encoder festgelegten Regionen müssen nicht disjunkt sein. Mögliche Überlappungsflächen werden mittels anzugebender Verknüpfungsoperatoren (OR, AND, XOR, XNOR oder REPLACE) verrechnet.
JBIG2-Dateien sind in Segmente unterteilt. Eine Dokumentenseite besteht beispielsweise aus einem Seiteninformationssegment, einem Symbolwörterbuchsegment, einem Textregionssegment, einem Musterwörterbuchsegment, einem Halbtonregionssegment und einem End-of-Page-Segment. Die Wörterbuchsegmente enthalten Rastergrafiken, die von den Regionssegmenten referenziert werden. Weil Symbole und Muster unterschiedlicher Seiten sich auf das gleiche Wörterbuchsegment beziehen können, findet eine seitenübergreifende Komprimierung statt. Segmente sind eindeutig nummeriert und bestehen aus einem Segmentkopf, einem Datenkopf und Daten. Der Segmentkopf enthält die Segmentnummer (wenn andere Segmente im Datenteil referenziert werden, auch deren Segmentnummern) und die Nummer der Seite, auf der die decodierte Grafik platziert werden soll (bei globalen Segmenten den Wert 0).
Kompressionsverfahren Zur Kompression werden drei unterschiedliche Verfahren verwendet:
* Arithmetisches Kodierverfahren
* MMR (Modified Modified READ), auch bekannt als Fax Group 4 oder zweidimensionale Kodierung.
* Huffman-Kodierung

## Verwendung

JBIG2 Daten können als eigenständige Dateien oder eingebettet in andere Dateiformate wie beispielsweise PDF (ab Version 1.4) vorkommen.
Quelloffene Dekoder für JBIG2 sind jbig2dec (geschrieben in C) und jbig2-imageio (geschrieben in Java).

## Nachteile

Bei der verlustbehafteten Komprimierung mit JBIG2 kann es durch Referenzierung nicht identischer Symbole aus dem Symbolwörterbuch zur Verfälschung von Dokumentdetails wie einzelner Zahlen kommen. Tritt dieser Fehler auf, so ist er – im Gegensatz zu visuell meist deutlich erkennbaren Fehlern anderer Kompressionsverfahren – visuell sehr schwer erkennbar. So kam es 2013 zum Scankopierer-Vorfall (siehe unten).
Obwohl nur die verlustbehaftete JBIG2-Variante von diesem gefährlichen Effekt betroffen ist, hat das Bundesamt für Sicherheit in der Informationstechnik (BSI) am 16. März 2015 jedes Bildkompressionsverfahren mit Symbolkodierung – dazu gehört insbesondere die JBIG2-Kompression – als ungeeignet für das rechtssichere ersetzende Scannen eingestuft. Zum gleichen Ergebnis kam die „Koordinationsstelle für die dauerhafte Archivierung elektronischer Unterlagen“ der Schweiz.

## Vertauschung von Ziffern bei Scankopierern

Im August 2013 machte David Kriesel öffentlich, dass in Scans, die mit Kopiergeräten der Firma Xerox erstellt wurden, Ziffern falsch wiedergegeben waren. Der Bug wurde erst acht Jahre nach Veröffentlichung entdeckt, als auf einer Bauplankopie die angegebenen Ziffern der Raumgrößen nicht zur Zeichnung passten. In der Zwischenzeit nutzten Großunternehmen, aber auch staatliche Einrichtungen wie das Militär das fehlerhafte Kompressionsverfahren. Anschließend konnte der Fehler von vielen Benutzern auf weiteren Modellen reproduziert werden. Die Anzahl aller betroffenen Geräte wurde auf 200.000–300.000 geschätzt. Solche Falschdaten können beispielsweise bei Dosierungsangaben von Medikamenten, Bauplänen für Brücken oder im Finanzwesen unvorhersehbare Folgen haben. Die fehlerhafte Implementierung von JBIG2 bzw. die schlechte Parametrisierung betraf allerdings nur das Erstellen digitaler Scans, nicht das Kopieren, Drucken oder Faxen.

## Pegasus-Spyware

Die 2016 entdeckte Pegasus-Spyware des israelischen Herstellers NSO Group Technologies verwendete eine Vulnerabilität des JBIG2-Decoders auf iOS-Geräten. Dabei gelang es mit einer bitgenau vorbereiteten iMessage, innerhalb des Dekompressionslaufs im Speicher eine Art virtuellen Prozessor zu konstruieren, der dann als Bootloader für die Malware fungierte. So konnten iPhones völlig ohne Zutun („zero-click“) des Benutzers infiltriert werden. Google Project Zero beschrieb diesen unter der Bezeichnung FORCEDENTRY bekanntgewordenen Hack als „einen der technisch ausgefeiltesten Exploits,“ den sie je gesehen hätten.