Blog

PIN-Pairing, das sich nicht durchprobieren lässt: SPAKE2 fürs Game-Streaming

Eine vierstellige PIN klingt schwach — nur 10.000 Kombinationen. So koppelt punktfunk ein neues Gerät mit einer PIN, die du vom Sofa aus eintippst, und gibt einem Angreifer dennoch nur einen einzigen Online-Versuch und keine Offline-Wörterbuchattacke — dank eines PAKE, das die Zertifikate beider Geräte aneinander bindet.

Ein neues Gerät mit dem Streaming-Host zu koppeln sollte so einfach sein wie das Eintippen eines kurzen Codes vom Sofa aus. Aber „kurz“ und „sicher“ ziehen meist in entgegengesetzte Richtungen: Eine vierstellige PIN hat nur 10.000 Kombinationen, und wenn das Pairing-Verfahren irgendetwas preisgibt, das ein Angreifer offline testen kann, fallen diese 10.000 Versuche in Millisekunden. punktfunk nutzt eine kurze PIN und macht Brute-Force trotzdem zwecklos. So funktioniert das.

Warum naives PIN-Pairing schwach ist

Der naheliegende Ansatz — einen Hash der PIN senden oder einen bekannten Wert damit verschlüsseln — gibt einen Verifier preis: etwas, gegen das ein Angreifer, der den Handshake mitgeschnitten hat, offline rechnen kann, indem er alle 10.000 PINs auf eigener Hardware durchprobiert, bis eine passt. Das reverse-engineerte GameStream-Pairing hatte verwandte Schwächen, und auf der Vertrauensseite akzeptiert GameStreams TLS praktisch jedes Client-Zertifikat. Ein kurzes Geheimnis ist nur dann sicher, wenn ein falscher Versuch dem Angreifer nichts verrät.

PAKE: beweisen, dass man die PIN kennt, ohne sie zu verraten

punktfunk koppelt mit SPAKE2, einem Password-Authenticated Key Exchange. Die Idee hinter einem PAKE ist einfach gesagt und schwer gebaut: Beide Seiten führen einen Schlüsselaustausch durch, der mit der PIN gewürzt ist, und erhalten nur dann denselben gemeinsamen Schlüssel, wenn sie dieselbe PIN verwendet haben. Die PIN selbst geht nie über das Netzwerk — und entscheidend: Eine falsche PIN erzeugt nichts, was sich offline testen ließe. Es gibt keinen mitgeschnittenen Verifier zum Durchrechnen.

Das verändert die Rechnung vollständig. Statt 10.000 Offline-Versuchen bekommt ein Angreifer genau einen Online-Versuch pro Pairing: Er muss tatsächlich in Echtzeit mit deinem Host sprechen, und ein Fehlversuch ist einfach ein gescheitertes Pairing. Die PIN ist einmalig — eine gescheiterte oder abgeschlossene Zeremonie lässt keine herumliegen, die man erneut probieren könnte.

Was die Zeremonie tatsächlich aneinander bindet

Ein Pairing bedeutet nicht nur „die PIN hat gepasst“. Jede Seite hat eine dauerhafte Identität — ein Zertifikat, das sie über Neustarts hinweg behält. Der SPAKE2-Austausch bindet beide Fingerprints aneinander: den des Hosts und den des Clients. Gelingt die Zeremonie, pinnt jede Seite das Zertifikat der anderen. Von da an erkennen sich die beiden kryptografisch, und die PIN hat ihre Aufgabe erfüllt und ist verschwunden.

Nach dem Pairing: still, beidseitig und gepinnt

Einmal gekoppelt, ist das erneute Verbinden still — keine PIN, keine Abfrage — weil sich beide Seiten über das während der Zeremonie gepinnte Zertifikat authentifizieren. Der Host führt eine Liste gekoppelter Fingerprints und verweigert standardmäßig Sitzungen von Geräten, die nicht darauf stehen. Ändert sich der Fingerprint eines Hosts jemals (eine Neuinstallation — oder etwas Schlimmeres), vertraut der Client dem neuen nicht stillschweigend, sondern erzwingt bewusst ein erneutes Pairing.

Trust-on-First-Use — aber nur, wenn du es willst

In einem voll vertrauenswürdigen LAN kannst du stattdessen Trust-on-First-Use aktivieren: Der Host signalisiert, dass er offen ist, und der Client bietet für die erste Verbindung ein „Vertrauen“ mit einem Tipp an. Das ist eine bewusste Entscheidung des Hosts, nicht der Standard — neue Hosts machen ab Werk PIN-Pairing, und Clients bieten die TOFU-Abkürzung nur für einen Host an, der angekündigt hat, dass er sie erlaubt.

Vom Sofa aus freigeben

Weil der Host oft headless läuft, kannst du ein Pairing auch über die Web-Konsole freigeben: Ein ungekoppeltes Gerät erscheint als ausstehende Anfrage, und ein Klick gibt es frei und pinnt es. Die vollständige Anleitung gibt es im Pairing-Leitfaden.