Eine PIN, die sich nicht durchprobieren lässt: SPAKE2 fürs Streaming
Eine vierstellige PIN hat nur 10.000 Werte. Mit SPAKE2-Pairing bekommt ein Angreifer einen Online-Versuch pro PIN und nichts, was er offline knacken kann.
Ein neues Gerät koppelst du mit einer kurzen PIN, die du vom Sofa aus eintippst. Eine vierstellige PIN hat aber nur 10.000 Werte. Gibt das Pairing irgendetwas preis, das ein Angreifer offline testen kann, fallen alle 10.000 in Millisekunden.
Warum einfaches PIN-Pairing schwach ist
Einen Hash der PIN senden oder einen bekannten Wert damit verschlüsseln gibt einen Verifier preis: Wer den Handshake mitschneidet, probiert in aller Ruhe jede PIN dagegen. GameStream, das Protokoll von Moonlight, koppelt über unverschlüsseltes HTTP, deshalb ist es bei Punktfunk ab Werk aus.
SPAKE2: die PIN beweisen, ohne sie zu senden
Punktfunk koppelt mit SPAKE2, einem Password-Authenticated Key Exchange. Beide Seiten mischen die PIN in einen Schlüsselaustausch und erhalten nur dann denselben Schlüssel, wenn sie dieselbe PIN benutzt haben. Die PIN geht nie über das Netzwerk, und ein falscher Versuch hinterlässt nichts, was sich offline testen ließe.
Ein Angreifer bekommt einen Online-Versuch, gegen deinen Host, in Echtzeit. Jeder Versuch verbraucht die PIN, und eine unbenutzte PIN läuft nach zwei Minuten ab.
Beide Geräte sind gebunden
Jede Seite behält ihr Zertifikat über Neustarts hinweg. Der Austausch bindet beide Fingerprints in den Schlüssel, deshalb kommt eine Maschine dazwischen mit eigenem Zertifikat nicht durch. Nach dem Pairing pinnt jede Seite den Fingerprint der anderen.
Danach laufen Verbindungen still und in beide Richtungen authentifiziert. Der Host weist ungekoppelte Geräte ab, und ändert sich der Fingerprint eines Hosts, verlangt der Client ein neues Pairing.
Freigeben statt tippen
Wähl auf dem Gerät Request access und gib es dann in der Web-Konsole unter Geräte mit Freigeben frei. Eine Anfrage mit From the internet hat kein Freigeben, weil ihr Name nichts beweist: Arm PIN erzeugt eine PIN, die nur dieses Gerät nutzen kann.
Trust-on-First-Use, nur wenn du willst
In einem Netz, dem du voll vertraust, startest du den Host mit serve --open. Die Apps für Apple, Linux und Android zeigen dann beim ersten Verbinden seinen Fingerprint, und wer ihm vertraut, pinnt ihn. Einem Host, der Pairing verlangt, bieten Clients das nie an.
Alle Schritte stehen im Pairing-Leitfaden. Einen Freund von außen reinlassen: Mit Freunden übers Internet spielen.