Whitepaper de segurança e privacidade (visão geral)Capítulo 5
Capítulo 5 Criptografia e gerenciamento de chaves
Este capítulo descreve a criptografia de ponta a ponta (E2EE) do FileBolt e o limite de conhecimento zero, e especifica os parâmetros de cryptoVersion=v1, as regras de codificação, os modos de falha e as restrições do cliente. As chaves são geradas e usadas no cliente; o servidor e o armazenamento de objetos lidam apenas com blocos de texto cifrado e os metadados necessários.
5.0 Resumo
- O sistema NÃO DEVE receber, armazenar nem registrar em log as chaves de descriptografia (CEK). O material da CEK é transportado apenas no fragmento da URL (a parte após o
#), que não é enviado ao servidor nas requisições HTTP. - A criptografia usa AES-128-GCM (AEAD). Cada arquivo usa uma CEK independente (16 bytes). O tamanho do bloco é fixo (por exemplo, 16 MB).
- Construção do IV na v1: IV = noncePrefix(8B) || uint32_be(chunkIndex)(4B). O AAD vincula
transferId,fileIdechunkIndexpara impedir a troca de contexto e o replay. - Os tokens do servidor controlam apenas o acesso ao texto cifrado e expiram; eles não concedem capacidade de descriptografia.
5.1 Criptografia de transporte (TLS)
5.1.1 Objetivo de segurança
- Impedir espionagem e adulteração nas conexões de upload, download e API.
- Proteger tokens e texto cifrado em trânsito.
5.1.2 Política de segurança
- O sistema DEVE servir todas as páginas e APIs somente por HTTPS.
- O sistema DEVERIA dar preferência ao TLS 1.3 e oferecer suporte ao TLS 1.2 quando necessário; protocolos e cifras fracos DEVEM ser desativados.
- O sistema DEVE ativar o HSTS com um valor razoável de
max-age.
5.2 Criptografia de blocos (AES-128-GCM)
5.2.1 Notas de projeto
- Os arquivos são divididos em blocos de tamanho fixo; cada bloco é criptografado de forma independente para permitir transferência paralela e retomada.
- A autenticação AEAD protege a integridade; qualquer falha de autenticação DEVE resultar em falha fechada (fail closed).
5.2.2 Política de segurança
- Cada arquivo DEVE usar uma CEK distinta (16 bytes).
- O IV DEVE ser único por (arquivo, chunkIndex). A v1 usa a codificação
noncePrefix+chunkIndex. - O AAD DEVE incluir (transferId, fileId, chunkIndex) para vincular o texto cifrado ao seu contexto.
5.3 Modelo de link de conhecimento zero
5.3.1 Restrições principais
- A CEK (ou o material de derivação) DEVE ser transportada apenas no fragmento da URL e NÃO DEVE ser incluída em parâmetros de consulta nem em cabeçalhos.
- O servidor NÃO DEVE registrar fragmentos em log; os logs DEVEM ser higienizados para evitar captura acidental.
- A política de referenciador DEVERIA impedir o vazamento do fragmento em navegações de saída (ver Capítulo 9).
5.4 Geração e tratamento de chaves
- As chaves DEVEM ser geradas com um gerador de números aleatórios criptograficamente seguro (WebCrypto).
- As chaves DEVERIAM ser mantidas apenas na memória e apagadas quando não forem mais necessárias.
- Os clientes NÃO DEVEM manter a CEK de forma persistente em locais visíveis ao servidor (por exemplo, cookies, parâmetros de consulta).
5.5 Codificação e parâmetros
- cryptoVersion=v1 identifica o conjunto de algoritmos e as regras de IV/AAD.
- O manifesto DEVE incluir os parâmetros públicos necessários (tamanho/quantidade de blocos, noncePrefix, mapeamento de fileId), mas NÃO DEVE incluir a CEK.
5.6 Modos de falha (falha fechada)
- Em caso de falha de descriptografia ou de autenticação AEAD, os clientes DEVEM abortar e NÃO DEVEM gerar texto simples parcial.
- Em caso de divergência de parâmetros (transferId/fileId/chunkIndex), os clientes DEVEM falhar de forma fechada e DEVERIAM informar um erro acionável.
5.7 IDs de afirmação relacionados
- Consulte o Apêndice: IDs de afirmação para o mapeamento oficial.