# Simétrica

Na **criptografia simétrica**, a **mesma chave** é usada tanto para **codificar** (cifrar) quanto para **decodificar** (decifrar) a informação.

```
Mensagem Original + Chave → Cifragem → Mensagem Cifrada
Mensagem Cifrada + Mesma Chave → Decifragem → Mensagem Original
```

**Desafio central:** Como transmitir a chave de forma segura entre as partes?

***

## 📦 Cifras de Bloco (Block Ciphers)

Processam dados em **blocos de tamanho fixo** (ex: 64, 128 bits). Se o dado for maior, divide-se em blocos; se for menor, aplica-se **padding** (preenchimento).

***

## 📋 Algoritmos de Cifra de Bloco

| Algoritmo        | Criado | Tamanho do Bloco | Tamanho da Chave | Status Atual                               |
| ---------------- | ------ | ---------------- | ---------------- | ------------------------------------------ |
| **AES**          | 2001   | 128 bits         | 128/192/256 bits | ✅ **Padrão global**                        |
| **DES**          | 1977   | 64 bits          | 56 bits          | ❌ Inseguro (quebrado em 1999)              |
| **3DES**         | 1998   | 64 bits          | 112/168 bits     | ⚠️ Em descontinuação                       |
| **Blowfish**     | 1993   | 64 bits          | 32-448 bits      | 🔸 Usado, mas obsoleto para novos projetos |
| **Twofish**      | 1998   | 128 bits         | 128/192/256 bits | 🔸 Finalista do AES                        |
| **Camellia**     | 2000   | 128 bits         | 128/192/256 bits | ✅ Equivalente ao AES                       |
| **IDEA**         | 1991   | 64 bits          | 128 bits         | 🔸 Usado no PGP original                   |
| **Serpent**      | 1998   | 128 bits         | 128/192/256 bits | 🔸 Finalista do AES (segurança máxima)     |
| **CAST-128/256** | 1996   | 64/128 bits      | 128/256 bits     | 🔸 Usado em PGP e produtos Microsoft       |

***

## 🏆 AES – O Padrão Global

**AES (Advanced Encryption Standard)** é o algoritmo simétrico mais utilizado no mundo hoje.

### Especificações

* **Bloco:** 128 bits (16 bytes)
* **Chaves:** 128, 192 ou 256 bits
* **Rodadas:** 10 (128), 12 (192) ou 14 (256)
* **Estrutura:** Substituição, permutação, mistura (SPN)

### Onde é usado

* ✅ Wi-Fi (WPA2/WPA3)
* ✅ SSL/TLS (HTTPS)
* ✅ Discos criptografados (BitLocker, LUKS)
* ✅ Arquivos ZIP criptografados (AES-256)
* ✅ Senhas (ferramentas como 7-Zip)

### Exemplo Python

```python
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad

chave = b'0123456789abcdef'  # 128 bits
cipher = AES.new(chave, AES.MODE_CBC, iv=b'1234567890123456')

texto = b"Minha mensagem secreta"
cifrado = cipher.encrypt(pad(texto, AES.block_size))

# Decifrar
decipher = AES.new(chave, AES.MODE_CBC, iv=b'1234567890123456')
original = unpad(decipher.decrypt(cifrado), AES.block_size)
```

***

## ❌ DES – Obsoleto

**DES (Data Encryption Standard)** foi o padrão dos anos 80/90, mas hoje é **inseguro**.

### Problemas

* Chave muito curta (56 bits) → **força bruta em 22 horas** (1999)
* Bloco pequeno (64 bits)

### Ataque histórico

* 1999: EFF construiu o "Deep Crack" → quebrou DES em 22h17min

> **Recomendação:** Não use DES em novos projetos.

***

## ⚠️ 3DES – Em descontinuação

**Triple DES** aplica o DES três vezes para aumentar a segurança.

```
Cifragem: C = DES_enc(k3, DES_dec(k2, DES_enc(k1, P)))
```

### Status

* Ainda usado em sistemas legados (ATMs, cartões de pagamento)
* **Descontinuação:** NIST desrecomenda a partir de 2023

***

## 🐟 Blowfish & Twofish

### Blowfish

* Criado por Bruce Schneier (1993)
* Domínio público
* Bloco de 64 bits (limitante)
* **Ainda usado** em alguns sistemas antigos

### Twofish

* Sucessor do Blowfish
* Finalista do concurso AES (perdeu para o Rijndael)
* Bloco de 128 bits
* Excelente segurança

***

## 🇯🇵 Camellia

* Desenvolvido pela **NTT e Mitsubishi** (Japão)
* Padrão em diversos países asiáticos
* **Comparável ao AES** em segurança e desempenho
* Suportado por OpenSSL, GnuTLS

***

## 💡 IDEA

**International Data Encryption Algorithm**

* Utilizado no **PGP original** (Pretty Good Privacy)
* Chave de 128 bits, bloco de 64 bits
* Patenteado (expirou em 2012)

***

## 🐍 Serpent

* Um dos finalistas do concurso AES
* **Foco em segurança extrema** (mais rodadas que o AES)
* Mais lento que o AES, mas teoricamente mais seguro

***

## 🔧 CAST-128 / CAST-256

* Desenvolvido por Carlisle Adams e Stafford Tavares
* **CAST-128:** usado em PGP e produtos Microsoft (Outlook)
* **CAST-256:** finalista do concurso AES (primeira fase)

***

## ⚔️ Comparativo Rápido

| Algoritmo    | Uso Recomendado            | Segurança  | Velocidade          |
| ------------ | -------------------------- | ---------- | ------------------- |
| **AES-256**  | ✅ Sim, sempre que possível | Alta       | Muito rápida        |
| **Camellia** | ✅ Alternativa ao AES       | Alta       | Rápida              |
| **Twofish**  | 🔸 Em sistemas legados     | Alta       | Média               |
| **Serpent**  | 🔸 Segurança máxima        | Muito alta | Lenta               |
| **Blowfish** | ❌ Evitar em novos projetos | Média      | Rápida              |
| **3DES**     | ❌ Em descontinuação        | Baixa      | Lenta               |
| **DES**      | ❌ Nunca                    | Quebrada   | Rápida (mas inútil) |

***

## 🎯 Recomendação Final

| Cenário                   | Escolha                         |
| ------------------------- | ------------------------------- |
| **Novo projeto**          | ✅ **AES-256-GCM** (autenticado) |
| **Sistemas japoneses**    | Camellia                        |
| **Segurança máxima**      | Serpent + AES (cascata)         |
| **Legado (manutenção)**   | Twofish ou Blowfish             |
| **Criptografia de disco** | AES-256-XTS                     |

***

## 🔗 Links Úteis

* [NIST – AES](https://csrc.nist.gov/projects/block-cipher-techniques)
* [Crypto++ – Biblioteca de algoritmos](https://cryptopp.com/)
* [PyCryptodome – Python](https://www.pycryptodome.org/)


---

# 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/simetrica.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.
