Il principio
Droplet Drop non ha né account né server di trasferimento. I file vanno direttamente dal dispositivo che invia a quello che riceve, sulla tua rete locale. Non vediamo mai i tuoi file, né chi li invia a chi: non passano da noi.
Nessuna crittografia fatta in casa: Droplet Drop si basa su librerie collaudate: rustls (TLS 1.3), ring, rcgen (ECDSA P-256), SHA-256 e BLAKE3.
La cifratura
Ogni connessione è cifrata con TLS 1.3, e solo con TLS 1.3. L’autenticazione è reciproca: entrambi i dispositivi dimostrano la propria identità.
Alla prima apertura, ogni dispositivo crea la propria chiave (ECDSA P-256). La sua identità è l’impronta di questa chiave; il codice di sicurezza mostrato nell’app ne è l’inizio, per verificarla a colpo d’occhio.
Il dispositivo che si connette fissa l’identità attesa, appresa dalla scoperta in rete o dal codice QR. Qualsiasi altro dispositivo che si spacci per lui viene rifiutato.
Nulla arriva senza il tuo consenso
Ogni invio inizia come proposta: nome del mittente, codice del suo dispositivo, numero e dimensione dei file. Senza risposta, scade dopo due minuti.
Solo i dispositivi che hai indicato come «attendibili» possono inviare senza conferma, e puoi rimuoverli quando vuoi.
Un file ricevuto non viene mai eseguito. Se un invio contiene un programma, la proposta lo segnala.
Verificato fino all’ultimo byte
Prima dell’invio, ogni file è diviso in blocchi da 4 MiB, e ogni blocco riceve la sua impronta BLAKE3, come il file intero. Il destinatario verifica ogni blocco all’arrivo, poi rilegge l’intero file.
Un blocco danneggiato o falsificato viene richiesto di nuovo. Un file che non corrisponde all’originale non viene mai consegnato: resta nella cartella nascosta di ripresa finché non è corretto, oppure viene eliminato.
Group Drop
Un invito contiene l’indirizzo dell’host sulla rete locale, l’identità del suo dispositivo (fissata), un identificativo di sessione a 128 bit e un token a 256 bit impossibile da indovinare. L’host confronta il token in tempo costante.
L’invito scade (dopo 30 minuti, 2 ore o 8 ore). Condividere il link dà il diritto di unirsi: condividilo solo con i partecipanti.
Il link d’invito può aprirsi su drop.dropletmesh.app: la parte dopo «#», che contiene l’invito, non viene mai inviata al nostro server. Resta nel tuo browser.
Le protezioni, una per una
| Minaccia | Protezione |
|---|---|
| Intercettazione della rete | TLS 1.3 su ogni connessione |
| Furto d’identità di un dispositivo | Identità fissata; l’handshake TLS dimostra il possesso della chiave |
| Invio non richiesto | Consenso esplicito (o dispositivo attendibile); scade dopo 2 minuti |
| Intruso in una distribuzione | Token a 256 bit confrontato in tempo costante; invito a tempo |
| File danneggiato o falsificato | Impronta BLAKE3 di ogni blocco e del file intero; nulla è consegnato prima della verifica |
| Scrittura fuori dalla cartella di ricezione | Percorsi ripuliti alla ricezione («..», radici, nomi riservati, caratteri vietati) |
| Sovrascrittura di un file | Mai: viene scelto un nome libero, «nome (1).ext» |
| Disco pieno | Spazio libero verificato prima di accettare |
| Dati sproporzionati | Messaggi limitati; un invio è limitato a 100.000 file e 4 TiB |
| Tentativi ripetuti | Dopo 20 errori in un minuto, un indirizzo viene ignorato; al massimo 128 connessioni in corso |
La chiave del tuo dispositivo
La chiave privata del dispositivo non lo lascia mai. È salvata nella cartella dati dell’app (leggibile solo dal tuo account su Mac e Linux). Se questa cartella viene cancellata, per esempio disinstallando l’app da un telefono, il dispositivo ottiene una nuova identità e gli altri tuoi dispositivi dovranno fidarsi di nuovo.
Segnalare una vulnerabilità
Pensi di aver trovato una vulnerabilità? Scrivi a contact@dropletmesh.app, con quanto serve per riprodurla. Lasciaci il tempo di correggerla prima di renderla pubblica; ti risponderemo e ti terremo aggiornato.