Criptografia de ZIP
Criptografia WinZip AES, explicada em detalhe
O esquema moderno de criptografia de ZIP combina o AES com uma função de derivação de chave lenta e autenticação por entrada. Juntas, elas tornam uma senha errada barata de descartar e uma senha forte impraticável de adivinhar.
O AES chega ao formato ZIP
A criptografia tradicional de ZIP nunca foi forte, então a WinZip introduziu um esquema baseado em AES que a maioria das ferramentas de arquivamento modernas hoje suporta. Ele substitui a cifra antiga, o ZipCrypto, pelo Advanced Encryption Standard, adiciona uma função de derivação de chave adequada e anexa uma verificação de integridade real a cada entrada. O resultado é uma criptografia que resiste ao escrutínio, ao custo deliberado de ser lenta de testar.
Como aparece dentro do ZIP
Uma entrada criptografada com AES não registra seu verdadeiro método de
compressão no lugar habitual. Em vez disso, o campo de método é definido
como 99, um marcador que significa "criptografado com AES",
e o método de compressão real é armazenado em outro lugar. Os detalhes ficam
em um campo extra com id de cabeçalho 0x9901. Esse campo contém
uma etiqueta de fornecedor de dois caracteres, AE, um número de
versão que é AE-1 ou AE-2, um byte de força e o método de compressão real
usado sob a criptografia.
O byte de força determina o restante do esquema. Um valor de 1 significa AES-128, 2 significa AES-192 e 3 significa AES-256. A partir desse único byte, uma ferramenta sabe o comprimento da chave, o comprimento do sal e quanto material de chave derivar.
Derivação de chave
Sua senha nunca é usada diretamente como chave. O WinZip AES a processa através de PBKDF2-HMAC-SHA1 com 1000 iterações e um sal aleatório armazenado com a entrada. O comprimento do sal depende da força: 8 bytes para AES-128, 12 bytes para AES-192 e 16 bytes para AES-256. O PBKDF2 estica a senha em um bloco de material de chave, que é dividido em três partes: a chave de criptografia AES, uma chave de autenticação separada de mesmo comprimento e um valor de verificação de senha de 2 bytes.
Esse valor de 2 bytes é armazenado na entrada. Ele permite que uma ferramenta rejeite uma senha incorreta quase imediatamente, sem descriptografar nada, porque a senha correta reproduz os mesmos dois bytes. É apenas um filtro rápido, não uma prova, já que duas senhas diferentes poderiam, em princípio, produzir o mesmo par de bytes. A confirmação final vem do código de autenticação.
| Byte de força | Comprimento da chave AES | Comprimento do sal | Valor de verificação | HMAC armazenado |
|---|---|---|---|---|
| 1 | AES-128 (16 bytes) | 8 bytes | 2 bytes | 10 bytes |
| 2 | AES-192 (24 bytes) | 12 bytes | 2 bytes | 10 bytes |
| 3 | AES-256 (32 bytes) | 16 bytes | 2 bytes | 10 bytes |
Criptografia e autenticação
Os dados do arquivo são criptografados com AES em modo CTR, ou contador. Isso transforma a cifra de bloco em um fluxo de chave e permite que uma entrada de qualquer comprimento seja criptografada byte a byte. A integridade é tratada separadamente. Após a criptografia, um HMAC-SHA1 é calculado sobre o texto cifrado usando a chave de autenticação, e os primeiros 10 bytes desse HMAC são armazenados no fim da entrada. É um design de criptografar e depois autenticar (encrypt-then-MAC): o código de autenticação cobre os bytes criptografados, de modo que uma ferramenta pode verificar que tanto a senha quanto os dados estão corretos antes mesmo de tentar descomprimir.
As duas versões diferem em um detalhe. O AE-1 mantém a soma de verificação CRC-32 da entrada no cabeçalho, o que permite uma segunda verificação de integridade, mais antiga, após a descriptografia. O AE-2 define o campo CRC como zero e depende inteiramente do HMAC. Ambos usam a mesma cifra e a mesma derivação de chave; a diferença está apenas em como a integridade é registrada.
Duas verificações, um resultado confirmado
O ZipRecover compara primeiro o valor de verificação de 2 bytes para descartar tentativas erradas de forma barata, depois recalcula o HMAC-SHA1 de 10 bytes para confirmar um sobrevivente. Uma senha informada passou pela verificação definitiva, não apenas pela rápida.
Por que é forte, e lento
Duas propriedades tornam o WinZip AES resistente à tentativa e erro de senhas. Primeiro, o próprio AES não tem atalho prático, então um atacante não pode recuperar a chave diretamente do texto cifrado. Segundo, as 1000 iterações do PBKDF2 estão ali de propósito. Derivar uma chave de uma senha candidata custa mil operações HMAC-SHA1 por bloco de saída de 20 bytes (cerca de quatro mil para AES-256), então testar senhas é cerca de 375 vezes mais lento do que com um esquema sem alongamento na nossa medição com uma única thread (veja quanto tempo leva a recuperação). Esse custo é trivial para alguém que sabe sua senha e a digita uma vez, mas torna a tentativa e erro em larga escala cara.
Na prática, um arquivo criptografado com AES e bloqueado com uma senha forte, gerada aleatoriamente, não é recuperável por tentativa e erro, por mais rápido que seja o hardware. A recuperação tem uma chance real apenas quando a senha é curta, segue um padrão que você lembra ou aparece em uma lista de palavras que você pode fornecer. Esse limite vem do próprio esquema, e nenhuma ferramenta de recuperação, a nossa incluída, o contorna. Como o ZipRecover usa o valor de verificação e o HMAC juntos está descrito em como funciona. A visão geral de arquivos ZIP criptografados situa o AES ao lado do esquema legado, e ZipCrypto vs AES comparados coloca os dois lado a lado.
Apenas uso autorizado
Use esta ferramenta apenas em arquivos ZIP que você possui ou está autorizado a acessar. Tentar abrir arquivos sem permissão pode violar as leis aplicáveis. Consulte nossa Política de Uso Aceitável e os Termos de Uso.
Perguntas frequentes
Uma senha forte do WinZip AES pode ser recuperada?
Não por tentativa. O AES não tem atalho prático e o PBKDF2 torna cada tentativa lenta, então uma senha longa e aleatória é efetivamente irrecuperável. A recuperação só tem chance real quando a senha é curta ou segue um padrão que você lembra.
Qual é a diferença entre AE-1 e AE-2?
O AE-1 mantém o CRC-32 da entrada para uma verificação de integridade extra após a descriptografia. O AE-2 define o campo CRC como zero e depende do HMAC-SHA1 de 10 bytes. Ambos usam a mesma cifra AES e a mesma derivação de chave PBKDF2.
Por que o AES é tão mais lento de testar do que o ZipCrypto?
O WinZip AES executa 1000 iterações de PBKDF2-HMAC-SHA1 para cada senha candidata, por design. Na nossa medição com uma única thread, esse alongamento deliberado tornou o teste de uma candidata AES cerca de 375 vezes mais lento do que com o esquema legado ZipCrypto, que não tem essa etapa; veja quanto tempo leva a recuperação para os números.
Como sei qual tamanho de chave AES meu ZIP usa?
O byte de força no campo extra 0x9901 registra isso: 1 significa AES-128, 2 significa AES-192 e 3 significa AES-256. O ZipRecover lê isso automaticamente quando você seleciona o arquivo, então você não precisa inspecionar por conta própria.
Criptografia ZIP
Continue explorando este tema
Temas relacionados: Recuperação de senha ZIP Privacidade e processamento local
Pronto para recuperar sua senha de ZIP?
Tudo é executado localmente no seu navegador. Seu arquivo nunca sai do seu dispositivo.