Associare senza un account: come Peering decide di chi fidarsi
La maggior parte degli strumenti di desktop remoto ti chiede di registrarti, così che un'azienda decida se due dispositivi stanno insieme. Peering salta l'azienda e lo chiede a te, con sei cifre.
Ogni dispositivo è la propria identità
La prima volta che Peering viene eseguito su un Mac o su un iPhone genera una coppia di chiavi P-256 e conserva la metà privata nel Keychain di quel dispositivo. Quella chiave è l'identità del dispositivo per sempre. Non ci sono nome utente, password né un server che ne tenga una copia. A ogni avvio l'app firma un nuovo certificato autofirmato su quella chiave, e gli altri dispositivi fissano la chiave e non il certificato.
Questo conta perché un certificato autofirmato da solo non prova nulla. Dice "questa chiave ha creato questo certificato", non "questo è il Mac nel tuo soggiorno". Qualcosa deve collegare una chiave a un dispositivo fisico, e quel qualcosa sei tu.
Le sei cifre
Quando un telefono incontra un Mac per la prima volta, entrambi gli schermi mostrano un codice di sei cifre. Tu confermi che coincidano. Se coincidono, ciascun dispositivo memorizza la chiave dell'altro. Se non coincidono, qualcuno si è messo in mezzo tra i due e tu rifiuti.
Il codice non è casuale e non è una password. È un breve hash dell'intero handshake: entrambi gli ID dispositivo, nuove chiavi monouso di ciascun lato, numeri casuali monouso di ciascun lato e la chiave di identità del Mac. In concreto, sono i primi quattro byte di un SHA-256 calcolato su quei campi, ridotti a sei cifre decimali. Se un aggressore inoltra la connessione, il Mac e il telefono vedono ciascuno una trascrizione diversa e quindi un numero diverso.
Perché impegnarsi prima
Un codice di sei cifre ha solo un milione di valori, quindi un aggressore abile potrebbe provare chiavi monouso finché entrambi i lati mostrano per caso lo stesso numero. Il protocollo chiude quella porta con un passaggio di impegno e rivelazione:
- Ciascun lato invia per prima cosa un hash della propria chiave monouso e del proprio numero casuale.
- Solo dopo che entrambi gli hash sono arrivati, uno dei due rivela i valori reali.
- Ciascun lato controlla la rivelazione rispetto all'hash ricevuto in precedenza.
Poiché un aggressore deve impegnarsi prima di vedere qualsiasi cosa, non può regolare i propri valori per farli coincidere. Resta un tentativo alla cieca, con una probabilità su un milione di ottenere un codice coincidente a ogni prova, e un tentativo fallito si manifesta come una discrepanza che puoi vedere.
La scorciatoia del QR
Se scansioni il codice QR del Mac, non c'è nulla da confrontare a occhio. Il QR contiene un segreto da 16 byte che può avere solo chi guarda lo schermo del Mac. Il telefono lo usa per calcolare una prova (un HMAC sull'handshake), e il Mac la accetta come dimostrazione che la persona che sta associando si trova fisicamente davanti al Mac. Senza quella prova, il Mac chiede al proprio utente di approvare.
Dopo l'associazione, la fiducia è un confronto di chiavi
Ogni connessione successiva è una sessione TLS 1.3 in cui entrambi i lati presentano la propria chiave. Il telefono prende la chiave del Mac dal certificato che ha effettivamente ricevuto, mai da qualcosa che il Mac dica in un messaggio, e la confronta con quella memorizzata in tempo costante. Una chiave diversa significa nessuna connessione. Dopo la prima volta non ti viene chiesto nulla.
Se un Mac dichiara "ti conosco già" ma il tuo telefono non ha alcuna chiave memorizzata per esso, il telefono rifiuta. La dichiarazione non prova nulla, perché un estraneo potrebbe farla con la stessa facilità.
La guida pratica è nella guida all'associazione. Per sapere cosa succede alla connessione una volta stabilita, vedi cosa può vedere il relay.
Domande
Peering richiede un account o un indirizzo email?
No. Ogni dispositivo crea la propria chiave e la conserva nel proprio Keychain. L'associazione è un codice di sei cifre che confronti sui due schermi.
Da cosa protegge il codice di associazione di sei cifre?
Da chi si mette tra il tuo iPhone e il tuo Mac. Il codice deriva dall'intero handshake, quindi un attacco man in the middle produce codici diversi sui due schermi e vedi la discrepanza.