Criptografado no cliente · Compartilhamento de PDF

Compartilhamento de PDF criptografado no cliente, explicado corretamente.

"Criptografado de ponta a ponta" é usado de forma vaga. Aqui está o real mecanismo criptográfico por trás de um link de PDF criptografado no cliente — AES-256-GCM, gerenciamento de chave, modos fragmento vs. frase-senha e o que o servidor literalmente não pode fazer. Observação: "conhecimento zero" nesta página refere-se ao servidor não possuir nenhuma informação que possa decifrar seu arquivo, e não a provas formais de conhecimento zero (ZKPs) — o produto não usa ZKPs.

lockAES-256-GCM vpn_keyPBKDF2-SHA256 · 310,000 linkFragmento ou frase-senha memoryWeb Crypto API

O que "conhecimento zero" significa aqui

Uma rápida desambiguação antes de qualquer coisa: este sistema não usa provas de conhecimento zero (ZKPs). A expressão "conhecimento zero" nesta página refere-se à propriedade mais fraca, porém praticamente útil, de que o servidor que armazena seu arquivo compartilhado não tem nenhum conhecimento — criptográfico ou operacional — que possa ser usado para decifrá-lo. A chave nunca toca o servidor, então o servidor não pode revelá-la em nenhuma circunstância. O mecanismo é simples criptografia no cliente mais uma chave que viaja apenas no fragmento da URL (ou é derivada de uma frase-senha que o servidor nunca vê).

memory
A criptografia acontece no seu navegador
Não no servidor, não em um worker que você não controla — na sua aba, via window.crypto.subtle. Verificável no DevTools.
cloud_off
Apenas o texto cifrado é enviado
O corpo do upload é texto cifrado AES-256-GCM. O PDF, o nome do arquivo e os metadados nunca chegam ao servidor em forma legível.
vpn_key
A chave viaja com o destinatário
Seja no fragmento da URL (nunca enviado a servidores) ou derivada de uma frase-senha que o remetente escolhe. De qualquer modo, nunca a vemos.
block
Sem recuperação = sem backdoor
Perdeu o link ou esqueceu a frase-senha? O arquivo se perdeu para sempre. Como a chave nunca chega ao nosso servidor, o caminho de recuperação que enfraqueceria a garantia simplesmente não existe.

Como um link de PDF criptografado no cliente é construído

Um passo a passo do que o navegador do remetente, o servidor e o navegador do destinatário fazem — com as chamadas reais de Web Crypto.

1 — Navegador do remetente
// 256-bit AES key, generated locally key = crypto.subtle.generateKey({name:"AES-GCM", length:256}) // fresh 96-bit IV per file iv = crypto.getRandomValues(new Uint8Array(12)) // encrypt locally; GCM gives us an auth tag for integrity ct = crypto.subtle.encrypt({name:"AES-GCM", iv}, key, pdfBytes) // upload ciphertext + iv (and salt, if passphrase mode) id = await PUT("/api/transfer", ct, {iv, expiry})
2 — Formato do link de compartilhamento
// fragment mode: key lives after # link_f = `https://pdfpro.tools/s/<ID>#<KEY>` // passphrase mode: no key in the link; recipient must know the passphrase link_p = `https://pdfpro.tools/s/<ID>`
3 — O servidor armazena bytes opacos
ciphertext = ??? // random-looking, unreadable iv = 12-byte nonce salt = 16-byte random (passphrase mode only) expiry = 24h free / 30d Pro
4 — Navegador do destinatário
// browsers never transmit the URL fragment to the server rawKey = /* from location.hash OR */ PBKDF2(passphrase, salt, 310_000, "SHA-256") ct = await GET("/api/transfer/" + id) pdf = crypto.subtle.decrypt({name:"AES-GCM", iv}, importKey(rawKey), ct) // browser serves pdf to Downloads

Modo fragmento vs. modo frase-senha

Duas maneiras de levar a chave ao destinatário. A mesma garantia de texto cifrado, com diferentes compromissos de usabilidade e vazamento.

Modo Fragmento

A chave viaja no hash da URL (#)

O fluxo mais simples: copie o link, cole em um chat ao destinatário, pronto. A parte da URL após # nunca é enviada a nenhum servidor web por nenhum navegador compatível — é isso que mantém a chave privada.

  • Um passo para o destinatário — clicar no link.
  • Baixo atrito, adequado para compartilhamento de sensibilidade baixa a média.
  • Risco: se o link vazar em uma captura de tela ou sincronização do navegador, o arquivo vaza junto.
  • Use quando você confiar no canal (mensageiro com assinatura, chat interno).
Modo Frase-senha

Chave derivada de uma frase-senha (PBKDF2)

O remetente escolhe uma frase-senha. O navegador deriva uma chave de 256 bits via PBKDF2-SHA256 com 310.000 iterações sobre um sal aleatório de 128 bits. O sal é armazenado no servidor; a frase-senha é compartilhada por outro canal (telefone, Signal, pessoalmente).

  • Compartilhamento em dois fatores: o link e a frase-senha viajam separadamente.
  • Só o link não basta — o texto cifrado permanece ilegível.
  • A força da frase-senha importa: 310k iterações desaceleram a força bruta, mas não salvam uma frase de 6 caracteres.
  • Use quando o link puder ser encaminhado ou armazenado em algum lugar em que você não confia totalmente.
PropriedadeModo fragmentoModo frase-senha
Portador da chaveHash da URL (#)Frase-senha + sal
O servidor alguma vez vê a chaveNãoNão
O servidor armazenaTexto cifrado + IVTexto cifrado + IV + sal
Esforço do destinatárioClicar no linkClicar no link + digitar a frase-senha
Vazável por captura de telaSim (link = chave)Não (link sozinho é inútil)
Resistente à força bruta256 bits aleatóriosDepende da frase-senha
Melhor paraCompartilhamento de baixo atrito em canais confiáveisCompartilhamento de maior sensibilidade

Por que um texto cifrado armazenado no servidor ainda protege você

As pessoas costumam perguntar: "se está no seu servidor, como é privado?" A resposta é que texto cifrado não é o arquivo. Sem a chave, são apenas bytes de aparência aleatória. Eis o que isso significa na prática.

storage
Violação do banco de dados = vazamento de texto cifrado
Se um invasor comprometesse nosso banco de dados, sairia com bytes opacos. Recuperar um único arquivo exigiria força bruta sobre uma chave de 256 bits — inviável com a física conhecida.
gavel
Intimação produz texto cifrado
Um tribunal pode nos obrigar a entregar o que temos. O que temos é texto cifrado. Uma ordem judicial não pode criar retroativamente uma chave que nunca armazenamos.
group
Acesso interno é neutralizado
Um funcionário desonesto com credenciais completas do banco de dados ainda não pode ler os arquivos. A garantia é imposta pela matemática, não pelo controle de acesso.
timer
A expiração reforça a garantia
O texto cifrado é apagado na expiração (24 h grátis, até 30 d no Pro). Depois disso, até o texto cifrado some — a única cópia do arquivo existe onde ele foi decifrado.

warningLimitações honestas

A criptografia no cliente não resolve a segurança do endpoint. Malware no dispositivo do remetente ou do destinatário pode roubar a chave da memória. Uma extensão de navegador comprometida pode ler o arquivo decifrado. E um link encaminhado em um chat de grupo desfaz qualquer garantia criptográfica. A arquitetura eleva o custo de uma violação; não elimina todo o risco.

Criptografia no cliente vs. outras opções "seguras"

Uma comparação clara das opções comuns para compartilhar um PDF. A maioria das opções rotuladas como "seguras" é criptografada no transporte — protegem os dados em trânsito, mas o servidor receptor ainda mantém o texto claro e a chave.

OpçãoTLS no transporteO servidor pode ler o arquivoExpiraçãoConta do destinatário
Anexo de e-mailGeralmente simSim — em cada saltoPara sempreNão é necessária
Link genérico de compartilhamento na nuvemSimSimOpcionalÀs vezes
PDF protegido por senhaSimSim (se o host tiver o arquivo)NuncaNão é necessária
PDF Pro (modo fragmento)SimNão24 h / 30 dNão é necessária
PDF Pro (modo frase-senha)SimNão24 h / 30 dNão é necessária

Compartilhamento baseado em confiança vs. conhecimento zero corrida ao vivo

Mesmo objetivo — compartilhar um PDF. Veja os dois modelos de confiança chegarem à linha de chegada lado a lado.

cloud_upload
Compartilhamento baseado em confiança
O servidor mantém o texto claro
  1. Enviar PDF ao servidor
  2. O servidor mantém o texto claroTexto claro
  3. O servidor promete apagarConfiança
  4. Risco de violação no lado delesRisco
  5. Destinatário baixa texto claroExposto
Cópias em texto claro no servidor
1+
Servidor pode ler
Sim
Chaves no servidor
Sim
shield_lock
Esta ferramenta
Compartilhamento com conhecimento zero
  1. Criptografar PDF no navegadorE2E
  2. O servidor mantém apenas o texto cifradoConhecimento zero
  3. Destinatário decifra localmentePronto
check_circle
Já compartilhado — e o servidor não pode lê-lo.
Sem texto claro no servidor. Sem custódia de chaves. À prova de violação por design.
Cópias em texto claro no servidor
0
Servidor pode ler
Não
Chaves no servidor
Não
A animação roda uma vez por visualização — toque em repetir para ver de novo.

Perguntas frequentes

O que significa, de fato, compartilhamento de PDF criptografado no cliente?
Significa que o servidor que armazena o seu arquivo compartilhado literalmente não consegue decifrá-lo. A chave de criptografia é gerada no navegador do remetente, nunca é enviada, e somente o navegador do destinatário pode reconstruí-la — seja a partir do fragmento da URL ou de uma frase-senha que o remetente compartilha por outro canal. A garantia é imposta pela criptografia, não por uma política de controle de acesso que poderíamos mudar. Observação: isto é distinto das provas formais de conhecimento zero (ZKPs), que este produto não usa.
Que criptografia o PDF Pro usa para compartilhamento criptografado no cliente?
Criptografia simétrica AES-256-GCM com um vetor de inicialização aleatório de 96 bits por arquivo. No modo frase-senha, as chaves são derivadas via PBKDF2-SHA256 com 310.000 iterações sobre um sal aleatório de 128 bits. Toda a criptografia roda na Web Crypto API nativa do navegador.
Qual é a diferença entre o modo fragmento e o modo frase-senha?
O modo fragmento coloca a chave de 256 bits no hash da URL (após #), que os navegadores nunca enviam a nenhum servidor. Qualquer um com o link completo pode decifrar. O modo frase-senha deriva a chave de uma frase-senha que o remetente escolhe; sem ela, o texto cifrado permanece ilegível. O modo frase-senha é mais seguro se o link vazar; o modo fragmento é mais fácil para compartilhamento de baixo atrito. Veja a tabela comparativa acima.
Um fragmento de URL é realmente seguro como portador de uma chave de criptografia?
Navegadores compatíveis nunca transmitem a parte do fragmento de uma URL (a parte após #) para o servidor. Ela permanece no cliente e só é visível para o JavaScript em execução na aba do destinatário. É isso que torna o próprio link de compartilhamento a credencial de decifração — a chave viaja com o destinatário, e não com o upload. Você pode verificar isso na aba Rede do navegador: a URL da requisição é truncada em ? ou #.
O PDF Pro ou um tribunal podem ler arquivos armazenados via compartilhamento criptografado no cliente?
Não. O servidor armazena texto cifrado AES-256-GCM mais um vetor de inicialização (mais um sal no modo frase-senha). Sem a chave — que nunca recebemos — esses dados são criptograficamente indistinguíveis de bytes aleatórios. Só podemos divulgar texto cifrado, que é o que temos.
O que acontece se eu perder o link ou esquecer a frase-senha?
O arquivo fica permanentemente irrecuperável. Isso é por design — criptografia no cliente significa nenhum caminho de recuperação, porque tal caminho exigiria que guardássemos a chave. Salve a frase-senha em um gerenciador de senhas e guarde o link em um lugar durável.
O compartilhamento de PDF criptografado no cliente é gratuito?
Sim. O plano gratuito suporta criptografia AES-256-GCM e expiração do link em 24 horas sem necessidade de cadastro. O limite de arquivo do plano gratuito é de aproximadamente 25 MB por transferência; o Pro estende a janela de expiração para 30 dias e aumenta os limites de tamanho do arquivo.
O destinatário precisa de uma conta?
Não. O destinatário clica no link, o navegador dele decifra localmente via Web Crypto API e baixa o arquivo — sem cadastro, sem instalação, sem um muro de portal entre ele e o arquivo.

Envie um link criptografado de ponta a ponta. Deixe que ele expire conforme planejado.

Criptografia AES-256-GCM no seu navegador. Sem cadastro, sem texto claro no servidor, sem backdoor de recuperação.

sendCriar um link criptografado