# Assimétrica

Na **criptografia assimétrica**, utiliza-se um **par de chaves**:

* **Chave Pública** → usada para **criptografar** (pode ser compartilhada livremente)
* **Chave Privada** → usada para **descriptografar** (deve ser mantida em segredo)

```
Mensagem + Chave Pública → Cifragem → Mensagem Cifrada
Mensagem Cifrada + Chave Privada → Decifragem → Mensagem Original
```

### Vantagens

* ✅ Elimina o problema da troca segura de chaves
* ✅ Permite autenticação (assinaturas digitais)

### Desvantagens

* ❌ Muito mais lenta que a criptografia simétrica
* ❌ Requer chaves maiores para mesma segurança

{% hint style="info" %}
Na prática: Usa-se criptografia assimétrica para trocar uma chave simétrica, que então é usada para os dados (ex: HTTPS).
{% endhint %}

***

## 📋 Algoritmos Assimétricos

| Algoritmo          | Criado | Base Matemática             | Tamanho de Chave | Status                      |
| ------------------ | ------ | --------------------------- | ---------------- | --------------------------- |
| **RSA**            | 1977   | Fatoração de números primos | 2048-4096 bits   | ✅ Padrão global             |
| **ECC**            | 1985   | Curvas elípticas            | 256-521 bits     | ✅ Moderno e eficiente       |
| **Diffie-Hellman** | 1976   | Logaritmo discreto          | 2048-4096 bits   | ✅ Troca de chaves           |
| **ElGamal**        | 1985   | Logaritmo discreto          | 2048-4096 bits   | 🔸 Usado em alguns sistemas |
| **DSA**            | 1991   | Logaritmo discreto          | 2048-3072 bits   | 🔸 Assinaturas (FIPS)       |

***

## 🏆 RSA – O Mais Famoso

**RSA** (Rivest-Shamir-Adleman) é o algoritmo assimétrico mais utilizado do mundo.

### Como funciona (simplificado)

{% stepper %}
{% step %}

### Escolhem-se dois números primos grandes `p` e `q`

{% endstep %}

{% step %}

### Calcula-se `n = p × q` (parte da chave pública)

{% endstep %}

{% step %}

### Calcula-se `φ(n) = (p-1) × (q-1)`

{% endstep %}

{% step %}

### Escolhe-se `e` (público) e calcula-se `d` (privado)

{% endstep %}
{% endstepper %}

### Segurança

* Baseia-se na **dificuldade de fatorar números grandes**
* Um número de 2048 bits levaria milhões de anos para ser fatorado com computadores atuais

### Onde é usado

* ✅ SSL/TLS (HTTPS)
* ✅ Assinaturas digitais
* ✅ E-mail seguro (PGP/GPG)
* ✅ Certificados digitais (X.509)

### Tamanhos de chave recomendados

| Ano          | Chave RSA      | Segurança            |
| ------------ | -------------- | -------------------- |
| Até 2010     | 1024 bits      | ⚠️ Quebrado em 2015? |
| 2015-2030    | 2048 bits      | ✅ Seguro             |
| 2030+        | 3072-4096 bits | ✅ Recomendado        |
| Pós-quântico | 8192+ bits?    | ❓ Vulnerável ao Shor |

### Exemplo Python

```python
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_OAEP

# Gerar par de chaves
key = RSA.generate(2048)
public_key = key.publickey()
private_key = key

# Cifrar com chave pública
cipher = PKCS1_OAEP.new(public_key)
mensagem = b"Minha mensagem secreta"
cifrado = cipher.encrypt(mensagem)

# Decifrar com chave privada
decipher = PKCS1_OAEP.new(private_key)
original = decipher.decrypt(cifrado)
```

***

## 📐 ECC – Curvas Elípticas

**ECC (Elliptic Curve Cryptography)** oferece a **mesma segurança que o RSA** com chaves **muito menores**.

### Comparação de tamanhos

| Segurança (bits)   | RSA        | ECC      |
| ------------------ | ---------- | -------- |
| 80 bits (quebrado) | 1024 bits  | 160 bits |
| 112 bits           | 2048 bits  | 224 bits |
| 128 bits           | 3072 bits  | 256 bits |
| 192 bits           | 7680 bits  | 384 bits |
| 256 bits           | 15360 bits | 521 bits |

### Vantagens da ECC

* 🔹 Chaves menores → mais rápidas
* 🔹 Menos consumo de energia (ideal para dispositivos móveis)
* 🔹 Menos armazenamento e banda

### Curvas comuns

| Curva          | Tamanho  | Segurança | Uso               |
| -------------- | -------- | --------- | ----------------- |
| **secp256k1**  | 256 bits | 128 bits  | Bitcoin, Ethereum |
| **P-256**      | 256 bits | 128 bits  | NIST, NSA         |
| **Curve25519** | 256 bits | 128 bits  | Signal, WhatsApp  |
| **P-384**      | 384 bits | 192 bits  | Governo US        |
| **P-521**      | 521 bits | 256 bits  | Alto nível        |

***

## ✍️ ECDSA – Assinaturas com ECC

**ECDSA (Elliptic Curve Digital Signature Algorithm)** é a versão do DSA sobre curvas elípticas.

### Funcionamento

* **Assinar:** Chave privada + mensagem → assinatura
* **Verificar:** Chave pública + mensagem + assinatura → válido/inválido

### Onde é usado

* 🔸 Bitcoin (transações)
* 🔸 JWT (JSON Web Tokens)
* 🔸 Certificados digitais
* 🔸 SSH (chaves ed25519)

***

## ⚡ EdDSA – Moderna e Rápida

**EdDSA (Edwards-curve Digital Signature Algorithm)** é uma versão moderna do ECDSA.

### Vantagens

* ✅ Mais rápida que ECDSA
* ✅ Determinística (mesma mensagem = mesma assinatura)
* ✅ Resistente a ataques de canal lateral

### Curva mais famosa: **Ed25519**

* Chave: 256 bits
* Segurança: 128 bits
* Criada por Daniel Bernstein (2005)

### Onde é usado

* ✅ OpenSSH (ssh-keygen -t ed25519)
* ✅ Signal Protocol
* ✅ WireGuard (VPN)
* ✅ Tor Project

### Exemplo SSH

```bash
# Gerar chave Ed25519 (recomendado)
ssh-keygen -t ed25519 -C "seu_email@exemplo.com"

# Comparar com RSA
ssh-keygen -t rsa -b 4096 -C "seu_email@exemplo.com"
```

***

## 🤝 Diffie-Hellman (DH)

**Diffie-Hellman** não é para cifrar/decifrar mensagens. É um **protocolo de troca de chaves**.

### O problema que resolve

Como duas pessoas podem estabelecer uma chave secreta em um canal público?

### Como funciona

```
Alice e Bob concordam com números públicos: p (primo grande) e g (gerador)

Alice escolhe a (privado) → envia A = g^a mod p
Bob escolhe b (privado) → envia B = g^b mod p

Alice calcula: K = B^a mod p
Bob calcula: K = A^b mod p

Ambos chegam ao mesmo K (chave secreta compartilhada!)
```

### Variações

| Versão              | Característica                               |
| ------------------- | -------------------------------------------- |
| **DH clássico**     | Usa números primos                           |
| **ECDH**            | Usa curvas elípticas (mais eficiente)        |
| **DHE (Ephemeral)** | Chaves temporárias → Perfect Forward Secrecy |

### Onde é usado

* ✅ HTTPS (cifras com DHE/ECDHE)
* ✅ VPNs
* ✅ SSH
* ✅ Signal

***

## 🔏 ElGamal

**ElGamal** é baseado no problema do **logaritmo discreto** (similar ao Diffie-Hellman).

### Características

* Pode ser usado para cifrar mensagens (não apenas trocar chaves)
* Mesma base matemática do DH
* Mais lento que RSA

### Onde é usado

* 🔸 GPG (como alternativa ao RSA)
* 🔸 Sistemas criptográficos acadêmicos

***

## 📝 DSA – Digital Signature Algorithm

**DSA** é o padrão do governo dos EUA para **assinaturas digitais** (não para cifragem).

### Especificações

* Criado pela NIST em 1991
* Baseado no logaritmo discreto
* Usa chaves de 1024-3072 bits

### Status

* 🔸 Ainda válido (FIPS 186-5)
* ⚠️ Sendo substituído por ECDSA/EdDSA

***

## ⚔️ Comparativo

| Característica               | RSA             | ECC (Ed25519)         | Diffie-Hellman       |
| ---------------------------- | --------------- | --------------------- | -------------------- |
| **Cifragem**                 | ✅ Sim           | ❌ Não (só assinatura) | ❌ Não (troca chaves) |
| **Assinatura**               | ✅ Sim           | ✅ Sim                 | ❌ Não                |
| **Troca de chaves**          | ✅ Sim (RSA-KEM) | ✅ Sim (ECDH)          | ✅ Sim                |
| **Tamanho chave (128 bits)** | 3072 bits       | 256 bits              | 3072 bits            |
| **Velocidade (assinar)**     | Lenta           | Rápida                | N/A                  |
| **Velocidade (verificar)**   | Rápida          | Rápida                | N/A                  |

***

## 🎯 Recomendação Final

| Cenário                          | Escolha                                                 |
| -------------------------------- | ------------------------------------------------------- |
| **Novo projeto geral**           | ✅ **Ed25519** (assinatura) + **ECDH** (troca de chaves) |
| **Compatibilidade máxima**       | RSA-2048 ou RSA-3072                                    |
| **Assinaturas digitais**         | Ed25519 ou ECDSA (P-256)                                |
| **Troca de chaves**              | ECDH (Curve25519)                                       |
| **Criptografia de e-mail (PGP)** | RSA-4096                                                |
| **Blockchain/Criptomoedas**      | secp256k1 (ECDSA)                                       |
| **SSH**                          | `ssh-keygen -t ed25519`                                 |

***

## ⚠️ Ameaça Quântica

Tanto RSA quanto ECC serão **quebrados por computadores quânticos** (algoritmo de Shor).

| Algoritmo      | Vulnerável ao Shor? | Prazo estimado |
| -------------- | ------------------- | -------------- |
| RSA            | ✅ Sim               | 10-20 anos     |
| ECC            | ✅ Sim               | 10-20 anos     |
| Diffie-Hellman | ✅ Sim               | 10-20 anos     |

**Alternativa pós-quântica:** Algoritmos baseados em redes (Lattice-based) como CRYSTALS-Kyber, CRYSTALS-Dilithium.

***

## 🔗 Links Úteis

* [NIST – Digital Signature Standard (FIPS 186-5)](https://csrc.nist.gov/publications/detail/fips/186/5/final)
* [Curve25519 – Daniel Bernstein](https://cr.yp.to/ecdh.html)
* [OpenSSL – ECC](https://wiki.openssl.org/index.php/Elliptic_Curve_Cryptography)
* [Libsodium – Criptografia moderna](https://libsodium.gitbook.io/doc/)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://0xmorte.gitbook.io/bibliadopentestbr/conceitos/criptografia/assimetrica.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
