0Pricing
Cryptology Academy · Aula

Fundamentos de cifras de bloco e preenchimento

Compreenda o tamanho do bloco, o preenchimento PKCS7 e a estrutura da cifra.

Fundamentos de cifras de bloco e preenchimento é uma aula grátis de Cryptology Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Cryptology Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Cryptology Academy inclui 4 aulas no total.

Boas-vindas

As cifras de bloco criptografam blocos de tamanho fixo. Quando o texto simples não preenche um bloco, precisamos de preenchimento. Nesta lição, dominaremos a estrutura das cifras de bloco, os esquemas de preenchimento e por que eles são importantes.

Revisão do tamanho dos blocos

O AES usa blocos de 128 bits (16 bytes). O DES usava blocos de 64 bits (8 bytes). Se o texto simples tem exatamente 16 bytes, ele ocupa um bloco. 17 bytes exigem dois blocos.

Por que o preenchimento é necessário

Se o texto simples tem 20 bytes, o segundo bloco contém apenas 4 bytes. A cifra precisa de um bloco completo de 16 bytes. Preenchemos os 12 bytes restantes com um esquema determinístico e reversível.

Preenchimento PKCS#7

O PKCS#7 preenche com N bytes, cada um com valor N: - São necessários 3 bytes → acrescente: 03 03 03 - São necessários 12 bytes → acrescente: 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C 0C - São necessários 0 bytes → acrescente um bloco completo de 16: 10×16

Sempre preencha um bloco completo

Se o texto simples tem exatamente 16 bytes, o PKCS#7 adiciona um bloco extra completo de 0x10×16. Isso garante que o receptor sempre saiba onde termina o preenchimento: o valor do último byte informa quantos bytes devem ser removidos.

PKCS#7 em Python

def pkcs7_pad(data: bytes, block_size: int = 16) -> bytes: n = block_size - (len(data) % block_size) return data + bytes([n] * n) def pkcs7_unpad(data: bytes) -> bytes: n = data[-1] return data[:-n]

Ataques de oráculo de preenchimento

Se um servidor revela se o preenchimento é válido após a descriptografia (por mensagem de erro ou temporização), um atacante pode descriptografar o texto cifrado byte a byte sem conhecer a chave. Isso comprometeu o ViewState do ASP.NET em 2010.

Preenchimento com zeros e ANSI X.923

Preenchimento com zeros: preencha com bytes 0x00 (ambíguo — os dados originais podem terminar em zeros). ANSI X.923: preencha com zeros; o último byte = quantidade. ISO 7816-4: o primeiro byte de preenchimento = 0x80, os demais = 0x00. O PKCS#7 não é ambíguo e é preferível.

Preenchimento por roubo de texto cifrado (CTS)

O roubo de texto cifrado (CTS) evita totalmente o preenchimento: ele reorganiza os dois últimos blocos para lidar com uma entrada que ocupa apenas parte do bloco. É usado em criptografia de disco (Kerberos e algumas implementações de AES).

Impacto do tamanho do bloco na segurança

Com blocos de 64 bits (DES, 3DES, Blowfish): ocorre uma colisão de aniversário após 2^32 blocos (~32 GB). Os navegadores desativaram o 3DES no TLS após o ataque SWEET32 demonstrar esse problema em 2016. Os blocos de 128 bits do AES exigem 2^64 blocos — o que é seguro na prática.

Modos sem preenchimento

AES-CTR e AES-GCM não exigem preenchimento: usam a cifra de bloco como gerador de fluxo de chaves e aplicam XOR a entradas de tamanho arbitrário. O limite do bloco é apenas um detalhe interno da implementação.

Verificação rápida

Ao usar PKCS#7 com blocos de 16 bytes, qual preenchimento é acrescentado a uma mensagem de 13 bytes?

Recapitulação

Você dominou o preenchimento de cifras de bloco! Em seguida, compararemos os modos ECB e CBC — começando pelo famoso ataque do pinguim ECB.

Perguntas Frequentes

A aula “Fundamentos de cifras de bloco e preenchimento” é grátis?

Sim — o texto completo de “Fundamentos de cifras de bloco e preenchimento” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Cryptology Academy, atualize para CoddyKit PRO. O curso de Cryptology Academy inclui 4 aulas no total.

O que vou aprender em “Fundamentos de cifras de bloco e preenchimento”?

Compreenda o tamanho do bloco, o preenchimento PKCS7 e a estrutura da cifra. Você pratica Cryptology Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Cryptology Academy?

Nenhuma experiência prévia é necessária. Cryptology Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Fundamentos de cifras de bloco e preenchimento”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Cryptology Academy?

Sim. Cada aula de Cryptology Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Fundamentos de cifras de bloco e preenchimento
  2. ECB versus CBC: padrões e IVs
  3. Modo CTR e comportamento de cifras de fluxo
  4. GCM e encriptação autenticada
← Voltar para Cryptology Academy