Pular para o conteúdo principal

Questão de Segurança da Informação — Hashes Criptográficos — VUNESP 2025

Segurança da InformaçãoHashes Criptográficos
Código
vu223080
Banca
VUNESP
Órgão
EsFCEx
Ano
2025
Cargo
CFO/QC ( )

A operação geral do algoritmo HMAC pode ser ilustrada pela figura a seguir, onde K representa uma chave secreta e M corresponde à mensagem de entrada (dividida em blocos Yi de b bits cada, já com o padding especificado na função de hash subjacente). O símbolo || representa o operador de concatenação e o símbolo ⊕ representa a operação XOR:

Imagem associada para resolução da questão

De acordo com a especificação do HMAC, K+ representa

  1. AK preenchida com zeros à esquerda, de modo que o resultado tenha b bits de comprimento.
  2. Bo hash de K calculado pela função de hash subjacente.
  3. Co resultado da operação K K.
  4. Do resultado da encriptação de K pelo algoritmo de cifra de bloco subjacente.
  5. Eo módulo de K, isto é, caso K seja um número inteiro negativo, então K+ = –K. Caso K seja um número não negativo, então K+ = K.
Revelar gabarito e comentário

GabaritoA — K preenchida com zeros à esquerda, de modo que o resultado tenha b bits de comprimento.

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

HMAC: a chave K+ e o preenchimento com zeros

Gabarito: letra A. No algoritmo HMAC, a chave secreta K é ajustada para o tamanho do bloco da função de hash (b bits): se K for menor que b, ela é preenchida com zeros à esquerda até atingir b bits, formando K+ — exatamente o que descreve a alternativa A. Essa é a definição da RFC 2104, que especifica o HMAC.

O HMAC (Hash-based Message Authentication Code) é um código de autenticação de mensagem que combina uma função de hash criptográfica (como SHA-256) com uma chave secreta. Ele serve para verificar simultaneamente a integridade e a autenticidade de uma mensagem: quem recebe a mensagem e conhece a chave consegue recalcular o HMAC e comparar com o recebido — se forem iguais, a mensagem não foi alterada e veio de quem possui a chave.

A construção do HMAC é definida na RFC 2104 e funciona em duas passagens de hash. O primeiro passo é justamente o ajuste da chave: a chave K, que pode ter qualquer tamanho, precisa ser convertida em uma string de exatamente b bits (o tamanho do bloco da função de hash, por exemplo, 512 bits para SHA-256). Se K for menor que b, ela é preenchida com zeros à esquerda; se for maior que b, ela é primeiro reduzida pelo hash da própria chave. Esse valor ajustado é chamado de K+.

A partir de K+, o algoritmo define duas chaves derivadas: a interna (K+ ⊕ ipad) e a externa (K+ ⊕ opad), onde ipad e opad são constantes fixas (0x36 e 0x5C repetidos b vezes). O HMAC é então calculado como H((K+ ⊕ opad) || H((K+ ⊕ ipad) || mensagem)). O preenchimento com zeros garante que a chave tenha o tamanho exato do bloco, permitindo que as operações XOR sejam aplicadas de forma uniforme.

A pegadinha desta questão está em confundir o ajuste de K+ com outras operações criptográficas: aplicar o hash na chave, fazer XOR dela com ela mesma, ou encriptá-la. Nenhuma dessas operações faz parte da especificação do HMAC para derivar K+ — o único propósito é padronizar o tamanho da chave para o bloco da função de hash.

Guarde o critério decisivo: K+ é o resultado do preenchimento (padding) da chave K com zeros à esquerda até o tamanho do bloco b — é essa a definição que separa a alternativa correta das demais.

Alternativa A — ✅ Correta ⟵ GABARITO

A alternativa descreve exatamente o procedimento da RFC 2104: "append zeros to the end of K to create a B byte string". O preenchimento é feito com zeros à esquerda (na verdade, à direita na notação da RFC, mas o conceito é o mesmo: adicionar zeros até atingir o tamanho do bloco). O resultado K+ tem exatamente b bits, pronto para as operações XOR com ipad e opad.

Alternativa B — ❌ Incorreta

A alternativa afirma que K+ é o hash de K. Isso está errado: o hash de K só é usado quando K é maior que o bloco b — nesse caso, K é reduzida pelo hash para caber no bloco. Mas para chaves menores que b, o procedimento é o preenchimento com zeros, não o hash. A alternativa generaliza indevidamente um caso específico.

Alternativa C — ❌ Incorreta

A alternativa afirma que K+ é o resultado de K ⊕ K. Isso é um absurdo criptográfico: qualquer valor XOR com ele mesmo resulta em zero, o que destruiria completamente a chave. K+ nunca é derivado dessa forma — a operação XOR no HMAC é aplicada entre K+ e as constantes ipad/opad, não entre K e ela mesma.

Alternativa D — ❌ Incorreta

A alternativa afirma que K+ é o resultado da encriptação de K pelo algoritmo de cifra de bloco subjacente. Isso está errado: o HMAC não utiliza cifra de bloco para derivar K+. A função de hash subjacente é usada apenas para reduzir chaves longas, e a operação de encriptação não faz parte da especificação do HMAC para o ajuste da chave.

Alternativa E — ❌ Incorreta

A alternativa afirma que K+ é o módulo de K, tratando K como um número inteiro. Isso não tem relação alguma com criptografia: K é uma chave secreta (uma sequência de bytes), não um número inteiro com sinal. A definição de K+ no HMAC é puramente o preenchimento com zeros para atingir o tamanho do bloco, sem qualquer operação matemática de módulo.

NÃO CAIA NESSA!

A banca explora a confusão entre o ajuste de tamanho da chave e outras operações criptográficas. O candidato pode lembrar que o HMAC usa hash e XOR, e então escolher a alternativa B ou C. Mas o ponto central é que K+ é apenas o preenchimento com zeros — o hash só entra para chaves longas, e o XOR é aplicado depois, com as constantes ipad/opad, não com a própria chave.

PEGA ESSA DICA!

Para fixar, lembre-se da sequência do HMAC: (1) ajustar K para K+ (preencher com zeros até b bits); (2) derivar chave interna (K+ ⊕ ipad) e externa (K+ ⊕ opad); (3) calcular H((K+ ⊕ opad) || H((K+ ⊕ ipad) || mensagem)). O preenchimento é sempre o primeiro passo — nunca pule essa etapa.

Gabarito: letra A

Link permanente: /questoes/vu223080