
O Firefox lançou recentemente seu serviço de compartilhamento de arquivos,Enviar. Ele promete criptografia de ponta a ponta: o arquivo a ser compartilhado é criptografado no navegador do remetente e descriptografado no navegador do destinatário usando uma chave incorporada no URL compartilhado.
Um URL para compartilhar um arquivo é formatado conforme abaixo:
https://send.firefox.com/download/03837dac3928b1d1/#lIFX1W1S2oXSwJF0QgMe_A
Suponho que uma parte da URL representa a localização do arquivo nos servidores da Mozilla e a outra é a chave de criptografia. No entanto, a partir de um URL válido, qualquer que seja a parte que eu altere, recebo um erro "Esse link expirou". Portanto, não consegui descobrir se meu palpite estava correto.
De qualquer forma, minha pergunta é sobre quão confiante posso estar com essa criptografia de ponta a ponta. Esse mecanismo é inteligente, mas percebi que consegui recuperar o link de qualquer um dos meus compartilhamentos da minha conta do Firefox em qualquer dispositivo. Isso significa que todo o link está de alguma forma armazenado na minha conta nos servidores da Mozilla.
Nesse caso, é tecnicamente viável para a Mozilla descriptografar todos os arquivos compartilhados. Estou esquecendo de algo? Alguém entende bem como o Firefox Send realmente funciona e se é seguro confiar nesse mecanismo de criptografia de ponta a ponta?
Muito obrigado.
Responder1
Eu me perguntei a mesma coisa e cheguei a essa pergunta. Bem, posso tentar fazer minha própria pesquisa.
Mozilla documentou a criptografia usadaaquie para explicar em termos mais simples:
Enviando
- Seu aplicativo/navegador gera uma chave de criptografia
- A chave é usada para gerar 3 chaves adicionais: uma para a criptografia do arquivo em si, uma para os metadados e uma chave de assinatura
- Se você definir uma senha, a senha e a chave de criptografia serão combinadas de maneira segura para criar a chave de assinatura
- O arquivo e os metadados são criptografados
- Os dados criptografados e a chave de assinatura são enviados para a Mozilla
- Observe que devido à forma como a chave de assinatura é gerada, não é possível calcular a chave de criptografia original usada para gerar qualquer uma das chaves
- A Mozilla envia a você a URL do arquivo (sem a parte depois de #) e um token. Este token pode ser usado para excluir o arquivo.
- Seu aplicativo acrescenta o sinal # e a chave de criptografia
Baixando
- Você entra na página de download. Todos os navegadores não enviam a parte após # para o servidor. (Eles geralmente são usados para links âncora que direcionam para outra seção da mesma página)
- A Mozilla envia ao seu aplicativo um "nonce" (número usado apenas uma vez) ou basicamente alguns dados aleatórios de lixo
- Como você tem a chave de criptografia após o #, o aplicativo gera todas as 3 chaves como nas etapas 2 de upload. Você obterá exatamente as mesmas chaves do uploader.
- O aplicativo assina o nonce fornecido pelo servidor com a chave de assinatura
- O aplicativo envia o nonce assinado para a Mozilla
- Como a Mozilla também tem a mesma chave de assinatura, eles também executam a etapa 4 e esperam que ela corresponda à que você enviou. Esta etapa garante que
- Você conhece a chave de criptografia correta
- ou se o arquivo estiver protegido por senha, você sabe a senha
- Depois de verificar que conhece a chave (sem sequer revelá-la ao servidor), a Mozilla enviará a você os metadados criptografados.
- O aplicativo descriptografa esses metadados no seu computador e mostra detalhes
- Você clica em baixar
- O aplicativo baixa os arquivos criptografados e os descriptografa no seu computador
Então, para responder às suas perguntas:
Suponho que uma parte da URL representa a localização do arquivo nos servidores da Mozilla e a outra é a chave de criptografia. No entanto, a partir de um URL válido, qualquer que seja a parte que eu altere, recebo um erro "Esse link expirou". Portanto, não consegui descobrir se meu palpite estava correto.
A partir da etapa 6 de download, se você não conseguir provar que conhece a chave de criptografia correta, a Mozilla se recusará a enviar o arquivo.
De qualquer forma, minha pergunta é sobre quão confiante posso estar com essa criptografia de ponta a ponta. Esse mecanismo é inteligente, mas percebi que consegui recuperar o link de qualquer um dos meus compartilhamentos da minha conta do Firefox em qualquer dispositivo. Isso significa que todo o link está de alguma forma armazenado na minha conta nos servidores da Mozilla.
Esta parte não está escrita no documento que vinculei. Eu olho em voltaa fontee descobri que eles fizeram upload da lista de arquivos enviados para sua conta. Acredito que esses dados sejam criptografados com um processo semelhante à criptografia de arquivos.
Olhei em volta e parece que a chave de criptografia é gerada localmente. Não tenho certeza de como a chave é sincronizada.
Nesse caso, é tecnicamente viável para a Mozilla descriptografar todos os arquivos compartilhados. Estou esquecendo de algo? Alguém entende bem como o Firefox Send realmente funciona e se é seguro confiar nesse mecanismo de criptografia de ponta a ponta?
Uma grande isenção de responsabilidade aqui é que não sou um especialista em criptografia e você pode querer perguntarcripto.seopinião sobre isso.
Se você me perguntar, acho que o processo de criptografia aqui é bastante sólido e os algoritmos usados são padrão da indústria. Não há como a Mozilla descriptografar todos os arquivos sem forçar brutalmente cada chave usada, uma por arquivo.
No entanto, você deve estar ciente dos recursos extras nos quais você precisa confiar que a Mozilla está fazendo seu trabalho:
- A senha é verificada apenas pelo servidor. Se acontecer de você obter os arquivos criptografados e a chave de criptografia, poderá descriptografar os dados sem saber a senha. Normalmente isso não seria um problema, pois o servidor não envia os arquivos criptografados a menos que você prove que conhece a senha. No entanto, a própria Mozilla tem acesso ao arquivo criptografado, portanto a chave de criptografia é a única proteção aqui.
- Considerando que a maioria das senhas fornecidas pelo usuário são fracas, gerar uma chave de criptografia forte e aleatória é melhor do que usar a senha para criptografar dados diretamente.
- A expiração não é possível de ser implementada de maneira criptograficamente segura, pois você não pode obter a verdadeira hora atual em uma função matemática. Portanto, você terá que confiar que a Mozilla removerá seus arquivos expirados.
Observe que o servidor de código aberto Firefox Send suporta AWS como back-end de armazenamento. Não tenho certeza do que o Firefox usou em seu serviço público, mas se for AWS, você também terá que confiar na AWS nas duas questões acima.