Questão de Segurança da Informação — Algoritmos de Criptografia — FUNDATEC 2025
Segurança da Informação›Algoritmos de Criptografia
Código
qa700980
Banca
FUNDATEC
Órgão
PROCERGS
Ano
2025
Cargo
ANC ( )
A criptografia é uma ferramenta essencial para a segurança de dados. Com base no script apresentado a seguir, desenvolvido a partir de AES, analise as assertivas abaixo, assinalando V, se verdadeiras, ou F, se falsas.
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.primitives import padding
( ) O vetor de inicialização (IV) é sempre fixo e não precisa ser transmitido junto com a mensagem criptografada.
( ) O padding no código é opcional, porque o AES pode criptografar mensagens de qualquer tamanho sem necessidade de ajuste.
( ) O script utiliza criptografia simétrica AES em modo CBC, onde a mesma chave é usada para criptografar e descriptografar os dados.
A ordem correta de preenchimento dos parênteses, de cima para baixo, é:
AV – F – V.
BF – F – V.
CV – V – F.
DF – V – F.
EV – F – F.
Revelar gabarito e comentário▾
GabaritoB — F – F – V.
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”.
Criptografia simétrica: AES em modo CBC
Gabarito: letra B (F – F – V). O script utiliza AES em modo CBC com uma chave única de 32 bytes (256 bits) para cifrar e decifrar — criptografia simétrica. As duas primeiras assertivas são falsas: o IV (vetor de inicialização) é gerado aleatoriamente a cada execução e precisa ser transmitido junto com o dado cifrado (no código, ele é concatenado ao início do retorno), e o padding PKCS7 é obrigatório porque o AES opera em blocos fixos de 128 bits, não aceitando mensagens de tamanho arbitrário sem ajuste.
A criptografia simétrica é o tipo mais antigo e mais rápido de cifragem: usa uma única chave secreta tanto para cifrar quanto para decifrar. No script, a função encrypt recebe msg e key, e a função decrypt recebe data e a mesma key — é exatamente essa simetria que a assertiva III descreve. O AES (Advanced Encryption Standard) é o algoritmo simétrico mais usado no mundo, com blocos fixos de 128 bits e chaves de 128, 192 ou 256 bits. Aqui, os.urandom(32) gera uma chave de 32 bytes = 256 bits.
O modo CBC (Cipher Block Chaining) encadeia os blocos: cada bloco de texto claro é submetido a uma operação XOR com o bloco cifrado anterior antes de ser cifrado. O primeiro bloco não tem anterior, então usa o vetor de inicialização (IV) — um valor aleatório que garante que a mesma mensagem cifrada com a mesma chave produza saídas diferentes a cada execução. Por isso o IV não pode ser fixo e precisa ser conhecido pelo destinatário para decifrar. No script, o IV é gerado com os.urandom(16) (16 bytes = 128 bits) e é retornado concatenado ao início do dado cifrado (return iv + encrypted), sendo separado novamente na descriptografia (iv, encrypted = data[:16], data[16:]).
O padding é necessário porque o AES é uma cifra de bloco: ele processa os dados em blocos de tamanho fixo (128 bits = 16 bytes). Se a mensagem não for múltipla desse tamanho, é preciso preencher o último bloco com bytes extras. O PKCS7 adiciona N bytes de valor N (onde N é a quantidade de bytes que faltam para completar o bloco). Sem o padding, a cifragem falharia para mensagens de tamanho não múltiplo de 16 bytes — e a mensagem "Mensagem secreta" tem 16 caracteres, mas o padding ainda é aplicado para padronizar o processo. O script usa padding.PKCS7(128).padder() e .unpadder() exatamente para isso.
A pegadinha da banca está em inverter o papel do IV e do padding: o candidato pode achar que o IV é fixo (porque em alguns exemplos didáticos ele é constante) ou que o padding é opcional (porque o AES aceita qualquer tamanho de chave). Mas a regra é clara: IV aleatório e transmitido + padding obrigatório para cifras de bloco.
NÃO CAIA NESSA!
A banca explora a confusão entre o IV (que deve ser aleatório e transmitido) e o padding (que é obrigatório). O candidato pode achar que o IV é fixo porque em exemplos simples ele é constante, ou que o padding é opcional porque o AES aceita chaves de tamanhos variados — mas o tamanho da chave não tem relação com o tamanho do bloco. Lembre-se: IV aleatório + transmitido e padding obrigatório para cifras de bloco.
1Gerar IV aleatório (16 bytes)
2Aplicar padding PKCS7
3Cifrar bloco a bloco (XOR)
4Concatenar IV + dado cifrado
LEVEL · soulevel.com.br
Assertiva 1 — ❌ Falsa
Afirma que o IV é sempre fixo e não precisa ser transmitido. Errado: o IV deve ser aleatório a cada execução para garantir que mensagens iguais produzam cifras diferentes (evitando padrões que facilitam ataques). E ele precisa ser transmitido ao destinatário, pois sem ele a descriptografia é impossível. No script, o IV é gerado com os.urandom(16) e concatenado ao início do dado cifrado (return iv + encrypted).
Assertiva 2 — ❌ Falsa
Afirma que o padding é opcional porque o AES pode criptografar mensagens de qualquer tamanho. Errado: o AES é uma cifra de bloco com tamanho fixo de 128 bits (16 bytes). Mensagens que não são múltiplas desse tamanho precisam de padding para completar o último bloco. O PKCS7 é usado exatamente para isso. Sem ele, a cifragem falharia para mensagens de tamanho arbitrário.
Assertiva 3 — ✅ Verdadeira
Afirma que o script utiliza criptografia simétrica AES em modo CBC, onde a mesma chave é usada para criptografar e descriptografar. Correto: o script usa algorithms.AES(key) com modes.CBC(iv), e a mesma key é passada tanto para encrypt quanto para decrypt. Isso é a definição de criptografia simétrica: uma única chave secreta para cifrar e decifrar.
Conclusão: A sequência correta é F – F – V, portanto o gabarito é a letra B.