Criptografia
Criptografia, codificação e hash: diferenças explicadas
Separe codificação, criptografia e hash com laboratórios de Base64, SHA-256 e OpenSSL. Entenda por que Base64 não protege e o hash é de mão única.
Criptografia do zero: cifragem, chaves, hashes, assinaturas e por que a cifra de César ensina ideias, mas não protege nada.
Criptografia é o conjunto de métodos matemáticos usados para proteger informação. Esses métodos mantêm os dados privados, mostram quando algo foi alterado, confirmam quem enviou uma mensagem e permitem que duas partes confiem uma na outra por uma rede que nenhuma delas controla. Você usa criptografia toda vez que o navegador abre um site HTTPS, quando uma atualização de software é assinada ou quando um site confere sua senha sem guardá-la em texto claro.
A cifragem é uma ferramenta dentro da criptografia, e o campo é maior que isso.
Na cifragem, o texto claro e uma chave passam por um algoritmo e produzem o texto cifrado. Quem tem a chave certa consegue desfazer o processo. Quem não tem não deveria tirar nada útil do texto cifrado.
Uma fechadura ajuda a entender a ideia. O mecanismo é o algoritmo, e a chave é o único objeto que abre a fechadura. A comparação falha em um ponto: uma chave de software é um número, não um pedaço de metal. Ainda assim, ela separa duas coisas que as pessoas costumam confundir: o método, que pode ser público, e o valor secreto, que precisa ficar privado.
O princípio de Kerckhoffs, formulado no século XIX, diz que um sistema deve continuar seguro mesmo quando tudo, exceto a chave, é conhecido. Projetos criptográficos modernos seguem essa regra. Se um projeto só funciona enquanto o algoritmo permanece escondido, desconfie dele.
Na cifragem simétrica, uma única chave secreta cifra e decifra. O AES é a cifra de bloco simétrica padrão, especificada pelo NIST no FIPS 197. Ela é rápida, por isso cuida da maior parte dos dados de um sistema. A parte difícil é fazer os dois lados terem a mesma chave sem que um atacante a veja.
Escolher AES é só a primeira decisão. O modo de operação, o tratamento dos nonces e a autenticação do texto cifrado decidem se o projeto é seguro. "Usamos AES" é um ponto de partida, não uma explicação.
Na criptografia assimétrica, cada parte tem um par de chaves: uma chave pública, que qualquer um pode ver, e uma chave privada, que fica com o dono. Esquemas assimétricos permitem que duas partes combinem um segredo compartilhado por um canal aberto e que quem assina prove que tem a chave privada. O TLS 1.3 usa operações assimétricas no handshake para combinar as chaves e verificar a identidade do servidor, e depois passa para cifragem simétrica nos dados. A RFC 8446 descreve esse modelo.
Uma função hash criptográfica recebe uma entrada de qualquer tamanho e devolve um resumo de tamanho fixo. O SHA-256, especificado no FIPS 180-4, sempre devolve 256 bits. Um bom hash torna inviável achar duas entradas com o mesmo resumo e inviável recuperar a entrada a partir do resumo. Não existe chave nem etapa de decifragem.
Hashes servem para verificar integridade. Se o resumo de um arquivo baixado bate com o valor publicado pelo fabricante, o arquivo é muito provavelmente o que foi publicado. Hashes também aparecem dentro de assinaturas e de vários outros protocolos.
Senhas exigem mais que um hash simples. Uma função rápida como o SHA-256 permite que um atacante teste uma quantidade enorme de palpites por segundo em hardware adequado. O OWASP Password Storage Cheat Sheet recomenda uma função deliberadamente lenta e intensiva em memória, como o Argon2id, com um salt único para cada senha e parâmetros ajustados ao seu hardware. A RFC 9106 define o Argon2.
O Base64 transforma dados binários em caracteres de texto para que eles passem por sistemas que esperam texto. A transformação não usa segredo, então qualquer pessoa pode desfazê-la. A codificação existe para tornar o dado portável, não para escondê-lo. As três ideias resolvem problemas diferentes:
A cifra de César desloca cada letra pelo mesmo número de posições. Com deslocamento de três, A vira D, H vira K, e assim por diante. É uma cifra de substituição, e ela já contém o vocabulário central: texto claro, chave, texto cifrado e algoritmo.
Ela falha com dados reais por um motivo simples. O alfabeto tem 26 letras, então só 25 deslocamentos alteram o texto. Um computador testa todos instantaneamente, e uma pessoa consegue testá-los no papel. A frequência das letras em uma mensagem longa revela o deslocamento ainda mais rápido. Por isso ela serve para aula e não para proteção.
Os comandos abaixo rodaram no Git Bash, no Windows 11, usando tr, sha256sum e base64. Rode você mesmo na sua máquina. Não cole senhas reais nem textos confidenciais em nenhum site para testar.
printf 'HELLO' | tr 'A-Z' 'D-ZA-C'Saída:
KHOORDesfazer o deslocamento:
printf 'KHOOR' | tr 'D-ZA-C' 'A-Z'Saída:
HELLOprintf 'HELLO' | sha256sum | cut -d' ' -f1
printf 'HELLP' | sha256sum | cut -d' ' -f1Saída:
3733cd977ff8eb18b987357e22ced99f46097f31ecb239e878ae63760e83e4d5
d37f1f826f924dcd23aacbdc875edd4808b9e118d35adb9dce1c80cb23c4a9c1Trocar uma letra muda o resumo inteiro. Nada na saída permite recuperar HELLO. Para testar um palpite, você calcula o hash do palpite e compara.
printf 'HELLO' | base64Saída:
SEVMTE8=Quem vê SEVMTE8= consegue decodificar. Trate isso como formato, não como segredo.
Comece pelos objetivos básicos de segurança: confidencialidade, integridade e disponibilidade, vistos no artigo sobre fundamentos de cibersegurança. Depois leia o artigo sobre a cifra de César, que aprofunda substituição e análise de frequência. Em seguida estude hash, chaves simétricas e TLS, usando as fontes primárias listadas com este artigo em vez de resumos.
Pratique na sua própria máquina, com dados sintéticos ou em um laboratório que seja seu ou para o qual você tenha permissão por escrito.
Criptografia
Separe codificação, criptografia e hash com laboratórios de Base64, SHA-256 e OpenSSL. Entenda por que Base64 não protege e o hash é de mão única.
Criptografia
Por que hashes rápidos falham em senhas, o que fazem o salt e o fator de trabalho, e como gerar e verificar hashes com Argon2id em Python.
Criptografia
Chaves pública e privada do zero: o que uma assinatura prova, por que a chave privada fica em segredo e um lab Ed25519 em que um arquivo alterado falha.