Criptografia Autenticada (AEAD): AES-GCM e ChaCha20-Poly1305
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:
- 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)
- Salve o arquivo como:
Atividade_6_1_SeuNome - 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:
- Modificar 1 bit do ciphertext cifrado e validar que
aesgcm.decrypt()lançaInvalidTag.
Resultado Esperado
Tentativa de adulteração detectada e abortada com sucesso.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_6_2_SeuNome - 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:
- 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)
- Salve o arquivo como:
Atividade_6_3_SeuNome - 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:
- 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)
- Salve o arquivo como:
Atividade_6_4_SeuNome - 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 |