Im kanadischen Bundesstaat Quebec werden Restaurant-Quittungen ausgestellt, auf denen sich seltsame Codes befinden. Was diese bedeuten, ist anscheinend nicht öffentlich bekannt. Man kann nur spekulieren.

English version (translated with DeepL)

Die Stadt Montreal in Kanada ist gleich zweimal auf meinem mit Christian Baumann erstellten Cryptologic Travel Guide vertreten. Zum einen gibt es dort den berühmten Fuck-You-Grabstein, und zum anderen kann man in einer dortigen Bibliothek das verschlüsselte Gebetbuch von Fabyan Humphreys bewundern.

Quelle/Source: McGill

 

Der Code

Blog-Leser und Friedman-Ring-Träger Christoph Tenzer hat mich nun dankenswerterweise darauf hingewiesen, dass es in Montreal derzeit eine weitere Sache gibt, die Krypto-Interessierte (und nicht nur diese) beschäftigt. Es geht um Quittungen, die in Restaurants ausgestellt werden. Hier ist ein Beispiel (relevant ist die unterste Zeile):

Quelle/Source: Tenzer

In der letzten Zeile ist eine seltsame Symbolfolge zu sehen. Christoph schreibt dazu: “Am Ende jeder Restaurantquittung in der Provinz Quebec steht wohl seit etwa 10 Jahren der Barcode, der den Text darüber und darunter beinhaltet und wohl auch nochmal verschlüsselt/signiert. Ganz unten ist aber immer auch eine Reihe von 12 Zeichen, die wohl einem interessanten Symbolfont entnommen sind.”

Hier sind einige weitere Beispiele, die mir Christoph zur Verfügung gestellt hat:

Quelle/Source: Tenzer

 

Was steckt dahinter?

Christoph konnte dazu im Internet zwar viele Fragen, aber keine Antworten finden. Hier sind ein paar Beispiele für Diskussionen zum Thema. Anscheinend ist nicht öffentlich bekannt, wie der Code funktioniert. Es handelt sich damit um ein undokumentiertes Feature der Quittungsdrucker und erinnert an die gelben Punkte, die viele Druckermodelle ausdrucken.

Das Alphabet muss recht groß sein, denn es kommen kaum Wiederholungen vor. Ein Reddit-User geht davon aus, dass 256 unterschiedliche Symbole existieren, ein anderer vermutet sogar, dass es 4096 sind.

Eine mögliche Erklärung ist, dass die Symbole eine Prüfsumme (Hashwert) über den Rechnungsbetrag und die sonstigen Inhalte der Rechnung darstellen, mit der ein Prüfer die Korrektheit der Rechnung verifizieren kann. Solange nicht öffentlich bekannt ist, wie der Code funktioniert, würde ein solches Feature das Fälschen einer Rechnung deutlich erschweren bzw. unmöglich machen

Allerdings nutzt man für diesen Zweck normalerweise eine digitale Signatur, und ich nehme an, dass im Barcode eine solche enthalten ist. Wozu braucht man dann noch eine zusätzliche Prüfsumme? Der einzige Vorteil, den ich sehe, ist, dass diese zusätzliche Summe menschenlesbar ist. Sofern das Verfahren nicht zu kompliziert ist, kann ein Finanzbeamter ohne Computer-Unterstützung erkennen, wenn etwas an der Rechnung nicht stimmt.

Doch warum das alles? Handelt es sich vielleicht um eine Rückfall-Lösung für den Fall, dass in der Finanzbehörde keine Computer bzw. keine Smartphones zur Verfügung stehen? Bei einem Ransomware- oder Hacker-Angriff wäre so eine Situation denkbar. Dies würde auch erklären, warum nichts über den Code bekannt. Die Finanzbehörde würde ihre Mitarbeiter erst dann informieren, wenn der besagte Katastrophenfall eingetreten ist.

Oder steckt etwas ganz anderes dahinter?

Fragen über Fragen. Findet ein Leser eine Antwort?


Further readingNeues “Kriminal Digital”-Video: Der gelbe Geheimcode

Linkedin: https://www.linkedin.com/groups/13501820
Facebook: https://www.facebook.com/groups/763282653806483/

Subscribe to Blog via Email

Enter your email address to subscribe to this blog and receive notifications of new posts by email.

Kommentare (12)

  1. #1 Jerry McCarthy
    England, Europa...
    11. August 2022

    In a previous life, I worked on so-called fiscal printers, which is a receipt printer which has sufficient intelligence and memory to store all the transactions for which it prints receipts. To indicate that a receipt is fiscally valid, the printer will print a special code which the printer will prevent the Point of Sale software from printing.

  2. #2 Jerry McCarthy
    England, Europa
    11. August 2022

    A quick Google for “fiscal printers in quebec” finds me a page about SRM’s – Sales Recording Modules.

    I suspect that that is what is going on here.

  3. #3 Jerry McCarthy
    England, Europa
    11. August 2022

    The code looks as though it has been printed using the underlying printer hardware’s graphics printing mode, which is locked-off from the application.

  4. #4 Martin Braun
    11. August 2022

    Die Glyphen sind offenbar Unicode-Zeichen. Es finden sich Zeichen aus verschiedenen Codeblöcken und Sprachen, wie Hebräisch, Griechisch, mathematische Zeichen, Box Drawing und so weiter. Mit zwölf Zwei-Byte-Zeichen ließen sich 192 Bit darstellen. Es ist naheliegend, dass sich um einen Hash-Wert des Barcodes darüber handelt. Der wiederum ist eine eindeutige ID des Zahlungsvorgang und soll Steuerbetrug verhindern. Bei einer Finanzprüfung könnten ein Mensch die Glyphen ohne technisches Lesegerät schnell und einfach mit einer Referenz vergleichen.

  5. #5 Gerry
    12. August 2022

    Here you can see what is in the barcode: https://reverseengineering.stackexchange.com/questions/6856/reverse-engineering-quebec-canada-pdf417-restaurant-bills
    They think the footer below the barcode is a 12*8 = 96 bit hash for human eyes to check if they got a duplicate receipt (which would be a fraud – and there is even an example of the fraud where two friends each drank a tea).

  6. #6 schorsch
    12. August 2022

    Auffällig ist die geringe Anzahl an Wiederholungen innerhalb einer der zwölfstelligen Zeichenfolgen. Ich sehe oben zwar ein paar Wiederholungen zwischen verschiedenen, in keinem Fall aber Wiederholungen innerhalb einer Zeichenfolge.

    Wenn es sich tatsächlich um einen Hashwert handelt (oder schlicht um eine fortlaufende Nummer o. ä.), ist bei einem Zeichensatz von 256 Zeichen zu erwarten, dass in etwa 23%, also knapp einem Viertel aller 12-stelligen Folgen, ein bis drei Zeichen wiederholt auftreten.

    In den hier vorgelegten Beispielen wären also drei Fälle von Wiederholungen zu erwarten – das ist offensichtlich nicht gegeben.

    Wenn es sich um einen Hash handelt, ist also eher von einem Zeichensatz mit 4096 Zeichen auszugehen. In dem Fall wäre nur in ca. 1,5% aller Fälle mindestens eine Wiederholung auf zwölf Zeichen zu erwarten.

  7. #7 Klaus Schmeh
    12. August 2022

    These symbols remind me of a feature some email encryption tools offer: a hash value is displayed with words instead of hex numbers, which makes it easier to compare on the telepphone.

  8. #8 A reader
    United Kingdom
    14. August 2022

    Quebec’s enigmatic receipt code
    Quebec government imposed an obligation from 1 November 2011 for all restuarants to provide a receipt to combat tax fraud.
    A short explanation is provided https://montreal.ctvnews.ca/restaurants-required-to-provide-receipts-1.718839
    A reddit user provides the following explanation https://www.reddit.com/r/montreal/comments/3desic/the_meaning_of_the_symbols_in_restaurant_receipts/.
    Hope this quick answer starts the ball rolling!

  9. #9 Klaus Schmeh
    14. August 2022

    Thanks to all commenters. There seems to be no doubt that we are dealing with a human-readable hash value. However, nobody appears to know what exactly it is used for. Perhaps its purpose is to enable a verifyer to immediately see that two receipts are identical. Or is it a fall-back system for the case that no computer is available?

  10. #10 user unknown
    https://demystifikation.wordpress.com/2022/01/25/karneval-der-zellkulturen/
    14. August 2022

    Ich glaube kaum, dass das als menschenlesbar gedacht ist, denn für 90% der Symbole wüsste ich nicht, wie ich sie benennen soll. “3 vertikale Punkte”, “Promille” oder “groß Sigma”, ja, aber die meisten sind schwer zu beschreiben, insbesondere wenn man nicht den kompletten Zeichensatz kennt. Genügt “Dreieck” oder gibt es noch Dreieck mit der Spitze nach unten? Gibt es vielleicht mehrere mit der Spitze nach oben und sind die dann länger/kürzer oder nicht symmetrisch um die Vertikale? Wenn man 2 Symbolreihen direkt übereinander legt, dann ist der Vergleich leicht.

    Eine Prüfsumme, die im Havariefall genutzt wird, ist extrem unwahrscheinlich, wenn nicht vorher kommuniziert wurde, wie sie zu decodieren ist. Man müsste ja dann im Havariefall die Information ausrollen. Wenn es 4096 unterschiedliche Zeichen gibt, dann ist es für einen Menschen sehr unhandlich, diese in einer Tabelle aufzusuchen. Wie sollten die sortiert sein, wenn man nicht 30 Minuten pro Prüfsumme brauchen soll, um sie zu prüfen?

    Ich kann mir nur vorstellen, dass man 2 Zeichenkolonnen direkt übereinanderlegen kann, und dann auf Identität vergleicht – das geht gut. Für Maschinenlesbarkeit ist der QR-Code viel besser geeignet, in dem üblicherweise Redundanz steckt, um etwa Papierfehler, Beschädigungen oder Verschmutzungen von geringem Umfang zu kompensieren. OCR bei so pixeligen Ausdrucken dürfte sehr fehleranfällig sein.

    Interessant wäre ja, wenn 2 Kunden unmittelbar hintereinander im gleichen Cafe für die gleiche Bestellung ihren Bon vorliegen würden, so dass man sehen kann, ob der Code der gleiche, sehr ähnlich oder ganz unterschiedlich ist. In letztem Falle wäre es wohl ein Hashcode. Wenn entweder die Sekunde, zu der der Bon gebucht wurde oder eine fortlaufende Quittungsnummer (facture no) da einfließt, dann sollte, bei einer vernünftigen Hashcodeimplementierung, sehr unterschiedliche Codes herauskommen.

  11. #11 Christoph
    15. August 2022

    @user unknown: Ein paar der oben im Artikel abgebildeten Quittungen waren direkt nacheinander mit demselben Gerät im selben Restaurant ausgestellt worden. Aber wir hatten nicht dasselbe bestellt, das wäre ein netter Test gewesen. Die Quittungen haben auch alle eine fortlaufende Nummer innerhalb des jeweiligen Geräts – wir waren mehrmals an verschiedenen Tagen da und konnten dadurch die Kundenzahl nachvollziehen, da es nur ein Gerät gab 🙂

    Mein Eindruck ist auch, dass die Symbole einen Hashwert aus den Quittungsdaten darstellen, der dann eigentlich nur noch zum visuellen Abgleich mit von einem Prüfgerät auf der Basis des Barcodes generierten Symbolen taugen kann.

    Ich vermute, dass auch das Verfahren dann geheim sein muss? Aber warum das wohl explizit nur human-readable gemacht wurde? Vielleicht um eine Massen-Analyse von selbst generierten Quittungen zu verhindern? Weshalb vielleicht auch so ein großer Wertebereich gebraucht wird?

  12. #12 schorsch
    16. August 2022

    Die Aussage, es handle sich bei den seltsamen Zeichen um ein “undokumentiertes Feature der Quittungsdrucker”, halte ich für nicht korrekt. Tatsächlich dürfte es sich um ein Feature der Abrechnungssoftware handeln, an dem die Drucker, vom reinen Ausdruck abgesehen, in keiner Weise beteiligt sind.

    Auf den Webseiten der zuständigen Steuerbehörde sind die zulässigen Drucker aufgeführt – ganz normale Bondrucker der verschiedensten Hersteller, wie sie auch hier in Europa vielfach und für verschiedenste Zwecke eingesetzt werden.

    Von einem der Modelle, einem Bixolon / Samsung SRP-350 plus, habe ich mir mal die Codepagetabelle heruntergeladen, welche sämtliche Zeichen enthält, die der Drucker per Firmware generisch drucken kann. Das sind zusammen eine 8- und 29 7-bittige Codepages mit insgesamt 3968 Zeichen, von denen viele aber auf mehreren Codepages mehrfach vorhanden sind.

    Ein ganz erheblicher Teil der in den obigen Beispielen dargestellten Zeichen lässt sich in diesen Codepages nicht finden – offenkundig werden diese Zeichen also nicht vom Drucker, sondern von der ansteuernden Software generiert und als Grafik an den Drucker gesandt.