O princípio
O Droplet Drop não tem conta nem servidor de transferência. Os ficheiros vão diretamente do dispositivo que envia para o que recebe, pela sua rede local. Nunca vemos os seus ficheiros, nem quem os envia a quem: não passam por nós.
Nenhuma criptografia caseira: o Droplet Drop assenta em bibliotecas comprovadas: rustls (TLS 1.3), ring, rcgen (ECDSA P-256), SHA-256 e BLAKE3.
A cifragem
Cada ligação é cifrada com TLS 1.3, e só com TLS 1.3. A autenticação é mútua: os dois dispositivos provam cada um a sua identidade.
Na primeira abertura, cada dispositivo cria a sua própria chave (ECDSA P-256). A sua identidade é a impressão digital dessa chave; o código de segurança mostrado na app é o seu início, para a verificar num relance.
O dispositivo que se liga fixa a identidade esperada, conhecida pela descoberta na rede ou pelo código QR. Qualquer outro dispositivo que se faça passar por ele é recusado.
Nada chega sem o seu acordo
Cada envio começa como uma proposta: nome do remetente, código do dispositivo, número e tamanho dos ficheiros. Sem resposta, expira ao fim de dois minutos.
Só os dispositivos que marcou como «de confiança» podem enviar sem confirmação, e pode removê-los quando quiser.
Um ficheiro recebido nunca é executado. Se um envio contiver um programa, a proposta indica-o.
Verificado até ao último byte
Antes do envio, cada ficheiro é dividido em blocos de 4 MiB, e cada bloco recebe a sua impressão digital BLAKE3, tal como o ficheiro inteiro. O destinatário verifica cada bloco à chegada e volta a ler o ficheiro completo.
Um bloco danificado ou falsificado é pedido de novo. Um ficheiro que não corresponde ao original nunca é entregue: fica na pasta oculta de retoma até estar correto, ou é apagado.
Group Drop
Um convite contém o endereço do anfitrião na rede local, a identidade do seu dispositivo (fixada), um identificador de sessão de 128 bits e um token de 256 bits impossível de adivinhar. O anfitrião compara o token em tempo constante.
O convite expira (ao fim de 30 minutos, 2 horas ou 8 horas). Partilhar a ligação dá o direito de entrar: partilhe-a apenas com os participantes.
A ligação de convite pode abrir em drop.dropletmesh.app: a parte depois de «#», que contém o convite, nunca é enviada ao nosso servidor. Fica no seu navegador.
As proteções, uma a uma
| Ameaça | Proteção |
|---|---|
| Escuta da rede | TLS 1.3 em cada ligação |
| Usurpação de um dispositivo | Identidade fixada; o handshake TLS prova a posse da chave |
| Envio não solicitado | Acordo explícito (ou dispositivo de confiança); expira ao fim de 2 minutos |
| Intruso numa distribuição | Token de 256 bits comparado em tempo constante; convite limitado no tempo |
| Ficheiro danificado ou falsificado | Impressão BLAKE3 de cada bloco e do ficheiro inteiro; nada é entregue antes da verificação |
| Escrita fora da pasta de receção | Caminhos limpos à chegada («..», raízes, nomes reservados, carateres proibidos) |
| Substituição de um ficheiro | Nunca: é escolhido um nome livre, «nome (1).ext» |
| Disco cheio | Espaço livre verificado antes de aceitar |
| Dados desmesurados | Mensagens limitadas; um envio está limitado a 100 000 ficheiros e 4 TiB |
| Tentativas repetidas | Após 20 falhas num minuto, um endereço é ignorado; no máximo 128 ligações em curso |
A chave do seu dispositivo
A chave privada do dispositivo nunca sai dele. Está guardada na pasta de dados da app (legível apenas pela sua conta no Mac e no Linux). Se essa pasta for apagada (ao desinstalar a app de um telemóvel, por exemplo), o dispositivo recebe uma nova identidade e os seus outros dispositivos terão de voltar a confiar nele.
Comunicar uma vulnerabilidade
Acha que encontrou uma vulnerabilidade? Escreva para contact@dropletmesh.app, com o necessário para a reproduzir. Dê-nos tempo para a corrigir antes de a tornar pública; responderemos e mantê-lo-emos informado.