O que é encriptação do lado do cliente? O seu navegador faz o trabalho
A encriptação do lado do cliente significa que os seus ficheiros são encriptados no navegador antes do carregamento. Máxima privacidade e controlo sem instalar nada.
A encriptação do lado do cliente significa que o seu navegador ou aplicação encripta os ficheiros no seu dispositivo antes de qualquer dado tocar na rede. O servidor recebe apenas texto cifrado — saída AES-256-GCM indistinguível de ruído aleatório — e a chave de desencriptação nunca abandona o cliente. É o oposto da encriptação do lado do servidor, onde o fornecedor guarda as chaves e pode tecnicamente ler os seus ficheiros. A Web Crypto API (window.crypto.subtle) torna isto possível em qualquer navegador moderno sem plugins, a cerca de 2–3 GB/s em hardware com AES-NI. Serviços como HexaTransfer, SwissTransfer, Tresorit Send, e Proton Drive usam este modelo para garantir que os ficheiros permanecem privados mesmo que o próprio serviço seja comprometido.
O navegador como motor criptográfico
Há cinco anos, a encriptação real exigia instalar uma aplicação de ambiente de trabalho ou usar PGP na linha de comandos. A Web Crypto API, padronizada pelo W3C em 2017, mudou isso. Expõe AES-GCM, RSA-OAEP, ECDH, HMAC, PBKDF2, e SHA-256 diretamente ao JavaScript em qualquer navegador moderno — Chrome, Firefox, Safari, Edge.
O desempenho já não é o obstáculo. As instruções Intel AES-NI atingem 3–5 GB/s por núcleo para AES-256-GCM. As Cryptography Extensions da ARM nos chips Apple M-series e Qualcomm Snapdragon oferecem débito semelhante. Encriptar um ficheiro de 1 GB no navegador demora cerca de 300–500 ms num portátil de gama média.
O desafio restante é lidar com ficheiros maiores do que a memória do navegador. A Streams API e o ReadableStream permitem processar ficheiros em blocos de 4 MB, encriptando cada bloco independentemente com um IV de modo contador único. É assim que os serviços elevam o limite para 10 GB ou mais.
Um fluxo mínimo de encriptação do lado do cliente
Eis a sequência que um serviço típico baseado em navegador executa:
// 1. Gerar uma chave AES aleatória de 256 bits
const key = await crypto.subtle.generateKey(
{ name: "AES-GCM", length: 256 }, true, ["encrypt", "decrypt"]
);
// 2. Ler o ficheiro em blocos
const file = fileInput.files[0];
const chunkSize = 4 * 1024 * 1024;
// 3. Encriptar cada bloco com um IV único de 12 bytes
for (let offset = 0; offset < file.size; offset += chunkSize) {
const chunk = file.slice(offset, offset + chunkSize);
const iv = crypto.getRandomValues(new Uint8Array(12));
const ciphertext = await crypto.subtle.encrypt(
{ name: "AES-GCM", iv }, key, await chunk.arrayBuffer()
);
// 4. Carregar [iv || ciphertext] para o servidor
}
// 5. Exportar a chave e incorporá-la no fragmento do URL de partilha
const keyBytes = await crypto.subtle.exportKey("raw", key);
const shareUrl = `https://exemplo.com/d/${fileId}#k=${base64url(keyBytes)}`;
O servidor vê bytes de aparência aleatória, um ID de ficheiro, e nada mais. A chave existe apenas na memória do navegador do utilizador e no fragmento do URL.
Por que supera a encriptação do lado do servidor
A encriptação do lado do servidor significa que o fornecedor desencripta a pedido — para gerar miniaturas, executar análises antivírus, processar pesquisas, ou responder a pedidos legais. Uma divulgação da Apple em 2023 revelou que as cópias de segurança do iCloud (que não eram encriptadas ponta a ponta até ao lançamento da Proteção Avançada de Dados) eram acessíveis pela Apple e portanto pelas autoridades norte-americanas mediante pedidos válidos.
A encriptação do lado do cliente inverte esta situação. Como a chave nunca chega ao fornecedor:
- Funcionários desonestos não veem nada. O engenheiro com acesso à base de dados obtém texto cifrado.
- As intimações produzem texto cifrado. O fornecedor pode cumprir mandados entregando o blob encriptado, que é inútil sem a chave.
- As violações vazam texto cifrado. O incidente LastPass de 2021 demonstrou a importância disto — os cofres roubados estavam encriptados, e apenas os utilizadores com palavras-passe mestras fracas correram risco real.
- As paragens do fornecedor não comprometem os dados. Mesmo que a empresa desapareça, a sua cópia local da chave (o URL) ainda desencripta o ficheiro.
O que o servidor ainda consegue ver
A encriptação do lado do cliente protege o conteúdo dos ficheiros, mas não tudo. O servidor observa tipicamente:
- Tamanho do ficheiro — o comprimento do texto cifrado aproxima o comprimento do texto simples (AES-GCM adiciona 16 bytes por encriptação, mais o IV de 12 bytes).
- Endereços IP de carregamento e descarregamento com timestamps.
- Metadados de sessão dos handshakes TLS, incluindo a impressão digital TLS do cliente.
- Nomes de ficheiros encriptados — a menos que sejam incluídos no payload encriptado, podem vazar.
Os melhores serviços do lado do cliente encriptam os nomes de ficheiros como parte do cabeçalho do texto cifrado e aplicam padding a tamanhos em intervalos (1 MB, 10 MB, 100 MB) para ocultar o tamanho. O Tresorit e o Proton Drive documentam explicitamente a sua exposição de metadados.
Encriptação do lado do cliente protegida por palavra-passe
Muitos serviços permitem aos utilizadores adicionar uma palavra-passe por cima do fragmento do URL. O fluxo:
- O navegador gera um sal aleatório de 128 bits e deriva uma chave usando PBKDF2-HMAC-SHA-256 com 600 000 iterações (recomendação OWASP 2023) ou Argon2id com
memória=64 MB, iterações=3. - O ficheiro é encriptado com a chave derivada.
- O sal vai no fragmento do URL; a palavra-passe é comunicada fora de banda.
- O destinatário escreve a palavra-passe, que deriva novamente a chave localmente.
Isto transforma uma partilha de canal único (o URL é suficiente) em dois fatores: o atacante precisa do link e da palavra-passe, idealmente enviados por canais diferentes. O PBKDF2 com 600 000 iterações torna o ataque de força bruta offline cerca de 10 segundos por tentativa num GPU moderno, pelo que as palavras-passe precisam de mais de 40 bits de entropia para resistir a atacantes determinados — pense em 10+ caracteres de um alfabeto diversificado.
A mudança de confiança: do serviço para o código cliente
A encriptação do lado do cliente move a fronteira de confiança. Antes, confiava que o serviço tratasse bem o seu texto simples. Agora, confia no JavaScript que o serviço envia ao seu navegador em cada carregamento de página. Uma atualização maliciosa poderia extravasar a chave antes ou durante a encriptação.
Existem três mitigações, com diferentes graus de rigor:
- Subresource Integrity (SRI) nas tags de script garante que o hash do JS corresponde a um valor conhecido.
- Auditorias de código por empresas como Cure53, NCC Group, ou Trail of Bits verificam que a lógica de encriptação é sólida.
- Builds reprodutíveis permitem que partes independentes confirmem que o código enviado corresponde ao código-fonte publicado.
- Cabeçalhos Content Security Policy (CSP) bloqueiam scripts de terceiros que possam interferir com a encriptação.
A abordagem mais rigorosa, usada pelo pmcrypto do Proton Mail e por alguns clientes baseados em Electron, distribui binários assinados em vez de JavaScript novo a cada visita. Os serviços baseados em navegador trocam algum deste rigor pela conveniência de não precisar de instalação.
Casos de uso onde o lado do cliente brilha
Alguns cenários onde a encriptação do lado do cliente vale o primeiro carregamento ligeiramente mais lento:
- Documentos legais e médicos. O HIPAA 45 CFR § 164.312 e o sigilo advogado-cliente beneficiam muito de arquiteturas cegas ao fornecedor.
- Jornalismo e proteção de fontes. Envio de documentos não redatados onde mesmo a exposição de metadados acarreta risco.
- Propriedade intelectual empresarial. Documentos de conselho de administração, modelos financeiros, materiais de fusões e aquisições onde ameaças internas ao fornecedor de transferência de ficheiros são uma preocupação realista.
- Registos pessoais. Documentos fiscais, passaportes, testes médicos — ficheiros com que ficaria desconfortável de ver no título de uma violação de dados do fornecedor.
Para ficheiros de baixa sensibilidade (uma fotografia de reunião, uma receita), a encriptação tradicional do lado do servidor é adequada.
Como reconhecer encriptação genuína do lado do cliente
Quatro sinais de que um serviço realmente faz encriptação do lado do cliente:
- O fragmento do URL contém uma chave. O URL de partilha tem texto após
#que parece bytes aleatórios codificados em base64. - Os carregamentos são texto cifrado. Abra as DevTools → Rede durante o carregamento; o corpo do pedido deve parecer bytes aleatórios, não o nome do seu ficheiro.
- Ficheiros grandes ainda funcionam rapidamente. Um fluxo genuíno do lado do cliente processa blocos; não recarrega para um gateway de encriptação do lado do servidor.
- A política de privacidade diz "não conseguimos desencriptar os seus ficheiros." Acompanhada de um whitepaper técnico, não apenas texto de marketing.
Serviços que passam: SwissTransfer E2EE, Tresorit Send, ligações partilhadas do Proton Drive, Mega.nz, e HexaTransfer. Serviços que não passam: WeTransfer (standard), Google Drive, ligações de partilha do Dropbox.
Como colocar isto em prática
Se quiser experimentar a encriptação do lado do cliente hoje, abra as DevTools e observe o separador Rede enquanto carrega um ficheiro. Deve ver um blob encriptado a ir para o servidor e uma chave na sua barra de endereços que nunca aparece em nenhum pedido. Essa é toda a promessa.
Experimente em hexatransfer.com — gratuito, sem conta, até 10 GB.
Envie arquivos grandes com segurança e criptografia de ponta a ponta
Transfira arquivos de até 10 GB gratuitamente com criptografia de ponta a ponta. Sem necessidade de conta. Seus arquivos são criptografados no navegador antes do envio — ninguém mais pode lê-los.
Enviar um arquivo