
Fahrkarten-Codes: offline prüfen, im Zug kontrollieren
Eine Sperre in einer gut ausgelasteten U-Bahn-Station lässt etwa dreißig Menschen pro Minute durch, und sie steht oft zwei Ebenen unter der Erde ohne brauchbares Netz. Diese zwei Tatsachen entscheiden fast alles darüber, wie ein Fahrkartencode gebaut ist: Die Sperre kann keinen Server fragen, ob die Karte echt ist, und sie hat auch keine Zeit dafür.
Die Sperre kann nicht nach Hause telefonieren
Veranstaltungstickets funktionieren meist über Nachschlagen. Der Code trägt eine lange Zufallskennung, der Scanner schickt sie an einen Server, der Server antwortet gültig oder schon benutzt. Dieses Modell ist das Thema von wie die Ticketprüfung abläuft, und es ist das richtige Modell für eine Konferenztür mit WLAN und einer Warteschlange, die sich abfedern lässt.
Eine Sperre im Nahverkehr ist ein anderer Raum. Sie steht in einem Tunnel, in einem Zwischengeschoss unter einer Betondecke oder in einer Station, deren Anbindung bei Bauarbeiten am Gleis ausfällt. Vierzig Sperren, die um 08:40 alle denselben zentralen Dienst treffen, sind zudem ein Verkehrsmuster, von dem niemand den Berufsverkehr abhängig machen möchte. Also verlagern die Verkehrsbetriebe die Entscheidung nach unten in die Sperre. Das Gerät vor Ihnen entscheidet, lokal, ohne einen Umweg durch das Netz. Für den Entwerter im Bus gilt dasselbe, nur schärfer, weil der sich zusätzlich bewegt.
Signiert, nicht nachgeschlagen
Entscheidet die Sperre selbst, muss die Fahrkarte ihren Beweis mitbringen, und genau das ist eine signierte Nutzlast. Im Code stehen die Ticketdaten: Produktart, Gültigkeitszeitraum, Zonen- oder Linienberechtigung, Ausgabezeit, eine Seriennummer. Daneben steht eine kryptografische Signatur, erzeugt mit einem Schlüssel, den der Herausgeber hält. Jede Sperre hält den passenden Prüfschlüssel.
Die Kontrolle ist Rechnen auf Daten, die die Sperre schon hat. Sie kostet einen Bruchteil einer Millisekunde und braucht nichts aus dem Netz. Bewiesen wird damit die Urheberschaft: Der Betrieb hat das ausgegeben, und seither ist kein einziges Byte geändert worden. Nicht bewiesen wird Frische. Eine Signatur sagt nichts darüber, ob dieselbe Fahrkarte vor neunzig Sekunden durch Sperre 12 gegangen ist.
Um die Frische kümmert sich eine Schicht darüber. Sperren führen eine lokale Liste der Seriennummern, die sie schon durchgelassen haben, und tauschen diese Liste mit dem Stationsrechner in dem Takt aus, den das System vorgibt, manchmal Sekunden, manchmal Minuten. Eine Fahrkarte, die zweimal an derselben Sperre vorgezeigt wird, weist die Sperre sofort ab. An zwei Sperren innerhalb eines Abgleichfensters vorgezeigt, kommt sie möglicherweise durch beide. Die Betriebe nehmen diese Lücke absichtlich in Kauf, denn sie zu schließen heißt, jeden Einlass von einem Netz abhängig zu machen, das die Station nicht zusichern kann. Dieselbe Abwägung erscheint von der anderen Seite her in ob QR-Codes ohne Internet funktionieren.
Das Budget an der Sperre ist optisch, nicht rechnerisch
Der ganze Vorgang, vom Hochhalten des Telefons bis zum Freigeben des Drehkreuzes, hat ein paar hundert Millisekunden, bevor die Schlange hinter Ihnen es bemerkt. Die Signaturprüfung ist der billigste Posten auf dieser Liste. Teuer ist es, ein sauberes Bild zu bekommen.
Einen Code zu lesen ist eine Schleife über Videobilder: belichten, fokussieren, das Bild per Schwellenwert in Dunkel und Hell trennen, die drei Eckquadrate suchen, das Raster abtasten, Fehler korrigieren, dekodieren. Bei dreißig Bildern pro Sekunde kostet jeder Fehlversuch etwa dreiunddreißig Millisekunden, der Unterschied zwischen einem Treffer im ersten Bild und einem im zehnten ist also der Unterschied zwischen einer Sperre, die sich sofort anfühlt, und einer, die beschimpft wird. An der Fahrkarte ändert das nichts. Am Bild schon.
Also lohnt es sich, den Teil zu kennen, den der Fahrgast selbst steuert. Halten Sie das Display flach und parallel zum Lesefenster statt schräg. Füllen Sie das Fenster aus, denn die meisten Lesegeräte an Sperren haben eine feste Brennweite und eine geringe Schärfentiefe, und ein zu weit weg gehaltener Code ist ein kleiner Code. Halten Sie einen Moment still, statt das Telefon vorbeizuziehen, denn ein Vorbeiziehen liefert dem Lesegerät in jedem Bild Bewegungsunschärfe.
Helligkeit, und ein gesprungenes Display
Ein Telefondisplay ist ein Leuchtmittel, und das Lesegerät unter dem Glas der Sperre hat meist seine eigene Beleuchtung, die von unten direkt dagegen zeigt. Diese zwei Lichtquellen kämpfen gegeneinander. Ein Display mit zwanzig Prozent Helligkeit in einer Station, die wie ein Operationssaal ausgeleuchtet ist, gibt dem Lesegerät fast keine Trennung zwischen dunklen und hellen Modulen, und die automatische Helligkeit ist noch nicht nachgezogen, weil Sie das Telefon gerade erst geweckt haben. Stellen Sie die Helligkeit auf Maximum, bevor Sie an der Sperre stehen. Manche Nahverkehrs-Apps tun das von selbst, solange eine Fahrkarte auf dem Schirm liegt, was ein gutes Zeichen für die App ist.
Ein Sprung quer über den Code ist ein härteres Problem, als es aussieht. Die Fehlerkorrektur repariert fehlende oder falsch gelesene Module bis zu einem festen Anteil, und die Stufen und was sie bringen erklären die Rechnung dahinter. Ein Sprung entfernt keine Module, er legt eine helle Glanzlinie darüber, die der Schwellenwert überall dort als Hell liest, wo sie verläuft. Schieben Sie den Code auf einen unbeschädigten Teil des Displays, wenn die App Scrollen oder Drehen zulässt, und kippen Sie das Telefon um ein paar Grad, damit die eigene Lampe des Lesegeräts am Sprung irgendwohin spiegelt und nicht zurück in das Objektiv. Läuft der Sprung durch ein Eckquadrat, findet die Sperre den Code überhaupt nicht, und dann ist der Schalter die Antwort. Codes von einem anderen Bildschirm ablesen behandelt dieselbe Physik im allgemeinen Fall.
Warum ein Screenshot manchmal funktioniert
Das ist die Frage, die alle stellen, und die Antwort hängt wirklich von Bedingungen ab.
Ein Screenshot funktioniert, wenn die Fahrkarte eine feste signierte Nutzlast ist und die Sperre offline prüft. Die Signatur im Bild ist weiterhin gültig, die Sperre hat keine Möglichkeit zu erkennen, dass es eine Kopie ist, und die Schranke öffnet. Es ist dieselbe Eigenschaft, die die Fahrkarte im Tunnel funktionieren lässt.
Ein Screenshot scheitert, wenn eines von drei Dingen zutrifft. Der Code wechselt, dann ist der aufgenommene innerhalb von Sekunden veraltet. Die Sperre hat das Netz doch erreicht, die Seriennummer bereits als benutzt markiert gefunden und abgewiesen. Oder der Betrieb bindet die Fahrkarte an ein Gerät oder an eine laufende App-Sitzung, dann ist das Quadrat auf dem Display nicht das Einzige, was geprüft wird.
Praktisch heißt das für den Fahrgast: Ein Screenshot ist eine vernünftige Rückfalllösung gegen eine abgestürzte App oder ein WLAN-Anmeldeportal und ein schlechter Plan als einzige Fahrkarte. Für den Betrieb heißt es: Offline signierte Fahrkarten und eine strikt einmalige Nutzung können nicht beide gleichzeitig vollständig sein.
Ohne Sperre: Kontrolle im Zug und das Deutschlandticket
Der beschriebene Aufbau gilt auch hier, nur steht am Anfang eine andere Entscheidung: In Deutschland gibt es kaum Sperren. Bus, Straßenbahn, S-Bahn und Fernzug arbeiten mit offenem Zugang und Kontrolle im Fahrzeug, und das verschiebt jede Anforderung.
Der Durchsatz hört auf, das Problem zu sein. Niemand steht in einer Schlange vor einer Schranke; eine Prüfkraft geht durch den Wagen und liest ein Display nach dem anderen mit einem Handgerät. Dafür wird die Umgebung schlechter: Sonnenlicht durch das Fenster, ein Fahrgast, der das Telefon schräg hält, ein Display mit Sprüngen, ein Gerät im Stromsparmodus mit heruntergedimmter Helligkeit. Wer ein Ticketsystem baut, hat hier die Helligkeitsfrage vor der Geschwindigkeitsfrage, und eine App, die vor dem Anzeigen des Codes selbst die Helligkeit hochsetzt, ist kein Detail, sondern der Unterschied zwischen zwei und zwanzig Sekunden.
Der zweite Punkt betrifft das Symbol. Fernverkehrstickets tragen hier gar keinen QR-Code, sondern ein Aztec-Symbol nach einer internationalen Bahnspezifikation, und es ist genauso signiert und wird genauso ohne Netz geprüft. Wer also fragt, warum sein Ticket nicht wie ein QR-Code aussieht: Es ist derselbe Mechanismus in einer anderen Symbologie, die auf einem schmalen Streifen weniger Platz braucht.
Der dritte Punkt ist das Deutschlandticket, und es entscheidet die Screenshot-Frage für den Alltag. Es ist als digitales Ticket gedacht, auf einer Chipkarte oder im Handy, personengebunden und nicht übertragbar. Selbst ein technisch gültiges Abbild nützt einer zweiten Person deshalb nichts, weil die Prüfkraft die Bindung an eine Person kontrolliert und nicht nur die Signatur. Für Verkehrsverbünde heißt dasselbe, dass ein Barcode-Ticket ein Übergangsweg ist und kein Ziel.
Für kleine Betreiber, etwa Museumsbahnen, Fähren, Bergbahnen oder Vereinsveranstaltungen, folgt daraus eine erfreuliche Nachricht: Sie brauchen keine Sperre und kein wechselndes Geheimnis. Ein signierter, einmal gültiger Code, der auf einem Handgerät ohne Netz geprüft wird, deckt Ihren Fall vollständig ab, und der Aufwand liegt in der Prüfsoftware und nicht in der Infrastruktur.
Wechselnde Codes und der Konto-Tap, mit dem sie konkurrieren
Eine wechselnde Fahrkarte erzeugt ihren Code alle paar Sekunden neu, aus einem Geheimnis in der App und aus der Uhr. Die Lesegeräte prüfen ihn ohne Netz, weil sie dasselbe Geheimnis halten und sich über die Zeit einig sind, und ein Screenshot ist fast sofort wertlos. Die Kosten landen vollständig beim Fahrgast: eine App, ein Konto, ein geladener Akku und irgendwann vor der Fahrt eine Verbindung, um das Geheimnis zu beziehen. Große Systeme zahlen das. Kleine sollten fragen, was sie dafür bekommen, und das ist dieselbe Rechnung wie beim Check-in bei Veranstaltungen.
Und dann gibt es das, was an der Sperre genauso aussieht und überhaupt keine Fahrkarte ist. Beim kontobasierten Fahren kennzeichnet der Code ein Konto und nicht eine Fahrt. Die Sperre prüft keinen Fahrpreis; sie prüft, ob diese Kennung auf der lokalen Positivliste steht, öffnet und meldet den Tap. Den Fahrpreis berechnet später das Hintergrundsystem, und deshalb können solche Systeme eine Tagesobergrenze setzen, im Rückblick das günstigere von zwei Produkten abrechnen und ein Guthaben kurz ins Minus laufen lassen. Ein Fahrkartencode antwortet auf die Frage, ob diese Fahrt bezahlt ist. Ein Kontocode antwortet auf die Frage, ob dieser Fahrgast in Ordnung ist. Beides sind schwarzweiße Quadrate, die Maschinerie dahinter hat fast nichts gemeinsam, und das erklärt, warum ein Betrieb Ihre Berechtigung aus der Ferne richten kann, während ein anderer Ihnen sagt, Sie sollen eine neue Fahrkarte kaufen. In Parkhäusern entsteht dieselbe Verwechslung, wo ein Berechtigungscode und ein Zahlungscode als eine Sache behandelt werden.
Wenn eine Sperre Sie das nächste Mal abweist, merken Sie sich, welcher Fehler es war: gar kein Lesen, das ist Optik, oder ein rotes Licht mit einer Meldung, das ist die Fahrkarte. Das Erste beheben Sie in etwa zwei Sekunden selbst, indem Sie die Displayhelligkeit hochziehen und das Telefon flach gegen das Glas halten. Das Zweite gehört an den Schalter. QRolling gibt keine Fahrausweise für den Nahverkehr aus; unsere Codes decken URLs, Text, Kontaktdaten und den Rest der Liste im Generator ab, und jeder davon ist dynamisch, mit einem im bezahlten Tarif änderbaren Ziel.


