Toolypet
Voltar ao Blog
Security

Fundamentos de Criptografia - Chaves Simetricas vs Assimetricas: O que Todo Desenvolvedor Precisa Saber

Se voce nao sabe como AES, RSA e HTTPS funcionam, leia este artigo. Conceitos essenciais de criptografia explicados com exemplos praticos.

Toolypet Team

Toolypet Team

Development Team

6 min de leitura

Fundamentos de Criptografia: Chaves Simetricas vs Assimetricas

"Por favor, criptografe esses dados e envie."

Quando voce ouve isso, sabe exatamente o que fazer e como?

Existem dois tipos principais de criptografia. Se voce nao sabe quando usar cada um, seu design de seguranca pode estar incorreto.


Criptografia vs Hashing

Primeiro, vamos esclarecer esses conceitos frequentemente confundidos.

CriptografiaHashing
DirecaoBidirecional (descriptografavel)Unidirecional (irreversivel)
PropositoProtecao de dadosVerificacao de integridade, armazenamento de senhas
Requer chaveSimNao
ExemplosAES, RSASHA-256, bcrypt

Criptografia: Os dados originais podem ser recuperados Hashing: Os dados originais nao podem ser recuperados

Use hashing para armazenar senhas, criptografia para transmitir dados.


Criptografia de Chave Simetrica

Conceito

Criptografa com uma chave, descriptografa com a mesma chave.

Texto plano + Chave → Criptografar → Texto cifrado
Texto cifrado + Chave → Descriptografar → Texto plano

Exemplo: Uma Fechadura

Pense na chave da sua casa. Voce tranca e destranca com a mesma chave.

Algoritmos Comuns

AlgoritmoTamanho da ChaveStatus
AES-256256bitPadrao atual
AES-128128bitSeguro
3DES168bitLegado
DES56bitVulneravel

Exemplo de Codigo (Node.js)

const crypto = require('crypto');

// Gerar chave (armazenar com seguranca em producao)
const key = crypto.randomBytes(32);  // AES-256
const iv = crypto.randomBytes(16);   // Vetor de inicializacao

// Criptografar
function encrypt(text) {
  const cipher = crypto.createCipheriv('aes-256-cbc', key, iv);
  let encrypted = cipher.update(text, 'utf8', 'hex');
  encrypted += cipher.final('hex');
  return encrypted;
}

// Descriptografar
function decrypt(encrypted) {
  const decipher = crypto.createDecipheriv('aes-256-cbc', key, iv);
  let decrypted = decipher.update(encrypted, 'hex', 'utf8');
  decrypted += decipher.final('utf8');
  return decrypted;
}

const secret = "dados sensiveis";
const encrypted = encrypt(secret);
const decrypted = decrypt(encrypted);

console.log(encrypted);   // "a3f8b2c1..."
console.log(decrypted);   // "dados sensiveis"

Vantagens e Desvantagens

VantagensDesvantagens
RapidoProblema de compartilhamento de chave
Adequado para grandes volumesSe a chave for exposta, fim de jogo
Implementacao simplesGerenciamento de chaves complexo

O Problema de Compartilhar a Chave

Se A quer enviar uma mensagem criptografada para B, A deve entregar a chave para B primeiro.

Mas como entregar essa chave de forma segura?

A criptografia de chave assimetrica resolve esse problema.


Criptografia de Chave Assimetrica

Conceito

Usa duas chaves:

  • Chave Publica (Public Key): Qualquer pessoa pode conhecer
  • Chave Privada (Private Key): Nunca deve ser compartilhada
Criptografar com chave publica → Somente a chave privada pode descriptografar
Assinar com chave privada → Verificar com chave publica

Exemplo: Uma Caixa de Correio

  • Chave publica = Caixa de correio (qualquer pessoa pode deixar uma carta)
  • Chave privada = Chave da caixa de correio (somente o dono pode retirar as cartas)

Algoritmos Comuns

AlgoritmoUsoTamanho da Chave
RSACriptografia, assinatura2048+ bit
ECDSAAssinatura256+ bit
Ed25519Assinatura256bit

Exemplo de Codigo (Node.js RSA)

const crypto = require('crypto');

// Gerar par de chaves
const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
  modulusLength: 2048,
});

// Criptografar com chave publica
function encryptWithPublic(text) {
  return crypto.publicEncrypt(publicKey, Buffer.from(text)).toString('base64');
}

// Descriptografar com chave privada
function decryptWithPrivate(encrypted) {
  return crypto.privateDecrypt(privateKey, Buffer.from(encrypted, 'base64')).toString();
}

const secret = "dados sensiveis";
const encrypted = encryptWithPublic(secret);
const decrypted = decryptWithPrivate(encrypted);

console.log(decrypted);  // "dados sensiveis"

Assinaturas Digitais

Quando voce assina com uma chave privada, qualquer pessoa pode verificar quem assinou usando a chave publica.

// Assinar com chave privada
const sign = crypto.createSign('SHA256');
sign.update('mensagem');
const signature = sign.sign(privateKey, 'base64');

// Verificar com chave publica
const verify = crypto.createVerify('SHA256');
verify.update('mensagem');
const isValid = verify.verify(publicKey, signature, 'base64');

console.log(isValid);  // true

Vantagens e Desvantagens

VantagensDesvantagens
Resolve o problema de compartilhamento de chaveLento (1000x mais lento que simetrico)
Permite assinaturas digitaisNao adequado para grandes dados
A chave publica pode ser distribuida livrementeTamanhos de chave maiores

Na Pratica: Usando Ambos Juntos (Criptografia Hibrida)

E assim que o HTTPS funciona.

Processo

1. Servidor: Gera par de chaves RSA publica/privada
2. Cliente: Recebe a chave publica do servidor
3. Cliente: Gera chave de sessao AES
4. Cliente: Criptografa chave de sessao com RSA publica → Envia ao servidor
5. Servidor: Descriptografa chave de sessao com RSA privada
6. Ambos: Comunicam-se usando a chave de sessao AES

Por Que Fazer Assim

  • RSA: Usado apenas para troca de chaves (lento mas seguro)
  • AES: Usado para criptografia real de dados (rapido)

Usando o melhor de ambos os mundos.


Lista de Verificacao Pratica

Ao Usar Chaves Simetricas (AES)

  • Usar AES-256 ou AES-128
  • Gerar novo IV (vetor de inicializacao) para cada criptografia
  • Armazenar chaves em variaveis de ambiente ou KMS
  • Nunca usar modo ECB (usar CBC, GCM em vez disso)

Ao Usar Chaves Assimetricas (RSA)

  • Usar minimo chaves de 2048bit
  • Nunca expor chaves privadas
  • Usar preenchimento OAEP (evitar PKCS#1 v1.5)
  • Estabelecer politica de rotacao de chaves

Perguntas Frequentes

P: Devo criptografar chaves de API para armazenamento?

R: Use variaveis de ambiente ou ferramentas de gerenciamento de segredos (AWS Secrets Manager, HashiCorp Vault) em vez de criptografia. Mesmo com criptografia, voce ainda tem o problema de gerenciar a chave de descriptografia.

P: Criptografar no lado do cliente e seguro?

R: Nao. O codigo do cliente e visivel para todos, expondo a chave. A criptografia sensivel deve ser feita no servidor.

P: SHA-256 e criptografia?

R: Nao. SHA-256 e hashing. Nao pode ser descriptografado. Se voce precisa recuperar dados, use criptografia como AES.


Resumo

CenarioAlgoritmo
Criptografia de grandes dadosAES-256
Troca de chavesRSA, ECDH
Assinaturas digitaisRSA, ECDSA, Ed25519
Armazenamento de senhasbcrypt, Argon2 (hashing)
Comunicacao HTTPSHibrido (RSA + AES)

Ferramentas Relacionadas

FerramentaProposito
Criptografia/DescriptografiaCriptografia AES
Gerador de Chaves RSAGeracao de pares RSA
Gerador de HashHashing SHA, MD5
criptografiaAESRSAHTTPSsegurancadesenvolvimento

Sobre o Autor

Toolypet Team

Toolypet Team

Development Team

The Toolypet Team creates free, privacy-focused web tools for developers and designers. All tools run entirely in your browser with no data sent to servers.

Web DevelopmentCSS ToolsDeveloper ToolsSEOSecurity