Yellow Dots Code (Machine Identification Code für Farblaserdrucker)

Herkunft / Verwendung:
Der Yellow Dots Code (zu deutsch "Gelbe Farbpunkte Code") wird auch Machine Identification Code genannt und wird durch moderne Farblaserdrucker mit ausgedruckt, ohne das dies dem Benutzer bekannt sein dürfte. Er soll das Tracken (nachverfolgen) von Dokumenten ermöglichen, die mit einem Farblaserdrucker ausgedruckt werden.

Dieses "Feature" ist natürlich nirgends in der Bedienungsanleitung des Laserdruckers aufgeführt und sollte wohl möglichst geheim bleiben. Da sich der Code durch das Aufbringen von winzigen Farbpunkten mit gerade 0,1 mm Durchmesser in der auf weißem Papier sehr schlecht sichtbaren Farbe gelb auszeichnet und man ihn mit bloßem Auge nicht erkennen kann, kann man ihn durchaus als ein steganografisches Verfahren bezeichnen.

Warum zahlreiche Druckerhersteller diese Farbmarkierungen auf den Ausdrucken anbringen, ist nicht bestätigt. Es ist aber anzunehmen, dass diese das aufgrund irgendwelcher Vorgaben von Geheimdiensten oder sonstiges Regierungsorganisationen tun. Dass es sich um eine Vorgabe handelt lässt sich daraus schließen, dass bei vielen Drucker-Herstellern ein ähnliches Kodierungsverfahren zum Einsatz kommt. Eine vorgebende Instanz ist also höchstwahrscheinlich, denn sonst würde jeder Hersteller seinen eigenen Standard kreieren. Außerdem nutzt der Yelloe Dots Code dem Druckerhersteller nichts, sondern verursacht ihm nur Kosten.

Wahrscheinlich soll der Yellow Dot Code den Nachrichtendiensten oder den strafverfolgenden Behörden ermöglichen, für beschlagnahmte oder abgefangene Dokumente zu ermitteln, wer Urheber der Ausdrucke ist, um so Spione, Whistleblower oder Verbrecher zu identifizieren.

Im Jahr 2004 wurden die Existenz dieser gelben Punkte auf Ausdrucken von Farblaserdrucken durch einen Artikel der PCWorld der Öffentlichkeit bekannt. (5)

Die Electronic Frontier Foundation (kurz EFF), eine US-amerikanische Bürgerrechtsorganisation, veröffentlichte 2005 einen Bericht über die Yellow Dots und hat eine Liste der betroffenen Druckermodelle online gestellt (1). Zu den Herstellern, die Yellow Dots auf Ausdrucken aufbringen gehören: Brother, Canon, Dell, Epson, Fuji, einige Modelle von Hewlett-Packard, IBM, Konica / Minolta, Kyocera, Lanier, Lexmark, NRG, Panasonic, Ricoh, Savin, Toshiba, einige Modelle von Xerox/Tektronix.

Zum Zeitpunkt der letzten Tests der EFF (2017) waren nur folgende Hersteller nicht betroffen: Oki/OkiData, Samsung. Alle anderen brachten Yellow Dots nach einem bestimmten Schema auf, und dies vielfach (bei einem A4 Blatt ca. 150 mal) über das ganze Blatt Papier verteilt.


Der Yellow Dots Code selbst besteht zum Beispiel bei Xerox Druckern aus einer Matrix von 15 Spalten und 8 Zeilen, in der an den entsprechenden Positionen gelbe Punkte gesetzt sind oder nicht. Es handelt sich also um eine binäre Kodierung.

In der Yellow-Dot-Codematrix von Xerox sind der Ausdruckzeitpunkt mit Datum und minutengenauer Uhrzeit sowie die Seriennummer des Druckers kodiert (siehe die Spezifikation der Yellow-Dot-Matrix weiter unten). Es kann aber auch sein, dass nur die Seriennummer und kein Druckdatum kodiert ist. Dies ist bei den kleineren 8x8 Yellow-Dot-Matrizen (wie rechts zu sehen) anzunehmen.

Der Chaos Computer Club (CCC) fand 2005 einen Farbkopierer mit einer Yellow-Dot-Matrix von sogar 32 × 16 Punkten (3), mit der man eine Datenmenge von 64 Byte unterbringen könnte. Hier ist die Speicherung noch weiterer Datenfelder anzunehmen.

Da die Yellow Dots in hellem gelb und winzig klein (nur 0,1 mm) sind, sind sie mit bloßem Augen nicht zu erkennen. Sie werden erst unter einer starken Lupe bei genauem Hinsehen oder einem Mikroskop sichtbar. Oder wenn man die Seite mit einem Flachbettscanner in hoher Auflösung (600 dpi oder mehr) wieder einscannt. Sichtbar werden die Dots erst bei ca. 30facher Vergrößerung. Die Beleuchtung des Ausdruckes mit ultraviolettem Licht ist dabei hilfreich, weil es die gelben Punkte hervorhebt.

Bei relativ teuren Geräte wie einem Farblaserdrucker wird unter anderem aus Gewährleistungsgründen die Seriennummer protokolliert und erscheint auf Lieferschein, Rechnung und in Serviceverträgen. Diese Daten werden wahrscheinlich bei Lieferanten und Händlern gespeichert, auch um zu überprüfen, ob bei einem Garantiefall nicht etwa ein anderes Gerät als das gekaufte zur Reparatur untergeschoben werden soll.

Durch die Lieferkette kann man ermitteln, wo ein Gerät mit einer bestimmten Seriennummer letzendlich gelandet ist. Zumindest im gewerblichen Bereich. Private Weiterverkäufe sind natürlich möglich, aber auch hier kann man durch Befragung ermitteln. Die Seriennummer kann so zum Ausdruckenden und so zum Täter führen.

Das Ausdruckdatum kann auch bei Ermittlungen hilfreich sein, um die zeitlichen Zusammenhänge aufzuklären. Bei günstigen Druckern für den Heimbereich stellt man normalerweise keine Uhrzeit für den Drucker ein, aber selbst die könnte unbemerkt über USB übertragen werden, denn Druckertreiber und Firmware des Druckers sind eigentlich nur dem Hersteller bekannt. Bei größeren Modellen, die im Unternehmensnetzwerk (LAN) hängen, kann die Zeit über einen Zeitserver abgeglichen werden.

Um die Privatsphäre zu schützen, könnte man als Gegenmaßnahme den Text auf einem komplett gelben Hintergrund drucken, auf dem die "Yellow Dots" dann nicht mehr zu sehen wären. Oder man versucht, die Yellow-Dot-Matrizen zu stören, indem man zusätzliche gelbe Punkte auf das Papier druckt.

Ein Forscherteam der TU Dresden hat 2018 eine solche, frei erhältliche Software vorgestellt (2), die durch zusätzliche gelbe Punkte die versteckten Information unbrauchbar machen soll. Da die Yellow Dots allerdings durch die Druckerfirmware selbst platziert werden, auf die man von außen keinen Zugriff bekommt, wird sich die Software schwer tun, die vorhandenen Yellow-Dot-Matrizen präzise durch zusätzliche Punkte zu treffen und zu stören.

Wahrscheinlicher sind diese den Matrizen gegenüber versetzt und die ursprünglichen Matrizen können trotzdem noch erkannt werden. Außerdem wiederholen sich die Yellow-Dot etwa 150 mal auf einem A4-Blatt; es gibt also 150 "Originale". Wenn die zusätzlichen gelben Punkte zufällig sind, könnte man sie wieder herausrechnen, weil es genügend "Originale" gibt, die das ursprüngliche Aussehen in sich tragen.

Am sichersten wird es wohl sein, die gelbe Farbpatrone des Laserdruckers komplett leer zu machen, damit schon hardwaremäßig keine gelben Punkte mehr gedruckt werden können. Kommt kein Gelb im gewünschten Ausdruck vor, ist dies kein Nachteil. Vorausgesetzt, der Drucker weigert sich nicht, mit einer leeren Farbkartusche zu drucken.

Es sind einige Fälle bekannt geworden, bei denen Personen durch den Yellow Dot Code ermittelt werden konnten. Bekanntestes Beispiel dürfte die Whistleblowerin Reality Winner sein. Winner arbeitete bei einer US-Regierungsbehörde in Georgia und befügte über die Sicherheitsfreigabe für streng geheime Informationen. Sie wird beschuldigt, einen Geheimdienstbericht ausgedruckt und dem Webportal The Intercept geschickt zu haben. Sie konnte anhand des Yellow Dot Codes ihres Druckers aufgespürt und überführt werden. Winner gab die Tat zu und wurde festgenommen. (4)

Auch ein Brandstifter aus Berlin konnte 2011 durch die Yellow Dots überführt werden. Der Täter hinterließ den Ausdruck einer BZ-Titelseite nach dem Brandanschlag auf die Ahmadiyya-Moschee in Wilmersdorf. Ihm werden nun noch mehr Brandanschläge auf Berliner Moscheen vorgeworfen. Es gab eine ganze Serie davon in Berlin. Dabei hat der Täter die Seite noch nicht einmal selbst gedruckt, sondern bekam diese von einem BZ-Mitarbeiter zugeschickt. Dadurch konnte aber die Verbindung hergestellt werden.

Ein jüngeres Beispiel aus 2020 betrifft einen aus dem Irak Stammenden, dem eine Anschlagsserie auf ICE-Züge auf der Strecke München-Nürnberg zur Last gelegt wird. Er soll versucht haben, in Deutschland insgesamt vier Züge zum Entgleisen zu bringen. Vor dem Landgericht Wien bekannte sich der Angeklagte schuldig. Ihm wurde zum Verhängnis, dass er das Original eines Drohschreibens beim Kopieren in einem Copy-Shop vergaß. Was er nicht wußte: Auch Farbkopierer bringen den Yellow Dot Code auf.

Spezifikation der Yellow-Dot-Matrix

Xerox DocuColor 12 (dekodiert von EFF)

Beim Farblaserdrucker des Herstellers Xerox, Modell DocuColor 12, fand der EFF eine 15x8 große Yello-Dot-Matrix. Die Yellow Dots sind in der folgenden Grafik größer dargestellt, um sie besser sichtbar zu machen. (9)



Diese konnte sie wie folgt dekodieren:



Die erste Spalte und die erste Zeile dienen jeweils der Paritätsüberprüfung und damit der Sicherstellung der Datenintegrität. Ist in einer Zeile (bzw. Spalte) eine ungerade Anzahl von Dots, so wird das Paritätsbit (also der Dot) gesetzt. Bei einer geraden Anzahl (Null gehört dazu) wird kein Paritätsbit gedruckt.

Es bleibt eine 14x7 große Matrix mit den binären Informationen, dessen Korrektheit durch die Paritätsbits überprüft werden kann. Die Kodierung der 14x7-Matrix geschieht binär. Die unterste Zeile hat die Wertigkeit 1 (20, die oberste Zeile (oder die 7. von unten) hat die Wertigkeit 64 (26). Durch Addieren der Wertigkeiten der gesetzten Bits (also jeweils dort, wo ein Dot ist) können sich Werte zwischen 0 und 127 ergeben.

Es werden aber nur die Werte von 0 bis 99 benutzt, um zweistellige dezimale Zahlen darzustellen.

Die ersten 4 Spalten (Nr. 2-5 in der ursprünglichen 15x8-Matrix) stehen für die Zeit: "50-0-0-0-12" steht für 12 Uhr 50.

Die nächsten 3 Spalten (6-8) geben das Datum an: "21-6-5" für den 21. Juni 2005.

Die 10. Spalte gibt an, ob das Dokument gedruckt oder kopiert wurde. Wurde es als Original gedruckt, so sind alle Dots gesetzt.(8) Ansonsten sind keine gesetzt (bis auf das Parity Bit).

Die letzten 4 Stellen (11-14) beinhalten lt. EFF-Analyse (9) die Seriennummer: "57-28-05-21" für 21052857 oder 57280521. Die Seriennummer konnte der EFF wohl nicht mit anderen Informationen verifizieren.

Diese Verifikation gelang Peter Buck durch Abgleich mit der internen Festplatte eines Xerox Workcentre 7132 Druckers, er stellt fest, dass rückwärts gelesen die Spalten 15 und 14, also im Beispiel "44-21" für die Produktnummer (ProductNumber) stehen. Hingegen stehen nur die Spalten 13, 12 und 11 für die Seriennummer (SerialNumber) und wären im Beispiel "05 28 57", also 052827.(8)

Ricoh Aficio MP C4501 (Foto von Heino Sauerbrey)

Bei dem von Heino Sauerbrey abgelichteten Yellow-Dot-Matrix handelt es sich um eine 8x7 Matrix.



1 2 3 4 5 6 7 8 • • • • 64 • • • • • 32 • 16 • • • • • 8 • • • 4 • • • 2 • • • • • • • 1
Da Spalte 4 frei bleibt und damit wohl den Wert Null einnehmen soll, ist anzunehmen, das hier wie beim Xerox die binären Werte jeweils in den Spalten zu finden ist. Wenn weiterhin angenommen wird, dass wieder zweistellige Dezimalzahlen herauskommen sollen, ist kein Platz mehr für Paritätsbits.

Spalte 4 könnte eine Trennung zwischen zwei Werten sein. Spalte 1 bis 3 würden dann ergeben: "105-75-39". Spalte 5 bis 8 würden ergeben: "101-9-43-125". Da allerdings Zahlen über 99 vorkommen, ist diese Interpretation eher unwahrscheinlich.

Es könnte aber auch sein, dass Zeile 1 die Parität angibt, was hinkommen würde. Dann hätte man allerdings nur noch 6 Bit pro Spalte. Dann wäre es wieder wahrscheinlicher, dass die 6 Bit-Werte zu größeren Bitmustern zusammengefasst werden würden.

Für Zeile 1 bis 3 also "100101110100111001" (von unten her gelesen) bzw. "101001001011100111" von oben her gelesen. Dies würden Dezimalwerte von 154.937 bzw. 168.679 für die ersten 3 Spalten ergeben. Wenn diese Zahlen die seit dem 01.01.2020 00:00 vergangenen Stunden repräsentieren sollen, dann wäre der Druckzeitpunkt 03.09.2017 17:00:00 bzw. 30.03.2019 07:00:00.

Für Zeile 5 bis 8 ergeben sich so "101001100100110101101111" (von unten) bzw. "100101001001101011111101", also dezimal 10.898.799 bzw. 9.739.005, was für die Seriennummer stehen könnte.

HP, Kyocera Lexmark, Ricoh (Reverse-L)

Die Druckerhersteller Hewlett Packard, Kyocera Lexmark und Ricoh benutzen eine Yellow Dot Matrix mit der Größe von 22 Zeilen und 17 Spalten, die Peter Buck "Reverse-L" (8) nennt aufgrund des auf den Kopf gestellten Dreiecks oben links in der Matrix.

Durch Übereinanderlegen vieler Matrizen konnte Buck feststellen, dass Zeile 16 und Spalte 10 immer frei bleiben und die Matrix in einer oberen und unteren sowie einen linken und rechten Teil teilen.

Spalte 18 beinhaltet das Paritätsbit der jeweiligen Zeilen. Gibt es eine ungerade Anzahl von Yellow Dots in einer Zeile, ist es gesetzt; ansonsten bleibt es leer. Die L-Zeilen werden nicht mit in die Paritätsberechnungen einbezogen.

Der obere Teil, also Zeilen 22 bis 17 kodieren den Druckerhersteller und das Modell und sind für alle Drucker eines Modells gleich, wenn nicht sogar für alle Drucker eines Herstellers.

Der untere Teil enthält Daten, die noch nicht dekodiert werden konnten.

Die Daten sind in dieser Matrix-Art nicht horizontal oder vertikal angeordnet, sondern in kleinere Quadranten mit 8 Feldern (2 breit, 4 hoch), die ich hier Oktetts nennen möchte. Buck nummeriert jeweils eine Vierergruppe Oktetts wie rechts eingezeichnet als L1, L2, L3 und L4 für links und R1, R2, R3 und R4 für rechts, jeweils von oben nach unten, getrennt durch Spalte 10.

Die nicht in die (grün gekennzeichneten) Bereiche L1 bis R4 fallende Zeile 1, 6 und 11 enthalten Paritäten für die darüber liegenden L/R-Teilbereiche (Oktetts). Dabei muss die Anzahl der Dots im Oktett plus die Anzahl der Paritätsbits eine gerade Anzahl ergeben. Oder anders gesagt: ist die Anzahl der Dots im Oktett Null oder gerade, muss noch ein Paritäts-Dot gesetzt werden. Dafür stehen zwei Stellen zur Verfügung: links unter dem Oktett oder rechts unter dem Oktett.

Welches der beiden möglichen Dots dabei gesetzt wird, ergibt sich, wenn man viele Dot-Matrizen übereinander legt. Dann wird ersichtlich, dass nur nur die Hälfte der Positionen benutzt wird und zwar in einem Schachbrett-Muster.

Damit wird auch klar, dass pro Oktett nur maximal vier Dots gesetzt werden können. Das heißt, dass hier nicht 28, also 256 Kombinationen, sondern nur 24, also 16 Kombinationen nutzbar sind. Dies reicht leicht, um die dezimalen Zahlen von null bis neun darstellen zu können.



Hier ist jeweils nur ein Bit gesetzt und L1 und R1 haben den selben Wert, den man als 8-2-1-4, 8-2-1-4 interpretieren kann.

In den oberen Bereich über Zeile 16 fällt Druckerhersteller und -modell auf die Teilbereiche L1 und R1. Für HP Laserdrucker kann man hier stets Werte wie oben gezeigt ablesen.

Folgende weitere L1/R1-Bereiche sind für folgende Druckermodelle bekannt geworden:


Kyocera Farblaserdrucker: 1-8-2-4, 1-8-2-4


Lexmark C912 Farblaserdrucker: 1-4-2-8, 1-4-2-8

Buck konnte in den Teilbereichen L2 und R2 durch Experimente außerdem noch das Druckermodell für Hewlett Packard Drucker ausmachen. (8). Für Datum und Zeit oder Seriennummer konnte er keine Anhaltspunkte finden.

Aus obigen Beispiel ließen sich L3 und R3 zusammensetzen zu 14-0-0-1/5-2-8-0 (L3/R3) bzw. 1-12-0-2/0-12-2-1 (L4/R4). Das Werte über 9 dabei herauskommen, spricht aber nicht für eine gültige Interpretation. Bei umgekehrter Bitreihenfolge (höherwertigstes Bit oben) ergäbe das Muster 7-0-0-8/12-4-1-0 (L3/R3) bzw. 8-3-0-4/0-3-4-8 (L4/R4), wobei auch hier die 12 stört.

Weitere Yellow-Dot Kodierungen

Es gibt noch weitere Yellow-Dot Kodierungen wie die "skewed small" genannte für Canon Drucker, die "big triangle" genannte für den Canon ImageRUNNER C3220-C1, die "double type" genannte für Minolta ColorForce-Drucker oder die "corner" genannte für Minolta und Epson Drucker. Diese konnte bislang alle nicht oder erst zu kleinem Teil dekodiert werden.

Quellen, Literaturverweise und weiterführende Links

(1) Liste der betroffenen Drucke beim EFF
(2) Artikel von ORF.at: Forscher hebeln versteckte Daten in Ausdrucken aus
(3) Datenschleuder Nr. 86, 2005: Frank Rosengart: Datenspur Papier (Seite 19)
(4) CNN: What we know about Reality Winner
(5) PCWorld 2004: Dutch track counterfeits via printer serial numbers
(6) BZ Berlin 2011: Moschee-Zündler: So wurde er enttarnt
(7) Süddeutsche Zeitung 2020: Iraker in Wien wegen Anschlagsserie auf ICE-Züge vor Gericht
(8) Peter Buck, Saxion University of Applied Sciences, 2018: Printer Steganography Reverse Engineering the Machine Identification Code
(9) EFF: DocuColor Tracking Dot Decoding Guide
Druckerchannel.de: Code Bei Farblasern entschlüsselt
Publikationen des EFF zu dem Thema
Weitere Beispiele von Yellow-Dot-Matrizen bei dys2p.com
Cipherbrain Blog von Klaus Schmeh: Neues zu den gelben Punkten auf Laser-Ausdrucken