Instruções Gerais:

  • Resolva as atividades em ordem progressiva de maturidade.
  • Cada nível adiciona requisitos técnicos, tratamento de erros e casos de borda reais.
  • Consulte o gabarito comentado ao final de cada questão para autoavaliação.

🎯 Nível 1: Fundamentos

Problema 6.1 — Criptografia Autenticada com AES-256-GCM (Ciphertext + Auth Tag)

Contexto: Criptografia Autenticada com AES-256-GCM (Ciphertext + Auth Tag) no contexto de Criptografia Autenticada (AEAD): AES-GCM e ChaCha20-Poly1305.

Requisitos de Execução:

  1. Cifrar dados confidenciais gerando Tag de Autenticação de 128 bits para prevenção de adulteração.

Resultado Esperado

Criptografia AEAD AES-GCM executada com garantia de confidencialidade e integridade.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_6_1_SeuNome
  2. Envie na tarefa: Atividade Cap 6 - Criptografia Autenticada (AEAD): AES-GCM e ChaCha20-Poly1305
🔑 Gabarito de Código & Solução Comentada
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
import os

def cifrar_aes_gcm(dados: bytes, chave: bytes) -> tuple[bytes, bytes]:
    aesgcm = AESGCM(chave)
    nonce = os.urandom(12) # 96 bits recomendado pelo NIST
    cifrado_com_tag = aesgcm.encrypt(nonce, dados, None)
    return nonce, cifrado_com_tag

if __name__ == "__main__":
    k = AESGCM.generate_key(bit_length=256)
    nonce, ct = cifrar_aes_gcm(b"Transacao Financeira R$ 1.000.000,00", k)
    print(f"AES-GCM (Ciphertext + Tag): {ct.hex()}")

🔍 Nível 2: Prática

Problema 6.2 — Detecção de Adulteração em Trânsito com AES-GCM

Contexto: Detecção de Adulteração em Trânsito com AES-GCM no contexto de Criptografia Autenticada (AEAD): AES-GCM e ChaCha20-Poly1305.

Requisitos de Execução:

  1. Modificar 1 bit do ciphertext cifrado e validar que aesgcm.decrypt() lança InvalidTag.

Resultado Esperado

Tentativa de adulteração detectada e abortada com sucesso.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_6_2_SeuNome
  2. Envie na tarefa: Atividade Cap 6 - Criptografia Autenticada (AEAD): AES-GCM e ChaCha20-Poly1305
🔑 Gabarito de Código & Solução Comentada
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
from cryptography.exceptions import InvalidTag
import os

def testar_adulteracao() -> None:
    k = AESGCM.generate_key(bit_length=256)
    aes = AESGCM(k)
    nonce = os.urandom(12)
    ct = bytearray(aes.encrypt(nonce, b"Dado Original", None))
    ct[0] ^= 0xFF # Adulteracao maliciosa
    try:
        aes.decrypt(nonce, bytes(ct), None)
        print("FALHA: Adulteracao nao detectada!")
    except InvalidTag:
        print("SUCESSO: Adulteracao interceptada pelo MAC/Tag do AES-GCM!")

if __name__ == "__main__":
    testar_adulteracao()

⚡ Nível 3: Integração

Problema 6.3 — Dados Associados Não-Cifrados (AAD - Associated Data)

Contexto: Dados Associados Não-Cifrados (AAD - Associated Data) no contexto de Criptografia Autenticada (AEAD): AES-GCM e ChaCha20-Poly1305.

Requisitos de Execução:

  1. Proteger cabeçalhos de pacotes de rede em texto claro contra adulteração vinculando-os ao cálculo da tag.

Resultado Esperado

Cabeçalho AAD autenticado sem sofrer cifra.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_6_3_SeuNome
  2. Envie na tarefa: Atividade Cap 6 - Criptografia Autenticada (AEAD): AES-GCM e ChaCha20-Poly1305
🔑 Gabarito de Código & Solução Comentada
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
import os

def cifrar_com_aad(dados: bytes, aad: bytes, chave: bytes) -> tuple[bytes, bytes]:
    aes = AESGCM(chave)
    nonce = os.urandom(12)
    ct = aes.encrypt(nonce, dados, aad)
    return nonce, ct

if __name__ == "__main__":
    k = AESGCM.generate_key(bit_length=256)
    nonce, ct = cifrar_com_aad(b"Payload Secreto", b"HEADER: id_usuario=42", k)
    print(f"AEAD com AAD autenticado: {ct.hex()}")

🏆 Nível 4: Desafio Corporativo

Problema 6.4 — Criptografia de Alta Performance com ChaCha20-Poly1305

Contexto: Criptografia de Alta Performance com ChaCha20-Poly1305 no contexto de Criptografia Autenticada (AEAD): AES-GCM e ChaCha20-Poly1305.

Requisitos de Execução:

  1. Implementar cifra AEAD ChaCha20-Poly1305 como alternativa de alto desempenho em dispositivos sem aceleração AES-NI.

Resultado Esperado

ChaCha20-Poly1305 homologado com alta performance.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_6_4_SeuNome
  2. Envie na tarefa: Atividade Cap 6 - Criptografia Autenticada (AEAD): AES-GCM e ChaCha20-Poly1305
🔑 Gabarito de Código & Solução Comentada
from cryptography.hazmat.primitives.ciphers.aead import ChaCha20Poly1305
import os

def demonstrar_chacha20() -> None:
    k = ChaCha20Poly1305.generate_key()
    chacha = ChaCha20Poly1305(k)
    nonce = os.urandom(12)
    ct = chacha.encrypt(nonce, b"Comunicacao Mobile Segura", b"AAD_DISPOSITIVO")
    dec = chacha.decrypt(nonce, ct, b"AAD_DISPOSITIVO")
    assert dec == b"Comunicacao Mobile Segura"
    print("ChaCha20-Poly1305 homologado com sucesso.")

if __name__ == "__main__":
    demonstrar_chacha20()

⬅️ Voltar ao Índice de Exercícios 📚 Sumário de Tópicos