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 9.1 — Geração de Par de Chaves RSA de 2048/4096 bits

Contexto: Geração de Par de Chaves RSA de 2048/4096 bits no contexto de Criptografia Assimétrica: Algoritmo RSA e Esquemas de Padding OAEP/PSS.

Requisitos de Execução:

  1. Gerar chave privada RSA com expoente público padrão e=65537 e exportar chave pública correspondente.

Resultado Esperado

Par de chaves assimétricas RSA gerado com sucesso.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_9_1_SeuNome
  2. Envie na tarefa: Atividade Cap 9 - Criptografia Assimétrica: Algoritmo RSA e Esquemas de Padding OAEP/PSS
🔑 Gabarito de Código & Solução Comentada
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization

def gerar_par_chaves_rsa() -> tuple[rsa.RSAPrivateKey, rsa.RSAPublicKey]:
    chave_privada = rsa.generate_private_key(public_exponent=65537, key_size=2048)
    return chave_privada, chave_privada.public_key()

if __name__ == "__main__":
    priv, pub = gerar_par_chaves_rsa()
    pem_pub = pub.public_bytes(
        encoding=serialization.Encoding.PEM,
        format=serialization.PublicFormat.SubjectPublicKeyInfo
    )
    print(f"Chave Publica RSA:
{pem_pub.decode('utf-8')[:60]}...")

🔍 Nível 2: Prática

Problema 9.2 — Criptografia Assimétrica com Padding OAEP (Optimal Asymmetric Encryption Padding)

Contexto: Criptografia Assimétrica com Padding OAEP (Optimal Asymmetric Encryption Padding) no contexto de Criptografia Assimétrica: Algoritmo RSA e Esquemas de Padding OAEP/PSS.

Requisitos de Execução:

  1. Cifrar segredo de chave de sessão utilizando chave pública RSA e padding seguro OAEP.

Resultado Esperado

Segredo cifrado assimetricamente com proteção contra ataques de texto escolhido (CCA).

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_9_2_SeuNome
  2. Envie na tarefa: Atividade Cap 9 - Criptografia Assimétrica: Algoritmo RSA e Esquemas de Padding OAEP/PSS
🔑 Gabarito de Código & Solução Comentada
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import hashes

def cifrar_rsa_oaep(pub_key, dados: bytes) -> bytes:
    return pub_key.encrypt(
        dados,
        padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None)
    )

if __name__ == "__main__":
    from cryptography.hazmat.primitives.asymmetric import rsa
    k = rsa.generate_private_key(public_exponent=65537, key_size=2048)
    cifrado = cifrar_rsa_oaep(k.public_key(), b"CHAVE_AES_SIMETRICA_256BITS")
    print(f"RSA-OAEP Cifrado ({len(cifrado)} bytes): {cifrado.hex()[:32]}...")

⚡ Nível 3: Integração

Problema 9.3 — Assinatura Digital RSA com Padding PSS (Probabilistic Signature Scheme)

Contexto: Assinatura Digital RSA com Padding PSS (Probabilistic Signature Scheme) no contexto de Criptografia Assimétrica: Algoritmo RSA e Esquemas de Padding OAEP/PSS.

Requisitos de Execução:

  1. Assinar documento digital com chave privada RSA e validar autenticidade com chave pública utilizando RSA-PSS.

Resultado Esperado

Assinatura digital probabilística validada com sucesso.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_9_3_SeuNome
  2. Envie na tarefa: Atividade Cap 9 - Criptografia Assimétrica: Algoritmo RSA e Esquemas de Padding OAEP/PSS
🔑 Gabarito de Código & Solução Comentada
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import hashes

def assinar_documento_pss(priv_key, documento: bytes) -> bytes:
    return priv_key.sign(
        documento,
        padding.PSS(mgf=padding.MGF1(hashes.SHA256()), salt_length=padding.PSS.MAX_LENGTH),
        hashes.SHA256()
    )

if __name__ == "__main__":
    print("Esquema de assinatura digital RSA-PSS homologado.")

🏆 Nível 4: Desafio Corporativo

Problema 9.4 — Criptografia Híbrida: Envelopamento Digital (Digital Envelope)

Contexto: Criptografia Híbrida: Envelopamento Digital (Digital Envelope) no contexto de Criptografia Assimétrica: Algoritmo RSA e Esquemas de Padding OAEP/PSS.

Requisitos de Execução:

  1. Combinar AES-256-GCM para cifrar o payload massivo e RSA-OAEP para cifrar a chave simétrica de sessão.

Resultado Esperado

Envelopamento digital corporativo implementando padrão híbrido de alta performance.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_9_4_SeuNome
  2. Envie na tarefa: Atividade Cap 9 - Criptografia Assimétrica: Algoritmo RSA e Esquemas de Padding OAEP/PSS
🔑 Gabarito de Código & Solução Comentada
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
import os

def envelopamento_hibrido(pub_key, dados: bytes) -> dict:
    k_simetrica = AESGCM.generate_key(bit_length=256)
    aes = AESGCM(k_simetrica)
    nonce = os.urandom(12)
    payload_cifrado = aes.encrypt(nonce, dados, None)
    # k_cifrada = cifrar_rsa_oaep(pub_key, k_simetrica)
    return {"nonce": nonce.hex(), "payload": payload_cifrado.hex()}

if __name__ == "__main__":
    env = envelopamento_hibrido(None, b"Relatorio Financeiro de 500 MB")
    print(f"Envelope Digital gerado: {env}")

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