Note di campo

Una chiave dopo il #: come i link condivisi tengono fuori il server

Una conversazione condivisa è archiviata sul nostro server, e noi non possiamo aprirla. Come funziona, dove entra in gioco la password e cosa un link non può proteggere.

Condividere di solito significa consegnare le proprie parole a chi conserva il link. I link condivisi di Undergrove sono costruiti in modo che il server tenga una copia che non può leggere. Il trucco è vecchio e semplice, e ha dei limiti che vale la pena conoscere.

La parte dopo il #

Quando condividi una conversazione, il tuo browser genera una nuova chiave casuale, cifra una copia con AES-GCM e carica solo il testo cifrato. La chiave va nel link, dopo il #. I browser non inviano quella parte di un indirizzo al server quando caricano una pagina, quindi la chiave arriva alla persona a cui mandi il link e mai a noi.

Conserviamo il testo cifrato per 1, 7 o 30 giorni. Ne vediamo l’id, la dimensione e quando è stato creato e aperto. La pagina che lo apre scarica il testo cifrato, legge la chiave dalla barra degli indirizzi e lo decifra nella scheda.

Anche una password

Un link può richiedere anche una password. In quel caso la chiave che apre la copia deriva da entrambe: la password viene rafforzata con PBKDF2-SHA256 a 600.000 iterazioni e combinata con la chiave del link tramite HKDF. Né il link né la password da soli la aprono, e la password viene verificata nella scheda sulla copia già presente, quindi non la vediamo mai.

Apertura singola, e data di apertura

Un link può aprirsi una sola volta. Il server elimina la sua copia alla prima lettura e conserva solo l’ora in cui è stata aperta, così il link può dire di essere stato usato anziché di non essere mai esistito. Prima di scaricarla, la pagina ti chiede di confermare, così l’anteprima del link di un’app di chat non la consuma.

Un link può anche aprirsi da una certa data. Fino ad allora il server si rifiuta di consegnare il testo cifrato. È il server che mantiene la parola, non la crittografia: la copia è già archiviata, e la sua chiave è già nel link.

Cosa un link non può proteggere

  • Chiunque abbia il link completo può leggere la copia. Trattalo come la conversazione stessa.
  • Le app di chat e di email conservano i messaggi che invii, link compresi, # e tutto il resto.
  • La pagina che decifra la copia è codice che serviamo noi. /verify confronta quel codice con il manifest pubblicato della build.

La pagina sulla privacy elenca cosa viene conservato per ogni link, e il modello di minaccia chi potrebbe vedere cosa.

Altre note di campo

  1. Cosa dimostra un’attestazione, e cosa no

    Il tuo browser verifica l’enclave di Tinfoil prima di inviare una sola parola. Cosa stabilisce quella verifica, dove si ferma e cosa non si può ancora verificare in un browser.

  2. Cosa vede comunque un relay che non può leggere

    Il nostro relay inoltra testo cifrato che non può aprire. Non è la stessa cosa che non vedere nulla. Un inventario di ciò che vede, e del perché.