Come funziona un trasferimento peer-to-peer, da browser a browser
In un trasferimento istantaneo, il file passa dal Suo browser al browser del destinatario. Non viene caricato prima e non viene mai archiviato sui nostri server. Il nostro servizio si limita a presentare i due browser l’uno all’altro. Il file è cifrato due volte lungo il percorso, viaggia su più connessioni contemporanee per essere più veloce, e il browser del destinatario stabilisce il ritmo, in modo che nessuna delle due parti esaurisca la memoria.
Questo articolo spiega ciascuno di questi passi. Per il confronto con i trasferimenti ospitati, si vedano peer-to-peer e trasferimenti ospitati.
Passo 1: il link è pronto prima che venga inviato qualsiasi cosa
Quando sceglie un trasferimento istantaneo, il browser registra il trasferimento presso il nostro servizio: i dettagli dei file e le opzioni scelte. Non viene inviato alcun byte di file. Quando il servizio risponde, il browser crea una nuova chiave AES-256 per questo trasferimento e la aggiunge al link di condivisione dopo il «#». I browser non inviano quella parte di un link ad alcun server, perciò la chiave non raggiunge mai il nostro servizio.
Il link funziona subito. La Sua scheda ora contiene i file e attende i destinatari.
Passo 2: i due browser si trovano
Quando il destinatario apre il link, il suo browser interroga per prima cosa il nostro servizio sul trasferimento. Il servizio controlla il link: che non sia scaduto, che la password sia corretta se Lei ne ha impostata una e che il limite di download non sia esaurito. Solo dopo questi controlli indica al browser del destinatario quale browser contattare.
Due browser su reti diverse non possono semplicemente chiamarsi. Si scambiano i dettagli di connessione tramite il nostro servizio di segnalazione, che inoltra brevi messaggi tra loro su un WebSocket. Quei messaggi descrivono come connettersi. Non contengono dati del file né chiavi. Poi ciascun browser stabilisce in che modo può essere raggiunto:
- STUN. Server STUN pubblici comunicano a ciascun browser il proprio indirizzo così come lo vede internet, il che basta per la maggior parte delle reti domestiche e degli uffici.
- TURN, quando serve. Alcune reti bloccano le connessioni dirette. Per queste, il nostro servizio crea su richiesta credenziali di relay, valide 24 ore e non per sempre, e la connessione passa invece da un relay TURN.
Ottenere le credenziali del relay non trattiene mai a lungo un trasferimento: se richiedono più di due secondi, i browser partono con il solo STUN e le credenziali vengono usate al tentativo di connessione successivo.
Un relay inoltra il flusso cifrato. Non può leggerlo.
Passo 3: cifrato due volte
Ogni canale dati WebRTC è cifrato con DTLS tra i due browser. Già questo protegge il file da chiunque osservi la rete, relay compreso.
DTLS ha però una dipendenza. Ogni browser dimostra la propria identità con l’impronta di un certificato, e quelle impronte viaggiano attraverso il servizio di segnalazione. Un server di segnalazione compromesso potrebbe sostituirle e mettersi nel mezzo, e DTLS non se ne accorgerebbe.
Perciò Transferify aggiunge un proprio strato. Il browser sigilla ogni pezzo del file con AES-256-GCM, usando la chiave del link, prima che il pezzo entri nella connessione. Il servizio di segnalazione non vede mai quella chiave. Un server nel mezzo vedrebbe solo pezzi cifrati, e qualsiasi modifica apportata farebbe fallire il controllo del destinatario. Ogni pezzo è inoltre legato a questo trasferimento, a questo file e alla propria posizione, perciò i pezzi non possono essere riordinati, eliminati o scambiati con quelli di un altro file. I dettagli sono in come Transferify cifra i file nel browser.
Questo strato non può essere disattivato. Se il browser non riesce a predisporlo, il trasferimento non parte, e il browser di un destinatario accetta solo pezzi cifrati.
Passo 4: più connessioni contemporanee
Una singola connessione WebRTC raramente sfrutta appieno una linea veloce, perché ogni connessione aumenta con cautela e per conto proprio la velocità di invio. Perciò il browser di un destinatario chiede al Suo di eseguire il trasferimento su quattro connessioni in parallelo, ciascuna con il proprio percorso e la propria velocità. I due browser usano il più piccolo dei numeri che ciascuna parte consente, mai più di otto.
Il Suo browser distribuisce i pezzi a turno sulle connessioni, e il browser del destinatario li rimette in ordine. Le connessioni riescono o falliscono insieme: se una cade, il trasferimento verso quel destinatario si interrompe per intero.
Passo 5: il destinatario stabilisce il ritmo
Una rete può consegnare i pezzi più in fretta di quanto un disco lento riesca a salvarli. Senza un limite, i pezzi in attesa si accumulerebbero nella memoria del destinatario fino a che il browser non si arrenderebbe.
Invece il browser del destinatario concede al Suo un budget di 32 MiB di dati cifrati alla volta e lo ricarica man mano che i pezzi vengono decifrati e scritti. Il Suo browser invia solo finché ha budget disponibile. Se il destinatario mette in pausa il download, il Suo browser semplicemente attende e riprende nel momento in cui il download ricomincia.
Dal lato del destinatario, ogni pezzo viene decifrato e controllato man mano che arriva e trasmesso in un normale download del browser tramite il gestore di download del sito, che gira nel browser del destinatario, così anche un file molto grande non deve mai stare per intero in memoria. Se un controllo qualsiasi fallisce, quel download viene annullato anziché salvato. Su un browser in cui il gestore di download non è disponibile, i file fino a 1 GiB vengono assemblati in memoria, e quelli più grandi non possono essere ricevuti lì.
Passo 6: Lei vede chi ha il file
Quando il browser del destinatario ha un file per intero, invia al Suo browser una ricevuta. La Sua pagina elenca ogni destinatario che ha aperto il link e il punto a cui è arrivato, e considera un file consegnato quando la ricevuta del destinatario dice che è arrivato per intero.
Più destinatari possono scaricare contemporaneamente, ciascuno sulle proprie connessioni verso il Suo browser.
Che cosa pone fine a un trasferimento
- Lei chiude la scheda. Il file viene servito dal Suo browser, perciò il trasferimento si ferma.
- Lei elimina il trasferimento. Il nostro servizio lo comunica alla Sua scheda, che chiude subito le connessioni di tutti i destinatari. Il file scorre dal Suo browser e non dal nostro servizio, perciò l’istruzione deve raggiungere il Suo browser, e lo raggiunge. Lo stesso accade se sospendiamo un trasferimento dopo segnalazioni di abuso.
- Il link raggiunge la data di scadenza. I nuovi destinatari non possono più aprirlo.
Quando usarlo
I trasferimenti istantanei si adattano ai file grandi quando si può tenere aperta la scheda finché il destinatario non li ha ricevuti. Se non è possibile, un trasferimento ospitato mantiene online una copia cifrata.
Provare
Scelga un file, selezioni un trasferimento istantaneo e invii il link a un secondo dispositivo personale: lo vedrà comparire sulla propria pagina e scorrere. Avvii un trasferimento istantaneo.
Domande frequenti
Un file peer-to-peer passa dai server di Transferify?
Non viene mai archiviato sui nostri server. Il nostro servizio registra il trasferimento e inoltra i brevi messaggi di cui i due browser hanno bisogno per trovarsi, poi il file scorre tra i browser. Quando una rete blocca la connessione diretta, il flusso cifrato passa da un relay TURN, che inoltra byte che non è in grado di leggere.
Perché cifrare un trasferimento WebRTC se WebRTC è già cifrato?
WebRTC cifra la connessione con DTLS, ma i due browser si confermano a vicenda l’identità DTLS tramite messaggi che il nostro servizio di segnalazione inoltra. Un server di segnalazione disonesto potrebbe mettersi nel mezzo. Perciò il file viene cifrato anche con AES-256-GCM con una chiave che viaggia solo nel link e che nessun server riceve.
Più persone possono scaricare contemporaneamente lo stesso link istantaneo?
Sì. Ogni destinatario che apre il link ottiene connessioni proprie verso il Suo browser, e la Sua pagina elenca ciascuno di loro con il punto a cui è arrivato.
Che cosa accade se chiudo la scheda?
Il trasferimento termina, perché il file viene servito dal Suo browser. Per un link che continua a funzionare dopo la chiusura della scheda, invii invece un trasferimento ospitato.