O Que e Criptografia
Criptografia e a tecnologia de transformar dados em um formato ilegivel para terceiros. Somente aqueles que possuem a chave correta podem restaurar (descriptografar) os dados originais.
Por que e necessaria: Para lidar com riscos de dados caindo em maos erradas, como interceptacao de comunicacoes, acesso nao autorizado a bancos de dados e perda de dispositivos.
Tipos de Criptografia
flowchart LR
subgraph Crypto["Tecnologias de Criptografia"]
subgraph Symmetric["Criptografia de Chave Simetrica"]
S1["Mesma chave para criptografar/descriptografar"]
end
subgraph Asymmetric["Criptografia de Chave Publica (Assimetrica)"]
A1["Chaves diferentes para criptografar/descriptografar"]
end
subgraph Hash["Funcoes Hash (Funcoes Unidirecionais)"]
H1["Impossivel reverter, apenas verificacao"]
end
end
Criptografia de Chave Simetrica
Usa a mesma chave para criptografia e descriptografia.
flowchart LR
P1["Texto Plano"] --> E["Criptografar"]
K1["Chave Simetrica"] --> E
E --> C["Texto Cifrado"]
C --> D["Descriptografar"]
K2["Chave Simetrica (mesma)"] --> D
D --> P2["Texto Plano"]
Algoritmos Representativos
| Algoritmo | Tamanho da Chave | Caracteristicas |
|---|---|---|
| AES | 128/192/256 bits | Padrao atual, rapido |
| ChaCha20 | 256 bits | Para dispositivos moveis, rapido |
| 3DES | 168 bits | Legado, nao recomendado |
Exemplo de Implementacao
const crypto = require('crypto');
// Criptografar
function encrypt(text, key) {
const iv = crypto.randomBytes(16);
const cipher = crypto.createCipheriv('aes-256-gcm', key, iv);
let encrypted = cipher.update(text, 'utf8', 'hex');
encrypted += cipher.final('hex');
const authTag = cipher.getAuthTag();
return {
iv: iv.toString('hex'),
encrypted,
authTag: authTag.toString('hex')
};
}
// Descriptografar
function decrypt(encryptedData, key) {
const decipher = crypto.createDecipheriv(
'aes-256-gcm',
key,
Buffer.from(encryptedData.iv, 'hex')
);
decipher.setAuthTag(Buffer.from(encryptedData.authTag, 'hex'));
let decrypted = decipher.update(encryptedData.encrypted, 'hex', 'utf8');
decrypted += decipher.final('utf8');
return decrypted;
}
Vantagens e Desvantagens
| Vantagens | Desvantagens |
|---|---|
| Rapido | Distribuicao de chaves e um desafio |
| Adequado para criptografar grandes volumes de dados | Necessita de uma chave para cada parceiro de comunicacao |
Criptografia de Chave Publica (Assimetrica)
Usa chaves diferentes (chave publica e chave privada) para criptografia e descriptografia.
sequenceDiagram
participant S as Remetente
participant R as Destinatario
Note over R: Chave Privada (somente o destinatario possui)<br/>Chave Publica (publica)
R->>S: Envia chave publica
S->>S: Criptografa texto plano com chave publica
S->>R: Envia texto cifrado
R->>R: Descriptografa com chave privada → Texto plano
Algoritmos Representativos
| Algoritmo | Uso | Caracteristicas |
|---|---|---|
| RSA | Criptografia, assinatura | Amplamente utilizado |
| ECDSA | Assinatura | Alta seguranca com chaves curtas |
| Ed25519 | Assinatura | Rapido, moderno |
| X25519 | Troca de chaves | Curva eliptica Diffie-Hellman |
Assinatura Digital
Assina com a chave privada e verifica com a chave publica.
sequenceDiagram
participant S as Remetente (Assinatura)
participant R as Destinatario (Verificacao)
S->>S: Assina dados com chave privada
S->>R: Envia dados + assinatura
R->>R: Verifica com chave publica → Autentico/Falso
Vantagens e Desvantagens
| Vantagens | Desvantagens |
|---|---|
| Distribuicao segura de chaves | Mais lento que criptografia simetrica |
| Pode ser usado para autenticacao e assinaturas | Nao adequado para grandes volumes de dados |
Criptografia Hibrida
Em sistemas reais, ambos os metodos sao usados em combinacao.
sequenceDiagram
participant S as Remetente
participant R as Destinatario
S->>S: 1. Gera chave simetrica aleatoria
S->>S: 2. Criptografa dados com chave simetrica (rapido)
S->>S: 3. Criptografa chave simetrica com chave publica do destinatario
S->>R: 4. Envia dados criptografados + chave simetrica criptografada
R->>R: 5. Descriptografa chave simetrica com chave privada
R->>R: 6. Descriptografa dados com chave simetrica
Funcoes Hash
Geram um valor hash de comprimento fixo a partir de dados de qualquer tamanho. Os dados originais nao podem ser recuperados.
flowchart LR
A["'Hello'"] --> H1["SHA-256"] --> R1["185f8db32271fe25..."]
B["'Hello!'"] --> H2["SHA-256"] --> R2["334d016f755cd6dc..."]
Note["Apenas uma mudanca de caractere<br/>resulta em hash completamente diferente"]
Algoritmos Representativos
| Algoritmo | Tamanho da Saida | Uso |
|---|---|---|
| SHA-256 | 256 bits | Hash de proposito geral |
| SHA-3 | Variavel | Padrao de proxima geracao |
| bcrypt | Variavel | Hash de senha |
| Argon2 | Variavel | Hash de senha (recomendado) |
Hashing de Senhas
const bcrypt = require('bcrypt');
// Hash de senha
async function hashPassword(password) {
const saltRounds = 12;
return await bcrypt.hash(password, saltRounds);
}
// Verificacao de senha
async function verifyPassword(password, hash) {
return await bcrypt.compare(password, hash);
}
// Exemplo de uso
const hash = await hashPassword('mypassword123');
// → "$2b$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8..."
const isValid = await verifyPassword('mypassword123', hash);
// → true
Sempre armazene senhas com hash: Armazenar em texto plano e absolutamente proibido. Use funcoes hash com salt (bcrypt, Argon2).
Escolha por Caso de Uso
| Caso de Uso | Metodo Recomendado |
|---|---|
| Criptografia de comunicacao (HTTPS) | TLS (criptografia hibrida) |
| Criptografia de arquivos | AES-256-GCM |
| Armazenamento de senhas | Argon2, bcrypt |
| Deteccao de adulteracao de dados | HMAC-SHA256 |
| Assinatura digital | Ed25519, ECDSA |
| Geracao de chaves API | CSPRNG + Base64 |
Resumo
Criptografia e a tecnologia fundamental para seguranca de dados. Criptografia de chave simetrica e rapida e adequada para criptografar grandes volumes de dados, enquanto criptografia de chave publica e adequada para distribuicao de chaves e autenticacao. Em sistemas reais, criptografia hibrida combinando ambas e utilizada. Sempre use funcoes hash com salt para armazenamento de senhas.
← Voltar para a lista