Encriptado no Cliente · Partilha de PDF

Partilha de PDF encriptada no cliente, explicada como deve ser.

A expressão "encriptado de ponta a ponta" é usada de forma vaga. Eis o verdadeiro mecanismo criptográfico por trás de um link PDF encriptado no cliente — AES-256-GCM, gestão de chaves, modos fragmento vs frase-passe, e o que o servidor, literalmente, não pode fazer. Nota: "conhecimento zero" nesta página refere-se ao servidor não deter qualquer informação que possa desencriptar o seu ficheiro, não a provas formais de conhecimento zero (ZKPs) — o produto não utiliza ZKPs.

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

O que significa "conhecimento zero" aqui

Desambiguação rápida antes de tudo: este sistema não utiliza provas de conhecimento zero (ZKPs). A expressão "conhecimento zero" nesta página refere-se à propriedade mais fraca, mas praticamente útil, de que o servidor que armazena o seu ficheiro partilhado não tem qualquer conhecimento — criptográfico ou operacional — que possa ser usado para o desencriptar. A chave nunca toca no servidor, pelo que o servidor não a pode revelar em circunstância alguma. O mecanismo é encriptação simples do lado do cliente mais uma chave que viaja apenas no fragmento do URL (ou é derivada de uma frase-passe que o servidor nunca vê).

memory
A encriptação acontece no seu navegador
Não no servidor, não num worker que não controla — no seu separador, via window.crypto.subtle. Verificável nas ferramentas de programador.
cloud_off
Apenas o texto cifrado é enviado
O corpo do envio é texto cifrado AES-256-GCM. O PDF, o nome do ficheiro e os metadados nunca chegam ao servidor de forma legível.
vpn_key
A chave viaja com o destinatário
Quer no fragmento do URL (nunca enviado aos servidores), quer derivada de uma frase-passe escolhida pelo remetente. De qualquer forma, nunca a vemos.
block
Sem recuperação = sem backdoor
Perdeu o link ou esqueceu a frase-passe? O ficheiro desapareceu para sempre. Como a chave nunca chega ao nosso servidor, o caminho de recuperação que enfraqueceria a garantia não existe.

Como se constrói um link de PDF encriptado no cliente

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

1 — Navegador do remetente
// chave AES de 256 bits, gerada localmente key = crypto.subtle.generateKey({name:"AES-GCM", length:256}) // IV de 96 bits novo por ficheiro iv = crypto.getRandomValues(new Uint8Array(12)) // encriptar localmente; o GCM dá-nos um tag de autenticação para integridade ct = crypto.subtle.encrypt({name:"AES-GCM", iv}, key, pdfBytes) // enviar texto cifrado + iv (e salt, se modo frase-passe) id = await PUT("/api/transfer", ct, {iv, expiry})
2 — Forma do link de partilha
// modo fragmento: chave fica após # link_f = `https://pdfpro.tools/s/<ID>#<KEY>` // modo frase-passe: sem chave no link; o destinatário tem de saber a frase-passe link_p = `https://pdfpro.tools/s/<ID>`
3 — Servidor armazena bytes opacos
ciphertext = ??? // parece aleatório, ilegível iv = nonce de 12 bytes salt = aleatório de 16 bytes (apenas modo frase-passe) expiry = 24h gratuito / 30d Pro
4 — Navegador do destinatário
// os navegadores nunca transmitem o fragmento do URL ao servidor 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) // navegador entrega o pdf à pasta Transferências

Modo fragmento vs modo frase-passe

Duas formas de levar a chave até ao destinatário. A mesma garantia sobre o texto cifrado, diferentes compromissos de usabilidade / risco de fuga.

Modo Fragmento

A chave viaja no hash do URL (#)

O fluxo mais simples: copie o link, cole-o num chat para o destinatário, pronto. A parte do URL após # nunca é enviada a qualquer servidor Web por qualquer navegador conforme — é isto que mantém a chave privada.

  • Um passo para o destinatário — clicar no link.
  • Pouco atrito, adequado a partilhas de sensibilidade baixa a média.
  • Risco: se o link vazar numa captura de ecrã ou na sincronização do navegador, o ficheiro vaza com ele.
  • Use quando confia no canal (mensageiro com assinatura, chat interno).
Modo Frase-Passe

Chave derivada de uma frase-passe (PBKDF2)

O remetente escolhe uma frase-passe. O navegador deriva uma chave de 256 bits via PBKDF2-SHA256 com 310 000 iterações sobre um salt aleatório de 128 bits. O salt é armazenado do lado do servidor; a frase-passe é partilhada fora da banda (telefone, Signal, presencialmente).

  • Partilha em dois fatores: o link e a frase-passe viajam em separado.
  • O link sozinho não chega — o texto cifrado permanece ilegível.
  • A robustez da frase-passe importa: 310 mil iterações abrandam a força bruta, mas não salvam uma frase-passe de 6 caracteres.
  • Use quando o link pode ser reencaminhado ou armazenado num local em que não confia totalmente.
PropriedadeModo fragmentoModo frase-passe
Transporte da chaveHash do URL (#)Frase-passe + salt
Servidor alguma vez vê a chaveNãoNão
Servidor armazenaTexto cifrado + IVTexto cifrado + IV + salt
Atrito para o destinatárioClicar no linkClicar no link + escrever a frase-passe
Vazável por captura de ecrãSim (link = chave)Não (link sozinho é inútil)
Resistente à força brutaAleatório de 256 bitsDepende da frase-passe
Melhor paraPartilha de baixo atrito por canais fiáveisPartilhas de maior sensibilidade

Porque é que texto cifrado armazenado no servidor continua a protegê-lo

Pergunta-se frequentemente: "se está no vosso servidor, como é privado?". A resposta é que o texto cifrado não é o ficheiro. Sem a chave, são apenas bytes que parecem aleatórios. Eis o que isso significa na prática.

storage
Brecha na base de dados = fuga de texto cifrado
Se um atacante comprometesse a nossa base de dados, sairia com bytes opacos. Recuperar um único ficheiro exigiria ataque por força bruta a uma chave de 256 bits — inviável com a física conhecida.
gavel
Uma intimação produz texto cifrado
Um tribunal pode obrigar-nos a entregar o que temos. O que temos é texto cifrado. Uma ordem judicial não pode criar retroativamente uma chave que nunca armazenámos.
group
O acesso de um interno é neutralizado
Um funcionário desonesto com credenciais totais da base de dados continua a não conseguir ler ficheiros. A garantia é imposta pela matemática, não pelo controlo de acessos.
timer
A expiração reforça a garantia
O texto cifrado é eliminado na expiração (24 h gratuito, até 30 d Pro). Depois disso, até o texto cifrado desaparece — a única cópia do ficheiro existe onde foi desencriptado.

warningLimitações honestas

A encriptação no cliente não resolve a segurança do terminal. 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 ficheiro desencriptado. E um link reencaminhado num chat de grupo desfaz todas as garantias criptográficas. A arquitetura aumenta o custo de uma brecha; não elimina todo o risco.

Encriptação no cliente vs outras opções "seguras"

Uma comparação clara das escolhas comuns para partilhar um PDF. A maioria das opções rotuladas como "seguras" tem encriptação em trânsito — protegem os dados durante a viagem, mas o servidor recetor continua a deter o texto simples e a chave.

OpçãoTLS em trânsitoServidor consegue ler o ficheiroExpiraçãoConta do destinatário
Anexo de e-mailNormalmente simSim — em cada saltoPara sempreNão exigida
Link genérico de partilha em nuvemSimSimOpcionalPor vezes
PDF protegido por palavra-passeSimSim (se o anfitrião tiver o ficheiro)NuncaNão exigida
PDF Pro (modo fragmento)SimNão24h / 30dNão exigida
PDF Pro (modo frase-passe)SimNão24h / 30dNão exigida

Partilha que exige confiança vs conhecimento zero corrida em direto

O mesmo objetivo — partilhar um PDF. Veja os dois modelos de confiança a terminar, lado a lado.

cloud_upload
Partilha que exige confiança
Servidor detém texto simples
  1. Enviar PDF ao servidor
  2. Servidor detém texto simplesTexto simples
  3. Servidor promete eliminarConfiança
  4. Risco de brecha do lado delesRisco
  5. Destinatário descarrega texto simplesExposto
Cópias em texto simples no servidor
1+
Servidor consegue ler
Sim
Chaves no servidor
Sim
shield_lock
Esta ferramenta
Partilha de conhecimento zero
  1. Encriptar PDF no navegadorPonta a Ponta
  2. Servidor detém apenas texto cifradoConhecimento zero
  3. Destinatário desencripta localmenteConcluído
check_circle
Já partilhado — e o servidor não consegue lê-lo.
Sem texto simples no servidor. Sem custódia de chaves. À prova de brechas por design.
Cópias em texto simples no servidor
0
Servidor consegue ler
Não
Chaves no servidor
Não
A animação corre uma vez por visualização — toque em repetir para ver novamente.

Perguntas frequentes

O que significa, na prática, partilha de PDF encriptada no cliente?
Significa que o servidor que armazena o seu ficheiro partilhado, literalmente, não consegue desencriptá-lo. A chave de encriptação é gerada no navegador do remetente, nunca enviada, e apenas o navegador do destinatário a consegue reconstruir — quer a partir do fragmento do URL, quer a partir de uma frase-passe que o remetente partilha fora da banda. A garantia é imposta pela criptografia, não por uma política de controlo de acessos que pudéssemos alterar. Nota: isto é distinto das provas formais de conhecimento zero (ZKPs), que este produto não utiliza.
Que encriptação utiliza o PDF Pro na partilha encriptada no cliente?
Encriptação simétrica AES-256-GCM com um vetor de inicialização aleatório de 96 bits por ficheiro. No modo frase-passe, as chaves são derivadas via PBKDF2-SHA256 com 310 000 iterações sobre um salt aleatório de 128 bits. Toda a criptografia corre na Web Crypto API nativa do navegador.
Qual é a diferença entre o modo fragmento e o modo frase-passe?
O modo fragmento coloca a chave de 256 bits no hash do URL (após #), que os navegadores nunca enviam a qualquer servidor. Qualquer pessoa com o link completo pode desencriptar. O modo frase-passe deriva a chave de uma frase-passe escolhida pelo remetente; o texto cifrado permanece ilegível sem ela. O modo frase-passe é mais seguro se o link vazar; o modo fragmento é mais simples para partilhas sem atrito. Consulte a tabela de comparação acima.
Um fragmento de URL é mesmo seguro para transportar uma chave de encriptação?
Os navegadores conformes nunca transmitem a parte do fragmento de um URL (a parte após #) ao servidor. Fica do lado do cliente e só é visível ao JavaScript em execução no separador do destinatário. É isto que faz com que o próprio link de partilha seja a credencial de desencriptação — a chave viaja com o destinatário, não com o envio. Pode verificar isto no separador Rede do seu navegador: o URL do pedido é truncado em ? ou #.
O PDF Pro ou um tribunal podem ler ficheiros guardados via partilha encriptada no cliente?
Não. O servidor armazena texto cifrado AES-256-GCM mais um vetor de inicialização (mais um salt no modo frase-passe). Sem a chave — que nunca recebemos — esses dados são criptograficamente indistinguíveis de bytes aleatórios. Apenas podemos divulgar texto cifrado, que é o que temos.
O que acontece se perder o link ou esquecer a frase-passe?
O ficheiro é permanentemente irrecuperável. É intencional — encriptação no cliente significa não haver caminho de recuperação, porque um caminho de recuperação exigiria que detivéssemos a chave. Guarde a frase-passe num gestor de palavras-passe e guarde o link num local duradouro.
A partilha de PDF encriptada no cliente é gratuita?
Sim. O nível gratuito suporta encriptação AES-256-GCM e expiração de link de 24 horas sem necessidade de registo. O limite de ficheiro do nível gratuito é cerca de 25 MB por transferência; o Pro estende a janela de expiração para 30 dias e aumenta os limites de tamanho de ficheiro.
O destinatário precisa de conta?
Não. O destinatário clica no link, o navegador desencripta localmente via Web Crypto API, e ele descarrega o ficheiro — sem registo, sem instalação, sem barreira de portal entre ele e o ficheiro.

Envie um link encriptado de ponta a ponta. Deixe-o expirar conforme planeado.

Encriptação AES-256-GCM no seu navegador. Sem registo, sem texto simples no servidor, sem backdoor de recuperação.

sendCriar um Link Encriptado