A palavra que você já sabe: crib drag em um XOR de chave repetida

Criptografia Nível 4/4 ~7 min 11 de outubro de 2026

O desafio

A ferramenta de deploy da Thornbury grava uma cópia cifrada do arquivo de ambiente de cada serviço ao lado do arquivo em claro, e alguém commitou o arquivo cifrado do serviço ledger sem o arquivo em claro. A ferramenta chama isso de criptografia. É um XOR de chave repetida, e a chave é uma palavra que ninguém anotou. Você não precisa da chave para começar, porque todo arquivo de ambiente que essa ferramenta produz começa com os mesmos doze caracteres, e o XOR devolve tudo aquilo que você fornece e que não estava lá. Recupere a chave e leia a senha do banco de dados.

O que você vai aprender

  • Explicar por que o XOR é seu próprio inverso e o que isso significa para a recuperação da chave
  • Usar um prefixo de texto claro conhecido como crib para extrair uma chave repetida
  • Reconhecer um padrão repetido na saída como confirmação de que o crib estava certo
  • Aplicar a chave recuperada para decifrar a mensagem inteira
  • Identificar os formatos de arquivo fixos que tornam os cribs disponíveis na prática

Habilidades testadas

Criptoanálise clássicaAtaque de texto claro conhecidoConstrução de receita

Pré-requisitos

  • O que o XOR faz bit a bit
  • Leitura de hexadecimal

Como funciona

O XOR tem uma propriedade que decide tudo aqui: aplicar o mesmo valor duas vezes devolve o original. A cifragem é ciphertext = plaintext XOR key, então a decifragem é plaintext = ciphertext XOR key, e o terceiro arranjo é o que os atacantes usam: key = ciphertext XOR plaintext. Se você consegue adivinhar qualquer trecho do texto claro, ganha de graça os bytes da chave que estavam por baixo dele.

Esse palpite se chama crib, e ele quase sempre está disponível. Dados reais têm aberturas fixas: um arquivo de ambiente começa com o nome de uma variável, uma resposta HTTP começa com HTTP/1.1, um PNG começa com sua assinatura, JSON começa com uma chave de abertura. Quando a chave se repete e é mais curta que o crib, os bytes recuperados também se repetem, e essa repetição é sua prova: ruído significa que o palpite estava errado, um ciclo visível significa que estava certo e já revela o tamanho da chave no mesmo olhar.

Um one-time pad evita tudo isso por ser do tamanho da mensagem e nunca ser reutilizado. Uma chave de seis letras aplicada em XOR sobre um arquivo inteiro não é uma versão mais fraca dessa ideia, é algo completamente diferente: a chave é recuperável a partir de qualquer fragmento corretamente adivinhado, e depois disso o arquivo vira texto claro.

Erros comuns

  • Procurar uma cadeia que decodifique em uma única passada. O primeiro XOR é uma medição, não uma decifragem. Você roda a ferramenta duas vezes com chaves diferentes.
  • Desistir quando a saída vira ruído. Só o trecho coberto pelo crib tem significado. Tudo depois dele é lixo esperado.
  • Usar a string repetida inteira como chave. PLOVERPLOVER é a chave escrita duas vezes. Use apenas uma cópia.
  • Esquecer de decodificar o hexadecimal primeiro. O XOR opera sobre bytes. Aplicado ao próprio texto hexadecimal, ele não produz nada útil.
  • Omitir o sinal de igual do crib. ENVIRONMENT tem onze caracteres e ENVIRONMENT= tem doze; um crib mais curto ainda funciona aqui, mas cada caractere que você acerta confirma mais um byte da chave.

Como se proteger

Nenhuma das duas metades deveria existir: nem a cifragem, nem o arquivo.

  • Não coloque segredos no repositório, cifrados ou não. Injete-os no momento do deploy a partir de um gerenciador de segredos, para que não haja artefato a commitar.
  • Se arquivos precisam ficar cifrados em repouso em um repositório, use uma ferramenta de verdade, com cifragem autenticada e chaves gerenciadas. XOR artesanal não é uma cifra fraca, é uma codificação com um argumento em formato de senha.
  • Faça varredura nos commits em busca de blobs de alta entropia e também de chaves em texto claro. Este arquivo passaria por qualquer regex que procurasse por DB_PASS=.
  • Rotacione a credencial agora. Ela foi commitada, então trate-a como pública desde o momento do commit, não desde o momento em que alguém percebeu.

Solução completa

Membros Pro e Max desbloqueiam o passo a passo completo.

Assinar Pro

Estatísticas da comunidade

117 resoluções
80% taxa de sucesso
RamaRoot Primeiro sangue

Hacks de hoje relacionados

32.000+ Hackers Labs reais Grátis
Comece Grátis ou resolva o hack de hoje, sem conta