> For the complete documentation index, see [llms.txt](https://stacked-rwx.gitbook.io/public/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://stacked-rwx.gitbook.io/public/cryptography/criptografia-simetrica-e-assimetrica.md).

# Criptografia Simétrica e Assimétrica

## O que é criptografia?

Antes de falarmos sobre criptografia simétrica e assimétrica é interessante falarmos primeiro, sobre o que é criptografia e porque ela é tão necessária no ramo de segurança da informação.

A criptografia é responsável por garantir a **confidencialidade**, **integridade**, **autenticidade** e **não repúdio** dos dados através de transformações matemáticas. O princípio fundamental é tornar a informação inteligível apenas para aqueles que possuem o conhecimento necessário (**a chave**) para revertê-la.

Historicamente, a criptografia evoluiu de técnicas clássicas de substituição e transposição (como a **Cifra de César**) para sistemas modernos baseados em **teoria dos números**, **àlgebra modular**, **curvas elípticas** e **funções unidirecionais**.

O que podemos observar é que a criptografia é bastante utilizada em quase todas as camadas da tecnologia moderna: desde **armazenamento local de senhas**, **comunicações HTTPS** e **assinaturas digitais**, até a **proteção de firmware**, **ofuscação de código** e **infraestruturas de blockchain**.

Em sua essência, ela se divide em dois paradigmas principais: **criptografia simétrica** e **criptografia assimétrica**. Cada uma dessas abordagens apresenta características matemáticas e operacionais distintas, e seu uso combinado é comum em protocolos em protocolos como o **TLS**, **SSH** e **sistemas de gestão de chaves** (**PKI**).

Então, como pesquisadores de segurança, compreender a criptografia não significa apenas saber utilizá-la, mas entender como e porque ela funciona, quais são seus limites e como ela pode ser explorada.

## Criptografia Simétrica

A definição de criptografia simétrica está ligada na forma em que esse modelo de criptografia funciona: a mesma chave de segredo é usada para criptografar e descriptografar dados. Isso significa que o remetente e destinatário precisam compartilhar previamente essa "**secret**", o que a torna extremamente eficiente, mas também dependente de mecanismos seguros de troca de chaves.

A segurança desse tipo de sistema depende totalmente do sigilo da chave e da robustez matemática do algoritmo contra ataques de **brute-force**, **differential cryptanalysis** e **linear cryptanalysis**.

<figure><img src="/files/lVV1sPfKuVklCizj1QGY" alt=""><figcaption></figcaption></figure>

#### Estrutura e modos de operação

Os algoritmos simétricos modernos são divididos em duas classes principais:

**Block Ciphers**

* Os **block ciphers** processam os dados em blocos fixos, normalmente de **64** ou **128 bits**. Um exemplo bastante conhecido é o **AES** (**Advanced Encryption Standard**), que utiliza múltiplas rodadas de substituição, permutação e mistura em campo finito **GF**(**2^8**).
* *Principais modos de operação:*\
  **- ECB** (**Eletronic Codebook**): cada bloco é cifrado isoladamente (**inseguro para padrões repetidos**); - **CBC** (**Cipher Block Chaining**): cada bloco depende do anterior, usando um vetor de inicialização;\
  \- **GCM** (**Galois**/**Counter Mode**): adiciona autenticação criptográfica (**AEAD**).\
  \- **CTR** (**Counter Mode**): transforma uma cifra de bloco em um fluxo, combinando contadores com a chave;

**Stream Ciphers**

* As **stream ciphers** geram um fluxo **pseudoaleatório** de bits, conhecido como **keystream**, que é combinado com o **plaintext** usando **operações XOR**. Exemplos clássicos são o **ChaCha20** e o clássico **RC4**.

A criptografia simétrica é **onipresente** em praticamente todos os sistemas de proteção. Podemos encontrá-la no **TLS**/**SSL** que é usada após o **handshake assimétrico** para proteger o tráfego de dados com **AES-GCM** ou **ChaCha20-Poly1305**. Também podemos encontrá-la em armazenamento e backup de dados com criptografia de discos, partições e bancos de dados. E principalmente, que é a minha área de interesse; em malwares!

Malwares utilizam criptografia simétrica para **cifrar payloads** e principalmente proteger comunicações **C2** entre o servidor e o cliente. Isso torna a análise de tráfego de **NDRs** ou análise manual significamente mais difícil.

## Criptografia Assimétrica

A **criptografia assimétrica**, também conhecida como criptografia de chave pública, surgiu para resolver um dos maiores desafios da criptografia simétrica: a distribuição segura de chaves.

Ela é baseada em pares de chaves matematicamente relacionadas, compostos por uma chave pública (**Public Key**) e uma chave privada (**Private Key**).

Diferente da criptografia simétrica, essas chaves não são idênticas, e o que é criptografado com uma delas só pode ser decriptado com a outra. Isso permite que a chave pública seja distribuída livremente, enquanto a privada permanece em segredo absoluto.

<figure><img src="/files/vE5bMx2qxW3vzdtvjp3Q" alt=""><figcaption></figcaption></figure>

#### Estrutura do RSA

O RSA (Rivest-Shamir-Adleman) é o exemplo mais emblemático da criptografia assimétrica. Sua base está na dificuldade de fatorar números muito grandes em seus primos componentes.

O processo de geração de chaves no algoritmo RSA é inteiramente baseado em fundamento da aritmética modular e na dificuldade de fatoração de números primos grandes, como mencionado acima. Primeiramente, são escolhidos dois números primos suficientemente grandes, *p* e *q*. A partir deles, calcula-se o produto:

***`n = p X q`***

O valor de *n* é conhecido como módulo e constitui a base matemática tanto da chave pública quanto da chave privada.

Em seguida, é determinado o totiente de Euler:

***`φ(n)=(p−1)(q−1)`***

Esse valor representa a quantidade de números menores que *n* que são coprimos em relação a ele.

Após isso, escolhe-se um expoente público *e* tal que:

***`1 < e < φ(n)`***

e

***`gcd(e,φ(n)) = 1`***

Ou seja, *e* deve ser um número relativamente primo de *φ(n)*, garantindo que exista um inverso multiplicativo modular.

Com base em *e*, calcula-se o expoente privado d, que é o inverso modular de *e* em relação a *φ(n)*:

***`d = e^-1 (mod φ(n))`***

Esse valor *d* é calculado normalmente através do AEE (Algoritmo Euclidiano Estendido).

Ao final do processo, temos o par de chaves:

* Chave pública: `(`*`e, n`*`)`
* Chave privada: `(`*`d, n`*`)`

Essas chaves são matematicamente relacionadas, mas a dedução de *d* a partir de *e* e *n* é considerada computacionalmente inviável, uma vez que exigiria a fatoração de *n* em seus primos *p* e *q*, operação que se torna impraticável à medida que o tamanho de *n* cresce (geralmente 2048 bits ou mais).

A **criptografia assimétrica** está presente em praticamente **todos os mecanismos modernos de segurança.** Ela é a base da **confiança, autenticação e troca segura de informações** na Internet, e também desempenha um papel fundamental em sistemas operacionais, protocolos de comunicação, dispositivos IoT e até mesmo em artefatos maliciosos avançados.\
\
Por exemplo. Nos protocolos **TLS/SSL**, usados em **HTTPS**, a criptografia assimétrica é responsável por estabelecer o **canal seguro inicial** entre cliente e servidor. Durante o **handshake**, o servidor envia sua **chave pública**, e o cliente a utiliza para **criptografar uma chave simétrica de sessão** (por exemplo, usada pelo AES ou ChaCha20).

Após essa troca inicial, a comunicação passa a ocorrer via criptografia simétrica, muito mais rápida.

#### Conclusão

A criptografia, em suas duas principais vertentes (**simétrica** e **assimétrica),** constitui a base de praticamente toda a segurança digital que conhecemos hoje. Enquanto a criptografia simétrica se destaca pela velocidade e eficiência em grandes volumes de dados, a assimétrica brilha pela capacidade de estabelecer comunicações seguras sem a necessidade de compartilhar as suas secrets antecipadamente.

Até mais!
