Peering

Peering / Blog

Cosa può e non può vedere il relay di Peering

Un relay è un server nel mezzo della tua sessione di desktop remoto, quindi la domanda giusta è cosa gli impedisce di guardare. La risposta è una chiave che non riceve mai.

Cosa fa

Il relay svolge tre compiti. Presenta due dispositivi che non possono raggiungersi direttamente, copia i byte tra loro quando ancora non possono, e invia notifiche push per conto di un Mac, come "il tuo agente di coding ha bisogno di una risposta". È un piccolo programma in Rust, e mantenere piccolo il suo compito è il progetto.

Cosa conosce

Essere onesti su questo fa parte del punto. Per fare il suo lavoro il relay vede:

L'informativa sulla privacy li elenca per intero. Nessuno di questi è il contenuto della tua sessione.

Cosa non può vedere

Immagine, audio, appunti, tasti premuti e puntatore stanno tutti dentro un canale cifrato che termina sui tuoi due dispositivi. Il relay non può leggerli, modificarli né riprodurli. Due meccanismi lo rendono vero, e nessuno dei due dipende dal fidarsi del relay.

Il canale di controllo è TLS tra i dispositivi

Quando una sessione passa dal relay, il telefono esegue un handshake TLS 1.3 con il Mac attraverso il relay. Il relay copia i record cifrati senza terminarli, quindi non possiede mai una chiave di sessione. Entrambe le estremità si autenticano con le chiavi che hanno fissato quando li hai associati, quindi il relay non può sostituirsi a uno dei due senza che il telefono rifiuti la connessione.

La chiave del video non passa mai dal relay

Il video percorre un'altra strada, su UDP, quindi ha bisogno di una propria chiave. Quando la sessione è pronta, il Mac crea 32 byte casuali e li invia al telefono dentro lo stream TLS. Il relay trasporta quello stream e non può aprirlo. Ogni direzione ricava poi la propria chiave con HKDF-SHA256, e ogni datagramma è cifrato con ChaCha20-Poly1305 e un contatore.

key = HKDF-SHA256(secret, salt = "pl.dmq.peering.video-datagram", info = direction)
datagram = token | counter | ciphertext | tag

Il token da 16 byte in testa è l'unica cosa che il relay legge. È un'indicazione di instradamento che dice a quale sessione appartiene il datagramma, e il relay lo rimuove prima di inoltrarlo. Tutto ciò che segue è testo cifrato.

La schermata di blocco di un iPhone con due notifiche di Peering: un terminale ha finito e un terminale richiede approvazione.
Le notifiche push contengono testo breve e stato codificato. Il tuo schermo non ne fa mai parte.

Notifiche push e Live Activity

Quando il telefono è in stop, il Mac chiede al relay di svegliarlo con una push di Apple. Ciò che entra in quella push è volutamente minimo: un titolo e un messaggio brevi per un avviso e, per gli aggiornamenti di Live Activity, solo stato codificato come ID, stati, conteggi e orari. Il Mac non invia mai al relay il tuo schermo né l'output del tuo terminale. Per le approvazioni degli agenti, vedi le notifiche per gli agenti di coding.

Prove al posto degli account

La quota gratuita deve essere legata a qualcosa. Invece di un account, i dispositivi firmano un breve messaggio con la propria chiave, e il relay controlla la firma entro una finestra di cinque minuti. Questo lega la quota a una chiave anziché a un ID reimpostabile, e impedisce a chiunque di spacciarsi per un Mac registrato senza possederne la chiave privata.

Verificalo tu stesso

Il formato dei dati è documentato e il relay è costruito attorno a un vincolo: presenta i dispositivi e copia byte cifrati, e non può ispezionare, alterare né autorizzare ciò che trasporta. Per sapere come una sessione arriva sul relay in primo luogo, leggi come il tuo iPhone raggiunge il tuo Mac da ovunque e, per come le chiavi di ciascuna estremità diventano attendibili, l'associazione senza account.

Domande

Il relay di Peering può vedere il mio schermo?

No. L'immagine è cifrata con una chiave che il Mac invia al telefono dentro una connessione cifrata che il relay non può aprire, quindi il relay copia sempre e solo testo cifrato.

Cosa sa di me il relay di Peering?

Identificatori dei dispositivi, il nome del tuo Mac, il piano in uso, l'utilizzo del relay e l'indirizzo di rete da cui si connette ciascun dispositivo. Non vede video, audio, tasti premuti né contenuto degli appunti.