O Revault criptografa um arquivo grande em segmentos de cerca de 5 MiB, cada um com sua própria tag de autenticação, de modo que o arquivo inteiro nunca precisa ficar na memória de uma só vez. No app web, é isso que permite arquivos de até 1 GiB.
Por que não criptografar o arquivo inteiro de uma vez?
Arquivos grandes não devem exigir muita memória. Revault lê arquivos em segmentos de aproximadamente 5 MiB, criptografa cada segmento no navegador e prepara o texto cifrado em IndexedDB. O arquivo original nunca é lido em um buffer gigante.
Trabalhar em segmentos também significa que um envio interrompido pode continuar a partir do texto cifrado que já está preparado, em vez de criptografar o arquivo inteiro de novo.
O que protege a ordem e a integridade dos segmentos?
Cada arquivo recebe sua própria chave de criptografia, derivada com HKDF a partir da chave mestra do cofre. O contexto de derivação inclui os identificadores do cofre e do arquivo, o tamanho do arquivo em bytes e o tamanho do segmento.
O nonce de 12 bytes de cada segmento combina um prefixo aleatório escolhido para aquele arquivo, um contador de segmento de quatro bytes e um sinalizador que marca o segmento final. Os segmentos levam tags GCM de 128 bits. Se segmentos forem trocados, alterados ou cortados, a verificação falha.
O que acontece se um envio for interrompido?
Depois que a criptografia for concluída, os uploads de rede poderão ser retomados a partir do texto cifrado armazenado em cache após a atualização da página. As novas tentativas enviam os mesmos bytes criptografados, em vez de criptografar uma nova fonte em nonces antigos. Se a criptografia for interrompida, cancele o upload incompleto e comece novamente com uma nova identidade de arquivo.
Como os downloads são verificados?
Os downloads autenticam cada segmento antes de liberá-lo. Como a verificação acontece enquanto o arquivo é transmitido, um erro no fim de um download pode deixar um arquivo incompleto para trás; por isso, confirme que o download terminou com sucesso antes de confiar nele.
Quais são os limites?
Cada arquivo no app web pode ter até 1 GiB. As pré-visualizações de imagens e vídeos têm um limite de memória separado. Limpar o armazenamento local do navegador pode remover o texto cifrado necessário para retomar um envio.
O formato de streaming segue a construção de streaming AES-GCM-HKDF documentada da Tink, usando primitivas nativas de criptografia da Web. A identidade do arquivo e o comprimento esperado estão vinculados ao contexto de derivação da chave; os contadores de segmento e o marcador final protegem a ordem e a conclusão. Esta implementação não recebeu uma auditoria criptográfica independente.
A página do modelo de segurança descreve a construção completa, incluindo o cabeçalho do fluxo e a derivação de chaves.