# Cifras de Fluxo

Diferente das cifras de bloco (que processam dados em pedaços fixos), as **cifras de fluxo** processam os dados **bit a bit** ou **byte a byte** — em tempo real.

```
Mensagem ⊕ Keystream = Cifrado (XOR)
↓
Gerador de Fluxo (Keystream)
↓
Mensagem ⊕ Keystream = Cifrado (XOR)
```

#### Vantagens

* ✅ Mais rápidas que cifras de bloco em software
* ✅ Processamento em tempo real (streaming)
* ✅ Baixa latência
* ✅ Menor consumo de memória

#### Desvantagens

* ❌ Mais difíceis de implementar corretamente (não repetir IV/chave)
* ❌ Vulneráveis se o keystream se repetir
* ❌ Não oferecem autenticação inerente (precisam de MAC)

> **Regra de Ouro:** **NUNCA** reutilizar o mesmo par (chave + IV) em uma cifra de fluxo.

***

### 📋 Algoritmos de Cifra de Fluxo

| Algoritmo    | Criado | Base                          | Velocidade            | Status                        |
| ------------ | ------ | ----------------------------- | --------------------- | ----------------------------- |
| **ChaCha20** | 2008   | ARX (Add-Rotate-XOR)          | ⚡ Extremamente rápida | ✅ **Recomendado**             |
| **Salsa20**  | 2005   | ARX                           | ⚡ Muito rápida        | 🔸 Antecessor do ChaCha20     |
| **RC4**      | 1987   | Troca de estado (S-Box)       | 🐢 Média              | ❌ **Vulnerável**              |
| **A5/1**     | 1987   | Registradores de deslocamento | 🔹 Rápida             | ❌ Quebrada                    |
| **A5/2**     | 1987   | Registradores de deslocamento | 🔹 Rápida             | ❌ Quebrada (fraca proposital) |

***

### 🏆 ChaCha20 – O Moderno Padrão

**ChaCha20** é atualmente a cifra de fluxo mais recomendada para novas implementações.

#### Características

* Criada por **Daniel Bernstein** (2008)
* Baseada em **ARX** (Add-Rotate-XOR) → rápida em software
* Sem vulnerabilidades conhecidas
* Não sofre de patentes

#### Onde é usado

* ✅ **TLS 1.3** (Google, Cloudflare)
* ✅ **WireGuard** (VPN moderna)
* ✅ **OpenSSH** (criptografia de sessão)
* ✅ **Signal** (mensagens)
* ✅ **WhatsApp**
* ✅ **Android** (criptografia de disco)

#### ChaCha20-Poly1305 (AEAD)

A versão mais usada combina:

* **ChaCha20** → cifragem
* **Poly1305** → autenticação (MAC)

Assim, oferece **confidencialidade + integridade + autenticação** em um único pacote.

#### Exemplo Python

```python
from Crypto.Cipher import ChaCha20_Poly1305
import secrets

# Chave de 256 bits + Nonce de 96 bits
key = secrets.token_bytes(32)
nonce = secrets.token_bytes(12)

cipher = ChaCha20_Poly1305.new(key=key, nonce=nonce)
mensagem = b"Minha mensagem super secreta"

# Cifrar + autenticar
cifrado = cipher.encrypt(mensagem)
tag = cipher.digest()  # Autenticação

# Decifrar + verificar
decipher = ChaCha20_Poly1305.new(key=key, nonce=nonce)
original = decipher.decrypt_and_verify(cifrado, tag)
```

***

### 🎷 Salsa20 – Antecessor

**Salsa20** é o antecessor do ChaCha20 (mesmo criador).

#### Comparação com ChaCha20

| Aspecto    | Salsa20      | ChaCha20        |
| ---------- | ------------ | --------------- |
| Rodadas    | 20           | 20              |
| Velocidade | Muito rápida | **Mais rápida** |
| Segurança  | ✅ Boa        | ✅ Excelente     |
| Uso atual  | Decrescente  | ✅ Crescente     |

> **Recomendação:** Prefira **ChaCha20** em novos projetos.

***

### 💀 RC4 – Obsoleto e Inseguro

**RC4 (Rivest Cipher 4)** foi extremamente popular por quase 20 anos. Hoje é **considerado vulnerável**.

#### História

* Criado por Ron Rivest (1987)
* Segredo comercial até 1994 (vazou na Cypherpunks mailing list)
* Extremamente simples e rápido

#### Onde foi usado

* 🔸 **WEP** (Wi-Fi) → quebrado
* 🔸 **SSL/TLS** antigo → ataques (Bar Mitzvah, Royal)
* 🔸 **Microsoft Office** (proteção de documentos)
* 🔸 **PDF** (criptografia antiga)

#### Vulnerabilidades

| Ataque                | Ano  | Impacto                           |
| --------------------- | ---- | --------------------------------- |
| Fluhrer-Mantin-Shamir | 2001 | Quebra do WEP em minutos          |
| Royal                 | 2013 | Recuperação de texto plano em TLS |
| Bar Mitzvah           | 2015 | Ataque em TLS com RC4             |

#### Status atual

* ❌ **Proibido** em TLS (RFC 7465, 2015)
* ❌ **Proibido** em Wi-Fi (WEP substituído por WPA2/WPA3)
* ❌ Microsoft abandonou em Office 2016+

> **Recomendação:** **NUNCA** use RC4 em novos projetos.

***

### 📱 A5/1 & A5/2 – Cifras do GSM

**A5/1 e A5/2** são cifras de fluxo usadas em **redes móveis GSM** (2G) para criptografar chamadas e SMS.

#### Características comuns

* Baseadas em **LFSR** (Linear Feedback Shift Registers)
* Desenvolvidas em segredo (Security by Obscurity)
* Quebradas publicamente em 1999

#### A5/1 vs A5/2

| Característica | A5/1                | A5/2                         |
| -------------- | ------------------- | ---------------------------- |
| Força          | Moderada (quebrada) | **Propositalmente fraca**    |
| Uso            | Europa, EUA         | Exportação (fora Europa/EUA) |
| Registradores  | 3 (19, 22, 23 bits) | 4 (19, 21, 22, 23 bits)      |
| Status         | Quebrada            | Quebrada (em segundos)       |

#### A5/2 (Fraca Propositalmente)

O A5/2 foi criada **deliberadamente fraca** para atender restrições de exportação de tecnologia criptográfica dos EUA (anos 90).

* Quebra em tempo real com hardware comum
* Permitia governos "amigos" interceptarem comunicações

#### Ferramentas de ataque

* **Kraken** (2008) → quebra A5/1 em minutos
* **OsmocomBB** → ataque em tempo real a GSM

#### Status atual

* ⚠️ GSM (2G) é **herdado** em muitas redes
* ⚠️ Ataques ainda são possíveis em áreas com GSM puro
* ✅ 3G/4G/5G usam cifras mais fortes (Kasumi, Snow 3G, ZUC)

***

### ⚔️ Comparativo de Velocidade (Software)

| Algoritmo       | MB/s (aprox)            | Plataforma            |
| --------------- | ----------------------- | --------------------- |
| **ChaCha20**    | 1500-2000               | CPU moderna (x86/ARM) |
| **Salsa20**     | 1200-1600               | CPU moderna           |
| **RC4**         | 400-600                 | CPU moderna           |
| **AES-128-GCM** | 800-1200 (com hardware) | CPU com AES-NI        |

> Sem aceleração por hardware, ChaCha20 é **mais rápida** que AES.

***

### 🔐 AEAD – Autenticação Integrada

Cifras de fluxo modernas são frequentemente combinadas com **autenticação** (AEAD).

| Combinação            | Tipo                               |
| --------------------- | ---------------------------------- |
| **ChaCha20-Poly1305** | Cifra + MAC (recomendado)          |
| **Salsa20-Poly1305**  | Cifra + MAC                        |
| AES-GCM               | Cifra de bloco + MAC (não é fluxo) |

***

### ⚠️ Erro Fatal: Repetição de (Chave + IV)

Em cifras de fluxo, **repetir o mesmo par (chave, IV)** é catastrófico:

```
Se C1 = P1 ⊕ K
e   
C2 = P2 ⊕ K (mesma chave, mesmo IV)

Então C1 ⊕ C2 = P1 ⊕ P2
```

Com análise estatística, o texto plano pode ser recuperado.

**Exemplo real:** Ataque ao WEP (IVs de 24 bits se repetiam rapidamente).

***

### 🎯 Recomendação Final

| Cenário                           | Escolha                     |
| --------------------------------- | --------------------------- |
| **Novo projeto (TLS/HTTPS)**      | ✅ **ChaCha20-Poly1305**     |
| **VPN (WireGuard)**               | ✅ ChaCha20-Poly1305         |
| **Criptografia de disco**         | AES-XTS (bloco) ou ChaCha20 |
| **Mensagens instantâneas**        | ChaCha20-Poly1305           |
| **Sistemas legados (manutenção)** | 🔸 Salsa20                  |
| **RC4**                           | ❌ **Nunca**                 |
| **A5/1, A5/2**                    | ❌ **Nunca**                 |

***

### 🔗 Links Úteis

* [ChaCha20-Poly1305 (IETF RFC 7539)](https://datatracker.ietf.org/doc/html/rfc7539)
* [Libsodium – ChaCha20-Poly1305](https://doc.libsodium.org/secret-key_cryptography/chacha20-poly1305)
* [WireGuard Protocol](https://www.wireguard.com/protocol/)
* [A5/1 Cracking (Kraken)](https://www.schneier.com/blog/archives/2008/01/a51_cracked.html)


---

# 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/cifras-de-fluxo.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.
