# Segurança do HideFile: como a criptografia funciona e onde ela termina

O HideFile criptografa os seus arquivos no navegador, com uma chave feita a partir da sua senha, e depois guarda o resultado criptografado dentro de uma foto, PDF ou vídeo comum. Seus arquivos e a sua senha não são enviados para nós. Esta página nomeia os algoritmos e os parâmetros, lista exatamente o que o app envia e é direta sobre os limites, inclusive os que um leitor atento vai cobrar de nós.

Duas ideias mantêm o resto da página em ordem. A criptografia é a camada de segurança: sem a senha, o conteúdo é ilegível. O arquivo de capa é camuflagem: ele muda a aparência dos bytes criptografados para quem navega pelos seus arquivos, e não os torna invisíveis para quem os examina.

## Sua senha vira uma chave no seu aparelho

Quando você cria um arquivo bloqueado, o HideFile transforma a sua senha em chave com **Argon2id** (versão 1.3), uma função de derivação de chave que consome muita memória. Isso significa que cada tentativa custa um bloco de memória além de tempo, então adivinhar continua lento mesmo em hardware feito para adivinhar.

O custo depende de onde o arquivo é criado. Em um navegador de computador, o Argon2id usa 64 MiB de memória e 3 iterações em uma única lane. Um navegador que se identifica como celular ou tablet, ou com 4 GB de memória ou menos, recebe 19 MiB, 2 iterações e uma única lane, porque um navegador de celular não consegue gastar 64 MiB a cada desbloqueio sem falhar de forma confiável. Essa configuração menor atende à recomendação mínima da OWASP para o Argon2id. Os parâmetros ficam guardados dentro do arquivo bloqueado, então um arquivo criado em um computador mantém o custo de 64 MiB quando você o abre no celular.

Cada arquivo bloqueado recebe um salt aleatório de 16 bytes, guardado junto com ele. Duas pessoas que escolhem a mesma senha ainda terminam com chaves diferentes, então ninguém consegue pré-calcular uma tabela de tentativas e usá-la contra todos os arquivos.

## Seus arquivos são selados com XChaCha20-Poly1305

A chave derivada da sua senha não criptografa os seus arquivos diretamente. Cada arquivo bloqueado tem a sua própria chave de arquivo aleatória de 256 bits, gerada no seu aparelho. A chave da senha envolve (wrap) essa chave de arquivo, e a chave de arquivo sela os seus arquivos.

A selagem usa **XChaCha20-Poly1305**, uma cifra autenticada: ela mantém o conteúdo privado e detecta adulterações. Os arquivos são guardados como registros, cada um com o seu próprio nonce aleatório de 192 bits e uma etiqueta de autenticação Poly1305. Se um registro é alterado, por uma cópia danificada ou de propósito, o desbloqueio falha com um erro em vez de devolver em silêncio um conteúdo errado.

<figure><img src="/docs/guides/img/product/security-encryption-flow.svg" alt="Dentro do navegador: a senha e um salt aleatório de 16 bytes entram no Argon2id (64 MiB e 3 passagens, ou 19 MiB e 2 passagens em celulares e navegadores com pouca memória), produzindo uma chave de senha de 32 bytes. Essa chave envolve uma chave de arquivo aleatória de 256 bits. O XChaCha20-Poly1305 sela os arquivos em registros, cada um com um nonce aleatório de 192 bits e uma etiqueta contra adulteração. Os registros selados ficam guardados dentro do arquivo de capa." loading="lazy" width="100%"><figcaption>Uma senha, duas chaves. A chave da senha só serve para envolver a chave de arquivo.</figcaption></figure>

Os dois algoritmos vêm das bibliotecas de código aberto RustCrypto (os crates argon2 e chacha20poly1305). O nosso núcleo próprio, escrito em Rust, usa essas bibliotecas e roda no seu navegador compilado para WebAssembly. O mesmo núcleo roda em todo lugar onde o HideFile roda, então há uma única implementação para examinar, e não uma por plataforma.

<figure><img src="/docs/guides/img/product/04-set-password-desktop.jpg" alt="O passo Set a password no HideFile com uma senha mascarada, um medidor de força verde com o rótulo Strong e um botão Create locked file." loading="lazy" width="100%"><figcaption>A senha é a única chave. A pausa depois de Create locked file é o Argon2id trabalhando.</figcaption></figure>

## Nada do que você bloqueia é enviado

Bloquear, desbloquear e salvar acontecem na aba do navegador. Seus arquivos, os nomes deles, a sua senha e as chaves não são enviados para um servidor do HideFile, e não existe servidor do HideFile que guarde arquivos bloqueados. A única exceção é um recurso que você mesmo ativa: se você conectar o seu próprio bucket compatível com S3, como o Cloudflare R2, o app envia bytes criptografados do seu aparelho direto para esse bucket, e não para nós.

O app guarda algumas coisas no navegador, no seu aparelho. Para reabrir rápido, ele armazena uma cópia do último arquivo bloqueado que você abriu, ainda criptografada, por até um dia e até 100 MB. Os arquivos que você salva para reutilizar e a cópia de trabalho de um arquivo aberto ficam no armazenamento privado de arquivos do navegador. Ele também lembra de configurações como tema e visualização, e o nome, o tamanho e a hora das últimas dez capas que você abriu, nunca a senha. Limpar os dados do site remove tudo isso. Em um computador compartilhado ou emprestado, faça isso quando terminar.

## A análise de uso que enviamos não carrega dados dos arquivos

Usamos o PostHog para contar o uso, com a captura automática desativada, então cliques e conteúdo das páginas não são registrados. O que é enviado:

- Visualizações de página: o caminho da página e a URL de origem, o navegador e o tipo de aparelho, e o tamanho da tela.
- Um país aproximado, que o PostHog deduz do seu endereço IP quando a requisição chega.
- Um identificador aleatório anônimo guardado no navegador, para contar visitas repetidas.
- Três eventos, `locked_file_created`, `locked_file_opened` e `locked_file_saved`, cada um com apenas o tipo de capa (png, jpeg, mp4 ou pdf) e a plataforma (web ou native).

Nomes de arquivo, tamanhos, quantidades, caminhos, senhas, chaves, conteúdos e mensagens de erro não são enviados. Um bloqueador de conteúdo como o uBlock Origin bloqueia a análise e o app funciona do mesmo jeito. Você mesmo pode conferir: abra as ferramentas de desenvolvedor do navegador, observe a aba Rede (Network) enquanto bloqueia e salva um arquivo e procure qualquer requisição que leve os seus arquivos. A [política de privacidade](https://hidefile.app/privacy) é a versão vinculante desta lista.

<figure><img src="/docs/guides/img/product/security-what-leaves.svg" alt="Fica no seu aparelho: seus arquivos, nomes e tamanhos de arquivo, sua senha, chaves de criptografia, conteúdo desbloqueado e o arquivo de capa. Enviado para a análise de uso: visualizações de página com caminho e origem, navegador, aparelho e tamanho de tela, país aproximado, um ID aleatório anônimo e três eventos (criado, aberto, salvo) com apenas o tipo de capa e a plataforma. Só se você configurar: bytes criptografados vão para o seu próprio bucket S3 ou R2, não para nós. O código do app é baixado de hidefile.app quando você visita." loading="lazy" width="100%"><figcaption>O que fica no seu aparelho e a lista curta do que sai dele.</figcaption></figure>

## O modelo de ameaça, descrito em pessoas

| Quem | Resultado | Por quê |
|---|---|---|
| Alguém rolando o seu celular, notebook ou drive na nuvem | Barrado | Vê uma foto, PDF ou vídeo comum, e nada com nome de cofre |
| Alguém que sabe o código de desbloqueio do seu celular | Barrado | A capa tem senha própria, separada do bloqueio do aparelho |
| Qualquer pessoa com uma cópia da capa, mas sem a senha | Barrado | O conteúdo continua criptografado |
| Um perito forense, ou qualquer pessoa que conheça o HideFile e confira de perto | Não fica escondido | Consegue perceber que foram adicionados dados; o conteúdo continua criptografado |
| Alguém que pode obrigar você a entregar a senha | Não é barrado | Nenhum software resolve isso |
| Malware, gravação de tela ou alguém observando um aparelho desbloqueado | Não é barrado | Enquanto os arquivos estão abertos, essas pessoas veem o que você vê |

<figure><img src="/docs/guides/img/product/security-threat-model.svg" alt="Barrado: alguém rolando o seu celular ou notebook, que vê uma imagem comum; alguém que sabe o código do seu celular, porque a capa tem senha própria; qualquer pessoa com uma cópia sem a senha, porque o conteúdo continua criptografado. Não fica escondido de um perito forense, que consegue perceber que foram adicionados dados. Não é barrado: alguém que pode arrancar a senha de você, e malware ou alguém observando um aparelho desbloqueado." loading="lazy" width="100%"><figcaption>O HideFile impede olhadas casuais, não ferramentas forenses.</figcaption></figure>

## Uma ferramenta forense consegue perceber que foram adicionados dados

O HideFile não tenta esconder de uma verificação forense que há dados presentes, e não afirma isso. Seus registros criptografados ficam dentro da estrutura de arquivo da própria capa, onde um visualizador normal os ignora. Uma ferramenta feita para isso, ou um perito que saiba o que procurar, consegue identificar que foram adicionados registros. O tamanho do arquivo é um sinal mais simples: uma foto curta de férias carregando vários gigabytes é incomum, e comparar a capa com o original intocado mostra a diferença na hora.

O que o perito obtém é o fato de que há algo ali, não o conteúdo. Sem a senha, os registros continuam selados. Esse é o limite honesto: à vista de todos responde a uma pessoa curiosa e a uma busca comum, não a um perito determinado com o seu aparelho nas mãos. É a ferramenta errada para revistas na fronteira, peritos treinados ou pressão judicial.

A detecção de adulteração cobre os registros selados, não cada byte da capa. Um app que salva de novo, remove metadados ou recomprime a capa pode alterar a imagem sem nenhum alarme da criptografia, e pode apagar os registros por completo, o que destrói os arquivos dentro. Mantenha a capa como arquivo.

## Não existe recuperação de senha

Não guardamos a sua senha e não conseguimos derivá-la de um arquivo bloqueado. Não há link de redefinição, código de recuperação nem processo de suporte que consiga abrir um arquivo. Se a senha se perde, os arquivos dentro se perdem. Isso é uma propriedade do projeto, e é o motivo pelo qual quem tem uma cópia da sua capa não pode simplesmente pedir que a gente a abra.

## O que não é de código aberto e não foi auditado

O código-fonte do HideFile não é público, e nenhuma empresa independente o auditou. Os algoritmos são padrão, as bibliotecas que os implementam são de código aberto, e esta página e a [página de segurança](https://hidefile.app/security) do app trazem os parâmetros, mas o nosso código que os chama não pode ser lido por pessoas de fora hoje.

Isso importa. Um comentarista do Hacker News, reagindo a outra ferramenta fechada que esconde dados em uma foto, resumiu em quatro palavras: "no source code == no security" (sem código-fonte, sem segurança). Outras pessoas dessa comunidade apontam que um app web é entregue novo pelo servidor a cada visita, então mesmo um código-fonte publicado precisaria de um jeito de confirmar que o código que você executa corresponde a ele. Os dois pontos são justos e, para um leitor que adota esse critério, o HideFile ainda não o atende. Preferimos dizer isso a discutir. Se você encontrar uma falha, escreva para support@hidefile.app com os passos para reproduzi-la e nos dê um tempo razoável para lançar uma correção antes de publicar.

## Fontes

- HideFile: [How HideFile protects you](https://hidefile.app/security)
- HideFile: [Privacy Policy](https://hidefile.app/privacy)
- OWASP: [Password Storage Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Password_Storage_Cheat_Sheet.html)
- RFC 9106: [Argon2 Memory-Hard Function for Password Hashing and Proof-of-Work Applications](https://www.rfc-editor.org/rfc/rfc9106)
- RustCrypto: [crate argon2](https://docs.rs/argon2) e [crate chacha20poly1305](https://docs.rs/chacha20poly1305)
- Hacker News: [Show HN: a hardware-bound local password vault hidden in a photo](https://news.ycombinator.com/item?id=49508206), comentário [49509561](https://news.ycombinator.com/item?id=49509561)
- Hacker News: [comentário sobre a entrega de apps criptografados pelo navegador](https://news.ycombinator.com/item?id=19983075)
