Criptografia Assimétrica: Algoritmo RSA e Esquemas de Padding OAEP/PSS
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:
- Gerar chave privada RSA com expoente público padrão
e=65537e exportar chave pública correspondente.
Resultado Esperado
Par de chaves assimétricas RSA gerado com sucesso.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_9_1_SeuNome - 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:
- 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)
- Salve o arquivo como:
Atividade_9_2_SeuNome - 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:
- 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)
- Salve o arquivo como:
Atividade_9_3_SeuNome - 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:
- 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)
- Salve o arquivo como:
Atividade_9_4_SeuNome - 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 |