Pular para o conteúdo principal

Criptografia

Conceitos

Criptografia é a prática de transformar informações legíveis (texto plano) em um formato incompreensível (texto cifrado) para protegê-las contra acesso não autorizado. Esse processo utiliza algoritmos matemáticos e chaves criptográficas para garantir a confidencialidade, integridade e autenticidade dos dados.

Criptoanálise é a ciência de quebrar códigos e decifrar mensagens. Então o simples fato de você buscar quebrar o código e não somente interpretar a informação já é uma forma de ataque.

Criptologia é a ciência que agrega a criptografia e a criptoanálise.

Substituição

A substituição é um método de criptografia em que os caracteres do texto original são substituídos por outros símbolos, letras ou números com base em uma regra definida. Esse processo mantém a estrutura do texto, mas altera seus elementos individuais.

Exemplos:

  • Cifra de César: cada letra é substituída por outra deslocada um número fixo de posições no alfabeto. Monoalfabética.
    Exemplo: com deslocamento de 3, "ATAQUE" vira "DWDTXH".

  • Cifra de Vigenère: utiliza uma palavra-chave para determinar múltiplos deslocamentos, tornando a substituição mais complexa. Polialfabética.

A substituição pode ser quebrado por análise de frequência, que identifica padrões comuns na língua utilizada.

Transposição

Foca no simples embaralhamento das letras segundo alguma rotina.

Mensagem original:

Eu serei analista judiciário do Tribunal de Justiça do Pará.

Mensagem transposta abaixo não seria tão simples. Perceba que não há criação de letras ou sílabas novas:

EELJIDBTÓUÍAUSRNTAJIDNÇP.EAARIRICULI

Esteganografia

Tem como objetivo esconder uma mensagem dentro de outra. Tipicamente, busca-se enviar uma mensagem de texto embutido no código de uma imagem.

Esteganografia

Notem que a imagem à esquerda é a original, enquanto a da direita contém o gabarito oficial da prova para analista judiciário.


Cifragem de Bloco – Cipher Block

A cifragem por bloco divide a mensagem em partes de tamanho fixo antes de aplicar operações matemáticas. Embora todos os modos busquem garantir confidencialidade, nem todos asseguram autenticidade e integridade.

Eletronic Code Book – ECB

É o método mais simples que utiliza como conceito a independência dos blocos sendo aplicada a mesma chave. É uma técnica não randômica pela simples concatenação dos blocos resultado da fragmentação da mensagem original. O ECB utilizada como tamanho padrão 64 bits por bloco. Não é considerado um mecanismo seguro devido à repetição dos dados e resultado de cifragem idêntico.

Como vantagem podemos citar o fato de que o erro de um bit causará prejuízo apenas no bloco o qual ele pertence, devido à independência dos blocos.

ECB

Exemplo:

SEREI ANALISTA JUDICIÁRIO

Se dividirmos em blocos de 4 caracteres (exemplo), temos:

[XF12] [P9L8] [A3K7] [T1H4] [G2H1] [A3K7] [L0M9]

Note que blocos repetidos geram o mesmo resultado.
Se tivéssemos "SERE" aparecendo duas vezes, ele seria cifrado da mesma forma, revelando padrões, tornando-o menos seguro.

Cipher Block Chaining – CBC

É o método mais utilizado. Utiliza a operação XOR devidamente representada na imagem a seguir pelo círculo em volta do sinal de “+”. A cifragem de cada bloco depende da cifragem de todos os blocos anteriores.
Usa um vetor de inicialização (IV) aleatório no primeiro bloco e em cada bloco de texto é XOR com o bloco cifrado anterior antes de ser cifrado.

CBC

Perde em desempenho. Além disso, um erro em qualquer bit ou bloco, gera prejuízo em todos os blocos subsequentes.

Vamos fazer um comparativo entre ECB e CBC na prática:

Frase: Estudou Estudou Passou

Agora vamos dividir em blocos:
[Estu] [dou ] [Estu] [dou ] [Pass] [ou ]

Cifrado no ECB:
[AB12] [CD34] [AB12] [CD34] [EF56] [GH78]

Note que "Estu" e "Estu" geram o mesmo bloco cifrado ("AB12"). O mesmo acontece para "dou" e "dou". Isso revela padrões no texto cifrado, que é uma vulnerabilidade.

Cifrado no CBC (supondo o Vetor de inicialização = "1234"):
[XY98] [AB12] [MN45] [KL67] [OP89] [QR23]

Mesmo que o texto contenha repetições como "Estu" e "dou", os blocos cifrados são diferentes devido à dependência entre os blocos e o uso do vetor de inicialização.

Cipher FeedBack - CFB

Suporta qualquer tamanho de entrada, independentemente do bloco.
Por esse motivo, se torna útil para aplicações que dependem de transmissão imediata.

  • Cada bloco cifrado serve como feedback para o próximo bloco.
  • Cifra por fluxo. Ideal para tranmissão de dados contínuos.
  • Menor impacto de erro (afeta apenas o próximo byte/bit).

CFB


Cifragem de Fluxo – Stream Cipher

É um tipo de criptografia que cifra os dados bit a bit ou byte a byte, em vez de trabalhar com blocos fixos como na cifragem por bloco.

🔹 Funcionamento: Um gerador de chave produz um fluxo de bits (chave de fluxo) que é combinado com o texto original por meio de uma operação XOR.

🔹 Exemplo: RC4 é um algoritmo clássico de cifragem de fluxo.

🔹 Vantagens: Rápida, eficiente para comunicação contínua (ex: transmissão de áudio e vídeo).

🔹 Desvantagens: Se a mesma chave for reutilizada, pode comprometer a segurança.

Criptoanálise

Tem foco no entendimento de como funciona o algoritmo de criptografia.
Desse modo, a realização da criptoanálise depende da quantidade de informações que se tem à disposição e quão possível é manipulá-las.

Tipos de ataques:

  1. Apenas Texto Cifrado – CypherText-Only: Nesse contexto, há conhecimento apenas do algoritmo de criptografia utilizado e do próprio texto cifrado.
    Exemplo: Imagine que você encontrou a mensagem cifrada H7sny3nsbavasZ, mas não tem ideia do texto original nem da chave usada. Seu desafio é quebrar a criptografia apenas com essa informação.

  2. Texto Claro Conhecido – Known-plaintext: Possui tanto uma amostra do texto cifrado quanto do texto plano correspondente (original). Isso facilita a tarefa de descobrir a chave ou o método de ciframento usado, porque ele já sabe como a mensagem original foi transformada no texto cifrado.
    Exemplo: Suponha que o atacante saiba que "ATAQUE" foi cifrado como "DWDNTX". Se ele identificar que cada letra foi deslocada três posições no alfabeto (Cifra de César), ele pode usar essa lógica para descriptografar novas mensagens cifradas da mesma forma.

  3. Texto Claro Escolhido – Choosen-Plaintext: Agora o atacante não se restringe apenas a saber o par de entrada e saída, mas ele é capaz de manipular a entrada e avaliar a sua respectiva saída;
    Exemplo: O atacante envia "AAAAA" para cifragem e recebe "TRZKJ". Depois, envia "BBBBBBBB" e recebe "YIUFSALM". Comparando as saídas, ele percebe como o algoritmo lida com diferentes entradas.

  4. Texto Cifrado Escolhido – Choosen-CypherText: Agora o atacante é capaz de fazer o caminho reverso, onde a partir de um texto cifrado escolhido, ele é capaz de verificar qual o texto em claro correspondendo.
    Exemplo: O atacante intercepta a mensagem cifrada "H7sny3nsbavasZ" e ele consegue enviar essa mensagem a um sistema que a decifra, obtendo o texto original "tjpa2025".

  5. Texto Escolhido – Choosen-Text – Há plena capacidade de manipulação dos textos de entrada e saída, e vice-versa.
    Exemplo: O atacante escolhe o texto claro "Segredo123" e vê como ele é cifrado. Depois, escolhe um texto cifrado "XgHt7ZmP" e observa a saída descriptografada.

Decifragem

Método da Recuperação Direta
🔹 Conceito: Explora vulnerabilidades do algoritmo sem testar todas as combinações.
🔹 Exemplo: Se o algoritmo tem falhas, o atacante pode recuperar a chave diretamente sem tentativa e erro.

Método Pré-Computado
🔹 Conceito: Utiliza tabelas de hash pré-computadas (ex: Rainbow Tables) para acelerar a quebra da criptografia.
🔹 Exemplo: O atacante usa uma tabela que já contém combinações de senhas e seus hashes, economizando tempo de cálculo.

Método da Força Bruta
🔹 Conceito: Testa todas as combinações possíveis de chave até encontrar a correta.
🔹 Exemplo: O atacante tenta todas as 10 bilhões de combinações possíveis para uma senha de 8 dígitos.

Método de Dicionário
🔹 Conceito: Utiliza uma lista de palavras ou senhas comuns para comparar com o texto cifrado.
🔹 Exemplo: O atacante testa senhas comuns como "123456", "senha" e "qwerty" para decifrar.

Método Probabilístico
🔹 Conceito: Baseado em probabilidades estatísticas para prever padrões mais prováveis de texto ou chave.
🔹 Exemplo: O atacante usa modelos linguísticos para prever palavras mais comuns e testar apenas essas no algoritmo de cifra.

Criptografia Simétrica

A criptografia simétrica possui como princípio o fato de se utilizar a mesma chave para o procedimento de criptografia e descriptografia.

Criptografia Simétrica

A criptografia simétrica visa garantir apenas o princípio da confidencialidade. Os demais não podem ser garantidos, pois não há mecanismo que garanta que a mensagem não será alterada no caminho, podendo gerar um resultado de decriptação diferente da mensagem original.
Não há como garantir de que a pessoa que aplicou a chave simétrica no processo de encriptação é quem ela diz ser.

Resumo:

  • Chave única e pequenas.
  • Maior Performance.

Problema: Chave compartilhada.


Algorítimos Simétricos

Em bloco (Block Ciphers):
🔹 DES, 3DES, AES,RC5, IDEA, Blowfish, TwoFish.

Em fluxo (Stream Ciphers):
🔹 RC4

dica

Aqui realmente é pura decoreba, os algoritmos mais cobrados: DES e AES.

DESData Encryption Standard

Utiliza chaves tamanhos fixos de 64 bits, sendo 56 bits são usados efetivamente e 8 bits de paridade.

  • Usa S-Boxes nos processos de substituição de bits.
  • Forma de organização é conhecida como cifra de Feistel.

3DES – Triple Data Encryption Standard

Total de chave: 168 bits (3 chaves de 56 bits cada).
Força efetiva: 112 bits (devido a ataques de "Meet-in-the-Middle", que reduzem a segurança teórica).

🔹 No modo de chave dupla (2-key 3DES), a força efetiva cai ainda mais, para 80 bits.

AESAdvanced Encryption Standard

Chave de 128, 192 e 256 bits.
Bloco de 128 bits por padrão.
Trabalha com três estágios de substituição (Subbytes,MixColmns e AddRoundKey) e um de permutação(shiftRows).

O IDEA (International Data Encryption Algorithm) é um cifrador de bloco.
🔹 Tamanho do bloco: 64 bits
🔹 Tamanho da chave: 128 bits
🔹 Usado em: PGP (Pretty Good Privacy)

Ele é semelhante ao AES, DES e Blowfish, pois cifra dados em blocos fixos. Foi considerado um dos sucessores do DES, mas acabou sendo menos popular que o AES.

One-Time Pad (OTP)

Tipo: Cifra de fluxo (Stream Cipher).
Chave: Deve ser tão longa quanto a mensagem, completamente aleatória e usada apenas uma vez.
Segurança: Inquebrável, pois não há padrões para análise criptoanalítica.
Problema: Distribuição segura da chave é impraticável para grandes volumes de dados.

🔹 Se usado corretamente, o OTP é a única cifra com segurança incondicional (independente do poder computacional do atacante). ✅


Criptografia Assimétrica

Também conhecida como criptografia de chaves públicas, é caracterizada pelo fato de se utilizar duas chaves no processo criptográfico, ou seja, caso seja utilizada uma para criptografar os dados, deve-se, necessariamente, usar a outra para descriptografar. As duas chaves utilizadas são conhecidas como privada e pública.

Confidencialidade: Utiliza-se a chave pública do receptor para cifrar e a chave privada do receptor para decifrar.
Exemplo: E-mail seguro com PGP ou S/Mime e acesso https em sites.

Exemplo:

Imagine que Maria quer enviar um documento confidencial para João e garantir que somente ele possa ler o conteúdo.

  1. Maria obtém a chave pública de João (disponível publicamente ou enviada anteriormente).

  2. Maria usa a chave pública de João para cifrar o documento antes de enviá-lo. O conteúdo do documento se torna ilegível para qualquer pessoa, exceto para João.

  3. Maria envia o documento cifrado para João.

  4. Quando João recebe o documento cifrado, ele usa sua chave privada para decifrar e acessar o conteúdo original do documento.

Esse processo garante que, mesmo que o documento seja interceptado durante a transmissão, somente João, com sua chave privada, pode acessar as informações, assegurando a confidencialidade da comunicação.

🚀 Simulador 🔒

Autenticidade: Utiliza-se a chave privada do emissor para cifrar e a chave pública do emissor para decifrar.
Exemplo: Assinatura Digital

Exemplo: João (emissor) usa sua chave privada para cifrar a assinatura digital (garantindo autenticidade). Maria (receptora) usa a chave pública de João para decifrar e verificar a autenticidade do documento.

🚀 Simulador 📄

Algoritmos Assimétricos

Diffie Hellman

Diffie-Hellman não é usado para cifrar mensagens, mas sim para troca segura de chaves em canais inseguros. Ele permite que duas partes gerem uma chave secreta compartilhada sem que um invasor possa interceptá-la, mesmo que toda a comunicação seja pública.

  • Não serve para assinatura digital.
  • Perfect Forward Secrecy (PFS).
  • Utilizado em VPN IpSec.
  • Logaritmo discreto.
  • Vulnerável a ataques “man-in-the-middle”.

Formas de implementação:

  1. Anônimo: Não há autenticação das chaves públicas trocadas, tornando-o vulnerável a ataques do tipo Man-in-the-Middle, pois não há verificação de identidade.

  2. Estático: As chaves públicas são fixas, ou seja, são geradas uma vez e reutilizadas em várias sessões, oferecendo maior segurança do que o método anônimo, mas com menos proteção contra ataques do tipo Man-in-the-Middle em comparação ao método efêmero.

  3. Efêmero: As chaves públicas são geradas a cada sessão, proporcionando alta segurança, pois não são reutilizadas, evitando ataques baseados na reutilização de chaves.


El Gamal

  • Logaritmos discretos em um corpo finito.
  • Utilizado em assinaturas digitais(PGP) de E-mails.
  • Três componentes básicos: gerador de chaves, algoritmo de cifragem e algoritmo decifragem.

RSA - Rivest-Shamir-Adleman

  • Sua robustez reside na dificuldade de se fatorar números extensos.
  • Tamanho da chave em sistemas legados: 1024 bits.
  • Tamanho de chave recomendada: 2048 a 4096 bits.
cuidado

Atualmente, recomenda-se a utilização de 2048. É necessário cuidado na leitura da questão.
1024 já está defasado, porém o RSA pode usar 1024 de toda forma.

Elliptic Curve Cryptography (ECC)

Chave: Oferece segurança equivalente à do RSA com chaves menores, geralmente de 256 bits.
Vantagem: Eficiência maior, pois chaves menores resultam em operações mais rápidas e menor uso de recursos, mantendo a segurança.
Aplicação: Usado em protocolos como SSL/TLS, bitcoin, e dispositivos móveis, devido à sua eficiência.
Segurança: Oferece o mesmo nível de segurança que RSA, mas com chaves significativamente menores.

Exemplo: Uma chave de 256 bits em ECC oferece um nível de segurança semelhante a uma chave de 3072 bits no RSA.

Função HASH

As funções HASH são algoritmos criptográficos unidirecionais. Utiliza-se funções matemáticas que permitem gerar um resultado de tamanho fixo independentemente do tamanho do conteúdo de entrada.

Utiliza o conceito de Difusão: Impossível modificar a mensagem original sem modificar o HASH.

Aplicações:

Confidencialidade: Senhas de sites. As senhas são armazenadas em HASH.
Integridade(Principalmente): Envio de texto em claro + HASH. Exemplo: Download da ISO do Debian.
Autenticidade: Combinação para uso em assinatural digital.

Ataques de Colisão ocorrem quando dois inputs diferentes geram o mesmo valor de hash em uma função de hash. Isso compromete a integridade da função de hash, pois permite que dados diferentes sejam tratados como idênticos. Esses ataques são uma preocupação em algoritmos de hash como MD5 e SHA-1, que têm sido vulneráveis a colisões.

Ataque de Aniversário explora a probabilidade de colisões em funções hash, baseado no Paradoxo do Aniversário.
Se uma função hash gera valores de 128 bits, ao invés de precisar testar 2 elevado a 128 combinações, um atacante pode encontrar colisões em aproximadamente 2 elevado a 64 tentativas. Reduzindo consideravelmente as probabilidades.

MD5

HASH de 128 Bits / Entrada em blocos de 512 Bits.

SHA

SHA-1: HASH 160 Bits / Entrada em blocos de 512 Bits.
SHA-256: HASH 256 bits / Entrada em blocos de 512 bits.
SHA-512: HASH 512 bits / Entrada em blocos de 1024 bits.

RIPEMD

RIPEMD-160: HASH 160 bits (20 bytes) / Entrada em blocos de 512 bits.
RIPEMD-320: HASH 320 bits (40 bytes) / Entrada em blocos de 512 bits.

É importante observar que o tamanho do hash de saída é uma medida da força do algoritmo de hash.
Hashes de tamanho maior geralmente são considerados mais seguros, pois oferecem uma maior resistência à colisão.

dica

Aqui é pura decoreba, mas cai muito!

SALT

O salt é um valor aleatório adicionado a senhas antes da aplicação de uma função hash, evitando ataques de dicionário e pré-computação, como rainbow tables.