1. Kopplung: Vertrauen beginnt am Bildschirm des Mac
- Jedes Gerät hat sein eigenes P-256-Schlüsselpaar. Der private Schlüssel des iPhone wird in der Secure Enclave erzeugt und kann nicht exportiert werden; auf Geräten ohne Secure Enclave liegt er im Schlüsselbund, beschränkt auf dieses Gerät. Der private Schlüssel des Mac liegt in einer Datei, die nur dein Benutzeraccount lesen kann.
- Die ID des Mac wird aus seinem öffentlichen Schlüssel abgeleitet (die ersten 16 Bytes des SHA-256-Hashwerts des Schlüssels). Der Vermittlungsdienst lässt den Mac per Signatur nachweisen, dass ihm diese ID gehört, sodass niemand sie für sich beanspruchen oder sich als dieser Mac ausgeben kann.
- Der QR-Code zum Koppeln erscheint ausschließlich auf dem Bildschirm des Mac. Er enthält die ID des Mac, den Fingerabdruck seines öffentlichen Schlüssels und einen 32 Byte langen Kopplungsschlüssel, der 5 Minuten gültig ist und nur einmal funktioniert.
- Nach dem Scannen berechnet das iPhone mit dem Kopplungsschlüssel einen HMAC-SHA256 über den Fingerabdruck seines eigenen Schlüssels. Das beweist, dass es den Code gesehen hat, und bindet den Nachweis an seinen öffentlichen Schlüssel, sodass niemand dazwischen einen anderen Schlüssel unterschieben kann. Der Mac prüft den Nachweis und speichert den öffentlichen Schlüssel des iPhone.
- Ab dann akzeptiert jede Seite nur noch den öffentlichen Schlüssel der anderen. Es gibt keine Passwörter und keine Accounts, die sich per Phishing oder Credential Stuffing angreifen ließen; um ein weiteres iPhone hinzuzufügen, muss jemand am Mac stehen und den Code scannen.
2. Was bei jeder Verbindung passiert
- Zuerst Face ID. Vor jeder Verbindung fragt das iPhone nach Face ID oder dem Gerätecode, und erneut, wenn du nach mehr als 5 Minuten im Hintergrund zurückkehrst.
- Eine signierte Anfrage. Das iPhone signiert mit seinem Secure-Enclave-Schlüssel eine Anfrage: einen Zeitstempel, eine zufällige Nonce, einmalige Zugangsdaten für die Verbindung und seine Netzwerkadressen. Der Vermittlungsdienst reicht sie an den Mac weiter. Die Adressen sind von der Signatur abgedeckt, sodass der Dienst den Mac nicht woandershin lenken kann.
- Der Mac entscheidet. Er akzeptiert nur einen gekoppelten Schlüssel, einen Zeitstempel innerhalb von 2 Minuten und eine Nonce, die er noch nie gesehen hat, sodass alte Anfragen nicht wiederholt werden können. Erst dann öffnet er einen UDP-Port und schließt ihn wieder, wenn innerhalb von 30 Sekunden keine Sitzung beginnt.
- Einen Weg finden. Beide Seiten probieren gleichzeitig das lokale Netzwerk, einen direkten Weg durch die Router per STUN-Hole-Punching und ein Cloudflare-TURN-Relay. Funktioniert ein direkter Weg innerhalb von 0,6 Sekunden, gewinnt er; sonst wird der erste funktionierende Weg genommen, und DuoDesk wechselt auf einen direkten Weg, falls sich in den nächsten 10 Sekunden einer findet. Zugangsdaten für das Relay werden erst ausgegeben, nachdem der Mac angenommen hat.
- Eine verschlüsselte Sitzung. Über diesen Weg bauen die beiden eine QUIC-Verbindung (TLS 1.3) auf. Jede Seite legt ihr Zertifikat vor und prüft, ob der öffentliche Schlüssel der anderen genau der beim Koppeln gespeicherte ist. Ist er es nicht, wird die Verbindung abgebrochen.
- Selbstheilend. Jede Sitzung hält einen Ersatzweg über das Relay bereit und wechselt darauf, wenn auf dem Hauptweg etwa eine Sekunde lang keine Antwort kommt. Ändert sich das Netzwerk, verbindet sich die App von selbst neu, und deine Eingaben werden in der Zwischenzeit nicht gesendet.
3. Falls unsere Server kompromittiert wären
DuoDesk ist unter der Annahme entworfen, dass der Vermittlungsdienst und das Relay bereits kompromittiert sind. Verschlüsselung und Identitätsprüfung finden nur zwischen deinem iPhone und deinem Mac statt; die Server besitzen keinen Schlüssel, mit dem sie eine Sitzung entschlüsseln oder sich als ein Gerät ausgeben könnten.
Was sie nicht können
- Deinen Bildschirm, deine Eingaben oder deine Zwischenablage sehen: Sitzungen sind Ende-zu-Ende-verschlüsselt, mit Schlüsseln, die nur auf den beiden Geräten existieren.
- Sich als dein Mac oder dein iPhone ausgeben: Beide Seiten prüfen den beim Koppeln gespeicherten öffentlichen Schlüssel.
- Ein neues iPhone mit deinem Mac koppeln: Dafür braucht es den Einmalschlüssel, der nur auf dem Bildschirm des Mac angezeigt wird.
- Eine alte Verbindungsanfrage wiederholen: Jede Anfrage trägt einen Zeitstempel und eine einmalige Nonce.
Das Schlimmste, was sie tun können
- Verbindungen scheitern lassen.
- Erfahren, welche IP-Adresse sich wann mit welchem Mac verbunden hat.
- Einen falschen Aufgabenstatus auf deiner StandBy-Anzeige zeigen: Pushes für Live-Aktivitäten gehen über den Dienst, der den Push-Schlüssel hält, an Apple.
Was der Dienst im normalen Betrieb sieht und speichert, steht in der Datenschutzerklärung.
4. Was der Vermittlungsdienst darf
- Er läuft auf Cloudflare Workers, mit einem Durable Object pro Mac. Der Mac baut nur ausgehende Verbindungen zu ihm auf und registriert sich mit einer Signatur; der Dienst braucht nie einen Kopplungsschlüssel oder den privaten Schlüssel eines Geräts und bekommt auch keinen.
- Verbindungsanfragen werden unverändert an den Mac weitergereicht; das einzige Feld, das der Dienst liest, ist das Push-Token.
- Zugangsdaten für das Relay (TURN) werden erst ausgegeben, nachdem der Mac eine Verbindung angenommen hat, und laufen nach 12 Stunden ab.
- Das Push-Relay lässt nur Pushes für Live-Aktivitäten durch, nur an iPhones, die sich mit diesem Mac verbunden haben (der Dienst speichert nur einen Hash jedes Tokens), und nur auf Kanälen, die dieser Mac angelegt hat. Der Push-Schlüssel bleibt im Dienst, statt mit der Mac-App ausgeliefert zu werden.
- Grenzen gegen Missbrauch: höchstens 30 Verbindungsanfragen pro Minute von einer IP-Adresse an einen Mac, höchstens 8 ausstehende Verbindungen pro Mac und Nachrichten von höchstens 8 KB.
5. Schutzmaßnahmen auf dem Mac
- Keine offenen Ports im Internet. Normalerweise hat der Mac eine einzige ausgehende Verbindung zum Vermittlungsdienst. Der QUIC-Listener der Sitzung ist an die Loopback-Adresse gebunden, und der nach außen gerichtete UDP-Port öffnet sich nur für eine verifizierte Anfrage.
- Sichtschutz. Während du verbunden bist, setzt DuoDesk die Gammatabellen der physischen Displays auf Schwarz. Gamma wirkt erst, nachdem das Bild zusammengesetzt wurde, daher bleibt unberührt, was auf deinem iPhone ankommt, und macOS stellt Gamma von selbst wieder her, wenn DuoDesk Host beendet wird oder abstürzt, sodass der Bildschirm nicht dunkel bleiben kann.
- Sperren beim Trennen, Zeitlimit bei Inaktivität. Wenn du die Verbindung trennst, kann DuoDesk den Mac sofort sperren, mit demselben Mechanismus wie der Systembefehl „Bildschirm sperren“. Nach 15 Minuten ohne Eingabe endet die Sitzung von selbst.
- Sichtbare Verbindungen. Das Menüleistensymbol ändert sich, solange jemand verbunden ist, und jede Verbindung, jede Trennung und ihr Grund landen im lokalen Verbindungsprotokoll des Mac.
- Signiert und notarisiert. DuoDesk Host ist mit einer Developer ID signiert, von Apple notarisiert und läuft mit der Hardened Runtime. Um deine Eingaben auszuführen, braucht es die Berechtigung „Bedienungshilfen“, die Apps in einer Sandbox nicht bekommen können; deshalb ist es nicht im Mac App Store, und du lädst es stattdessen von dieser Website.
6. Bild, Eingabe und Messwerte
- Der Bildschirm wird mit ScreenCaptureKit mit bis zu 60 fps erfasst, wobei keine Frames gesendet werden, solange sich nichts ändert, und von VideoToolbox in Hardware als H.264 oder HEVC codiert – mit Ratensteuerung für niedrige Latenz, ohne B-Frames und mit einer Bitrate, die sich an das Netzwerk anpasst.
- Der Mac kann ein virtuelles Display hinzufügen, das der Auflösung deines iPhone entspricht und 1:1 ohne Skalierung angezeigt wird.
- Der Zeiger wird sofort auf dem iPhone gezeichnet und danach mit dem Mac abgeglichen, sodass er nie auf das Netzwerk wartet; das iPhone zeichnet mit 120 Hz.
Messwerte
| Szenario | Weg | Umlaufzeit (Median) | Durchsatz |
|---|---|---|---|
| Mac im Coworking-WLAN, iPhone im 5G-Netz | Direkt per Hole Punching, nach etwa 0,1 s offen | 30 ms | 58 Mbps |
| Beide im selben Coworking-WLAN (Geräte können einander nicht erreichen) | Cloudflare-Relay, nach etwa 1 s | 18 ms | 69 Mbps |
Gemessen im Oktober 2026 in Singapur auf der Transportschicht von DuoDesk (QUIC über Hole Punching oder das Relay). Der Bildschirmstream nutzt standardmäßig 12 Mbps. Deine Ergebnisse hängen von deinem Netzwerk ab.
7. Bekannte Einschränkungen
- Am Mac muss ein Benutzer angemeldet sein; ein gesperrter Bildschirm ist kein Problem. Ein Mac mit FileVault bleibt nach einem Neustart am Entsperrbildschirm stehen, bevor ein Netzwerk verfügbar ist, und dort erreicht ihn kein Fernzugriffswerkzeug.
- DuoDesk verbindet sich über UDP, daher funktionieren Netzwerke nicht, die UDP vollständig blockieren.
- Etwa alle 30 Tage bittet macOS darum, die Bildschirmaufnahme erneut zu bestätigen; blockiert das das Bild, muss jemand direkt am Mac auf „Erlauben“ klicken.
- Der Vermittlungsdienst kann Verbindungsmetadaten sehen (siehe Abschnitt 3).