FlowingDev

Criptografia AES, explicada: O cofre digital favorito do mundo

Aprenda como a criptografia simétrica AES usa uma única chave baseada em senha para transformar texto legível em texto cifrado e vice-versa, protegendo dados modernos.

Testar a ferramenta: Ferramentas de criptografia

Em uma frase

Criptografia AES baseada em senha é um método padrão para embaralhar e desembaralhar dados usando uma única chave secreta que é criada a partir de uma senha que você escolhe.

O problema que ela resolve

Desde que os humanos começaram a escrever, nós queríamos escrever coisas que outras pessoas não conseguissem ler. De generais romanos trocando letras em uma mensagem (a cifra de César) a espiões usando "one-time pads" na Guerra Fria, o objetivo sempre foi o mesmo: confidencialidade. Se a mensagem cair nas mãos erradas, ela deve parecer um monte de caracteres sem sentido.

Na era digital, esse problema está em toda parte. Seus dados voam por redes Wi-Fi públicas suspeitas, ficam em servidores de corporações gigantes e são salvos em backups de discos rígidos que podem acabar em um aterro sanitário. Como você garante que sua mensagem privada, sua lista de chaves de API ou sua receita secreta de cookie permaneça secreta?

As cifras da velha guarda eram fáceis de quebrar, especialmente com computadores que podem tentar bilhões de combinações por segundo. Precisávamos de algo melhor. Muito melhor. Eis que surge o Advanced Encryption Standard, ou AES.

No final dos anos 90, o Instituto Nacional de Padrões e Tecnologia dos EUA (NIST) realizou uma competição pública para encontrar um substituto para o já envelhecido Data Encryption Standard (DES). Eles não estavam procurando por um algoritmo secreto cozinhado em um porão do governo; eles queriam uma cifra transparente, pública e brutalmente testada na qual o mundo inteiro pudesse confiar. Após anos de rinha de galo criptográfica, um algoritmo belga chamado "Rijndael" (uma mistura dos nomes de seus inventores, Rijmen e Daemen) foi coroado o vencedor em 2001.

Ele era rápido, eficiente e, o mais importante, havia resistido a um ataque global de tentativas de quebrá-lo. Ele se tornou o AES, o padrão que usamos hoje para trancar tudo, desde sites seguros (HTTPS) até discos rígidos criptografados e arquivos sensíveis. Ele resolve o antigo problema de guardar segredos com o rigor matemático moderno.

Como funciona por baixo dos panos

O AES parece mágica: você sussurra uma frase secreta e seu texto se transforma em uma bagunça ilegível. Sussurra de novo, e ele volta ao normal. Mas por baixo dos panos, é apenas uma série de passos matemáticos inteligentes e repetíveis.

Simétrica vs. Assimétrica

Primeiro, um conceito-chave. A criptografia vem em dois sabores principais. O AES é simétrico, o que significa que a mesma chave é usada para trancar (criptografar) e destrancar (descriptografar) os dados. É como a chave da sua casa — ela tranca a porta, e a mesmíssima chave a destranca. Isso é rápido e eficiente.

O outro sabor é a criptografia assimétrica (ou de chave pública). Ela usa duas chaves diferentes: uma chave pública para trancar os dados e uma chave privada para destrancá-los. É como uma caixa de correio: qualquer um pode colocar uma carta (usando a fenda pública), mas apenas você tem a chave privada para abri-la e ler as correspondências. Isso é ótimo para quando você não pode compartilhar uma chave secreta com segurança de antemão, mas é muito mais lento que a criptografia simétrica.

A criptografia baseada em senha usa o modelo simétrico porque você e quem precisar descriptografar os dados compartilharão a mesma senha.

Da Senha para a Chave: O KDF

Aqui está um detalhe crítico: sua senha, "SenhaSuperSecreta@123", não é a chave de criptografia. Senhas memorizáveis por humanos não são aleatórias o suficiente ou longas o suficiente para serem chaves criptográficas seguras.

Em vez disso, sua senha é alimentada em uma Key Derivation Function (KDF). Pense em um KDF como um algoritmo de propósito específico projetado para transformar uma senha em uma chave criptográfica forte e de tamanho fixo. KDFs modernos como o PBKDF2 (Password-Based Key Derivation Function 2) ou Argon2 fazem três coisas importantes:

  1. Adicionar um Salt: Um salt é um pedaço de dados aleatório gerado para cada nova criptografia. Ele é misturado com sua senha antes de ser processado. Isso significa que mesmo que dois usuários tenham a mesma senha, as chaves de criptografia resultantes serão totalmente diferentes. Isso por si só derrota ataques de "rainbow table", onde hackers usam tabelas pré-computadas de senhas comuns e seus hashes resultantes. O salt é armazenado junto com os dados criptografados; não é um segredo, apenas um ingrediente único.
  2. Esticar a Chave: O KDF executa a senha e o salt através de um algoritmo de hashing (como SHA-256) não uma vez, mas milhares, ou até milhões, de vezes. Isso é chamado de "iterações" ou "fator de trabalho". Isso torna o processo deliberadamente lento. Para você, esperar algumas centenas de milissegundos não é grande coisa. Para um invasor tentando forçar sua senha por força bruta, é um pesadelo, tornando computacionalmente caro tentar bilhões de palpites.
  3. Produzir a Chave: Depois de todo esse trabalho, o KDF cospe uma chave do comprimento desejado (por exemplo, 256 bits) que parece puro ruído aleatório. Esta é a chave real usada pelo AES.
Sua Senha + Salt Aleatório + Muitas Iterações -> Chave de Criptografia Forte
("hunter2"  + "a3f9d..."   + 100,000 rounds) -> Chave AES de 256 bits

A Cifra AES em Si: Um Estado e Rounds

Agora, o evento principal. O AES opera em blocos de dados de tamanho fixo — sempre 128 bits (16 bytes) por vez. Sua mensagem de texto puro é picada nesses blocos de 16 bytes. Cada bloco é carregado em uma grade 4x4 de bytes chamada de matriz de estado (state matrix).

Este estado então passa por uma série de transformações idênticas chamadas rounds (rodadas). O número de rounds depende do tamanho da chave:

  • AES-128: 10 rounds
  • AES-192: 12 rounds
  • AES-256: 14 rounds

Cada round (exceto o último) consiste em quatro passos:

  1. SubBytes: Cada byte na matriz de estado é trocado por um diferente usando uma tabela de consulta padrão (a "Rijndael S-box"). Este é o principal passo não linear que introduz confusão.
  2. ShiftRows: Os bytes em cada linha da matriz são deslocados ciclicamente. A primeira linha não é deslocada, a segunda é deslocada por um, a terceira por dois e a quarta por três. Isso embaralha os dados.
  3. MixColumns: Uma operação matemática é realizada em cada coluna, misturando os bytes. Isso fornece difusão, espalhando a influência de um único byte de texto puro por todo o bloco.
  4. AddRoundKey: Uma porção da chave de criptografia principal (uma "chave de rodada" específica para este round) sofre uma operação XOR com o estado. É aqui que a chave secreta realmente se mistura aos seus dados.

Essa sequência SubBytes -> ShiftRows -> MixColumns -> AddRoundKey é repetida várias vezes. Cada round embaralha ainda mais os dados até que, após o round final, a matriz de estado seja um bloco de texto cifrado completamente indecifrável. Para descriptografar, você apenas executa os passos na ordem inversa com a mesma chave.

Juntando Tudo: Modos de Cifra e Padding

O AES só sabe como criptografar um único bloco de 16 bytes. E a sua mensagem de 500 bytes? É aqui que entram os modos de operação. Um modo de operação é uma receita para usar uma cifra de bloco para criptografar um fluxo de dados de qualquer tamanho.

Modos mais antigos como o CBC (Cipher Block Chaining) tinham algumas pegadinhas de segurança. O modo moderno e recomendado é o GCM (Galois/Counter Mode). O GCM é um modo de "criptografia autenticada", que é uma maneira chique de dizer que ele oferece duas coisas pelo preço de uma:

  • Confidencialidade: Ele criptografa seus dados para que ninguém possa lê-los.
  • Autenticidade: Ele produz uma pequena "tag de autenticação". Se um único bit do texto cifrado for alterado ou adulterado durante o trânsito, a tag não corresponderá quando você descriptografar, e o processo falhará. Isso diz a você não apenas que os dados eram secretos, mas também que não foram adulterados.

Histórias do mundo real

O Segredo do Cliente da Freelancer

Uma designer de UX, Anya, precisava enviar um mockup de um novo produto ainda não anunciado para seu cliente. O arquivo do mockup continha informações estratégicas e de branding sensíveis. Enviá-lo por e-mail parecia arriscado — e-mail é notoriamente inseguro. Montar um portal seguro de transferência de arquivos era um exagero para uma entrega única. Em vez disso, Anya criptografou o arquivo ZIP contendo seu trabalho usando uma senha. Ela então ligou para o cliente e disse a senha por telefone. Agora ela podia enviar o arquivo criptografado por e-mail com segurança, sabendo que apenas o cliente poderia abri-lo.

Lição: A criptografia baseada em senha é uma ferramenta fantástica para o compartilhamento ad-hoc e seguro de arquivos sensíveis entre duas pessoas, sem infraestrutura complexa.

O Arquivo de Configuração do Desenvolvedor

Ben estava construindo uma aplicação web que se conectava a um banco de dados e usava uma API de pagamento de terceiros. A senha do banco de dados e a chave da API estavam armazenadas em um arquivo config.json. Ele precisava commitar seu código em um repositório Git compartilhado, mas commitar o arquivo de configuração com segredos em texto puro seria uma falha de segurança catastrófica. Então, ele criptografou o config.json para criar o config.json.enc. A senha para descriptografia não foi armazenada no código. Em desenvolvimento, ele simplesmente descriptografava o arquivo localmente. Em produção, a senha era passada com segurança para a aplicação como uma variável de ambiente, que o app usava para descriptografar a configuração na inicialização.

Lição: Criptografar arquivos de configuração permite que você armazene "segredos em repouso" com segurança junto ao seu código, separando os dados secretos da chave secreta necessária para desbloqueá-los.

As Anotações da Jornalista na Nuvem

Maria, uma jornalista investigativa, estava trabalhando em uma matéria delicada. Ela mantinha suas anotações de entrevista e pesquisa em uma pasta que era sincronizada com um popular serviço de armazenamento em nuvem. Embora confiasse na segurança do serviço, ela estava preocupada com ameaças potenciais: um funcionário mal-intencionado na empresa de nuvem, uma intimação do governo ou uma grande violação de dados. Para proteger suas fontes, ela criptografava cada documento com uma senha forte e única antes de salvá-lo na pasta sincronizada. Agora, mesmo que toda a sua conta na nuvem fosse comprometida, suas anotações seriam apenas uma bagunça ilegível.

Lição: A criptografia fornece uma camada pessoal de segurança "confiança zero" (zero-trust), garantindo que seus dados permaneçam privados mesmo quando armazenados em sistemas que você não controla.

Erros e armadilhas comuns

  • Usar uma senha fraca. O AES-256 é, para todos os fins práticos, inquebrável por força bruta. Mas o KDF que gera a chave a partir da sua senha é vulnerável se a senha for "12345" ou "senha". A segurança de todo o sistema desmorona para a força da sua senha. Use uma frase secreta longa, aleatória e única.
  • Esquecer a senha. Com a criptografia baseada em senha, não existe um link "Esqueceu sua senha?". A senha é a chave. Se você a perder, os dados se foram para sempre. Não estão apenas trancados; a chave foi vaporizada. Armazene suas senhas com segurança em um gerenciador de senhas.
  • Criar sua própria criptografia. Este é o pecado capital da segurança de software. Você pode saber o que são AES, GCM e PBKDF2, mas combiná-los de forma segura está cheio de armadilhas. Você usou um gerador de números aleatórios criptograficamente seguro para o salt? Sua tag de autenticação é tratada corretamente? Sempre use uma biblioteca criptográfica respeitada e revisada por pares para sua linguagem de programação. Não construa a fechadura você mesmo; compre uma de um mestre chaveiro.
  • Reutilizar um salt ou IV. O salt (para o KDF) e o IV/nonce (para o modo de cifra) devem ser aleatórios e únicos para cada operação de criptografia com a mesma chave. Reutilizá-los pode quebrar catastroficamente a segurança da cifra. Boas bibliotecas cuidam disso para você, mas é uma armadilha da qual se deve estar ciente.

Por que isso deve estar no seu radar

Se você é um desenvolvedor ou desenvolvedora, você vai lidar com segredos. É inevitável. Seja uma string de conexão de banco de dados, uma chave de API, informações pessoais de um usuário ou apenas um arquivo de log sensível, você terá dados que não devem ser expostos.

O AES baseado em senha é sua ferramenta principal para garantir a confidencialidade em repouso. É a solução padrão e testada em batalha para:

  • Criptografar segredos da aplicação em sua base de código.
  • Proteger backups antes de enviá-los para o armazenamento em nuvem.
  • Proteger campos de dados sensíveis em um banco de dados (por exemplo, criptografar um CPF antes de armazená-lo).
  • Criar uma maneira simples e segura para um usuário enviar um arquivo sensível para você.

É o bloco de construção fundamental para manter segredos em segredo em um mundo onde os dados são copiados, compartilhados e armazenados em mais lugares do que podemos contar.

Aprofunde-se

Teoria feita. Hora de pôr a mão na massa — 100% no seu navegador.

Testar a ferramenta: Ferramentas de criptografia