Criptografia simétrica

Continuando a série sobre criptografia (pode ler o artigo anterior aqui), este artigo vai falar sobre criptografia de chave secreta ou simétrica.

Fernando Souza
Prognosys
6 min readApr 3, 2020

--

Photo by Markus Spiske on Unsplash

No atual mundo conectado, estamos sempre em contato com o risco de acesso não autorizado para qualquer tipo de dado, principalmente com dados sensíveis, como, por exemplo, dados bancários e financeiros. A criptografia é uma parte essencial para manter esses dados seguros e mitigar os riscos para os negócios relacionados.

Definição

A criptografia simétrica é um tipo de encriptação onde só existe uma chave (uma chave secreta) que é usada em ambas as partes do processo, ou seja, tanto na encriptação quanto na decriptação.

Criptografia modo simétrico.

Através de algoritmos de criptografia simétrica, uma mensagem é convertida para uma forma que não pode ser entendida (cifra) por ninguém que não possua a mesma chave para decriptá-la. Uma vez que o destinatário da mensagem, que possui a mesma chave, recebe a mensagem, o algoritmo reverte a ação (ou seja, decripta) e a mensagem é retornada para a sua forma original e entendível. Se um algoritmo é forte o suficiente, a única maneira de uma pessoa acessar a informação original através da cifra é com a chave original.

A chave secreta que tanto o remetente quanto o destinatário usam pode ser uma senha/código ou mesmo uma texto aleatório composto por letras e números. O tamanho dessa chave é determinado pelo algoritmo que é usado e normalmente está associado também à sua segurança.

A segurança da criptografia simétrica é baseada no quão difícil é saber a chave correspondente por simplesmente chute. Por exemplo, uma chave de 128-bits pode levar bilhões de anos até alguém conseguir adivinhar usando um computador comum. Normalmente, quanto maior a chave, maior a segurança envolvida.

Existem dois tipos de algoritmos:

  • Em bloco: a mensagem é encriptada em blocos de tamanhos específicos. Exemplos: DES, AES, etc.
  • Em stream: a mensagem é encriptada pegando-se byte a byte da informação. Exemplos: RC4, Salsa20, etc.

Criptografia em bloco

Nesse modo de operação, o algoritmo funciona somente para um grupo fixo de bits que é chamado de bloco. Para aplicar esse método em mais de um bloco (uma informação maior que o bloco definido, o que normalmente acontece) é necessário um modo de operação.

Alguns modos necessitam de uma sequência única de bits, também conhecida como Vetor de Inicialização (ou, pela sigla em inglês, IV), para cada operação. Os modos mais antigos de operação normalmente trabalham para prover confidencialidade (mais sobre os princípios aqui). Os modos mais recentes incluem também o conceito de autentiticidade.

Como os blocos trabalham em tamanho fixo e as mensagens podem variar de tamanho, são adicionados alguns bytes ao final para que ela fique com tamanho múltiplo desse bloco. Esses bytes adicionais são conhecidos como padding e diversos formatos existem.

Muitos modos foram criados ao longo do tempo, vamos falar de alguns mais comuns.

Eletronic Codebook (ECB)

O modo mais simples. A mensagem é dividida em blocos e cada bloco é encriptado de forma separada.

Encriptação modo ECB.
Decriptação modo ECB.

A desvantagem desse modo é que, como cada bloco é encriptado da mesma forma, cada bloco idêntico vai ocasionar em um bloco crifado idêntico. Isso permite ainda descobrir o padrão da mensagem, o que, em alguns casos, não provê uma confidencialidade séria e não é recomendada o seu uso.

Cipher Block Chaining (CBC)

Nesse modo, cada bloco da mensagem original se junta com o bloco cifrado anterior através de uma operação XOR. Dessa forma, cada bloco cifrado depende do bloco anterior. Para fazer com que a mensagem seja única, um vetor de inicialização (IV) deve ser usado no bloco inicial.

Encriptação modo CBC.
Decriptação modo CBC.

Este modo é o mais comum entre os modos de operação. A principal desvantagem é que a encriptação é sequencial, ou seja, não pode ser paralelizada. A decriptação usando o IV errado vai causar com que somente o primero bloco seja incorreto. Isso é porque a operação XOR é da cifra do bloco anterior e não com o texto em claro, então não é necessário decriptar o bloco anterior para usar como IV no bloco atual.

Cipher Feedback (CFB)

Neste modo, parecido com o anterior CBC, a operação XOR é realizada após a operação de encriptação e se assemelha com o modo em stream.

Encriptação modo CFB.
Decriptação modo CFB.

Duas vantagens com relação ao CBC é que só é usada a direção de encriptação e que a mensagem não precisa ser completada (padding) para um tamanho múltiplo do bloco.

Output Feedback (OFB)

Este modo também funciona como uma operação de stream. Ao contrário do modo CFB, a saída do processo de encriptação é usada como vetor de inicialização do próximo bloco. O bloco cifrado é a operação XOR do bloco encriptado com o bloco em claro.

Encriptação modo OFB.
Decriptação modo OFB.

Cada operação deste modo depende da operação anterior, e portanto não pode ser feita em paralelo. Entretanto, como o texto em claro quanto a cifra só é usada no XOR final, as operações de blocos podem ser feitas previamente, permitindo que a operação final seja feita em paralelo.

Outros modos

Existem ainda outros modos de operação, tais como:

  • CTR (Counter): parecido com o modo OFB, mas utilizada um contador como a entrada do processo de encriptação. O contador é incrementado à cada operação.
  • XEX (XOR-Encrypt-XOR): permite o processamento de blocos consecutivos de forma eficiente. A entrada do processo de encriptação é a mensagem em claro XOR com uma chave. A cifra é a saída do processo de encriptação XOR com outra chave.
  • CMC (CBC-mask-CBC): cada bloco é encriptado duas vezes em modo CBC, o que aumenta o processamento.

Criptografia em stream

Estes modos representam uma trativa diferente do modo em bloco. Neste tipo de criptografia, os bits originais são combinados com uma série de bits de cifragem (chamados de fluxo de chave) vindos de um gerador de dígitos pseudo-aleatório. Normalmente esta combinação é feita através de uma operação XOR.

Essa chave pseudo-aleatoria é gerada normalmente a partir de uma semente usando registradores digitais. Estes algoritmos são normalmente mais rápidos que os de bloco, mas podem trazer problemas sérios de segurança se não usados corretamente.

Operação de geração de chave do A5/1, usada para encriptar conversas de telefone.

Algoritmos populares

Vamos falar rapidamente sobre alguns dos algoritmos de criptografia simétrica mais utilizados.

DES

Na era “moderna” da computação, o algortimo DES foi o primeiro a ser padronizado para a segurança de comunicação e usada em algumas variações (com 2 ou 3 chaves, conhecido como 3DES ou TDES). Esse algoritmo não é mais recomendado por ser considerado fraco, devido ao processamento dos computadores modernos.

AES

O algoritmo de criptografia simétrica mais utilizado hoje em dia, também conhecido como Rijndael. Ele pode ter chaves de tamanho 128, 192 ou 256 bits. Foi selecionada como padrão AES pelo governo americano em 1997 em um concurso para substituição do DES.

Salsa20

Algoritmo em stream desenvolvido em 2005 e aperfeiçoado em 2008 (variação ChaCha). É baseada em operações E-Rotação-XOR. Tamanho de chave de 256-bits. É usado em alguns sistemas para geração de números aleatórios.

RC4

O algoritmo Rivest Cipher 4 (RC4) é um algoritmo em stream desenvolvido em 1987. Apesar de ser bem simples e ter uma velocidade de processamento considerável, múltiplas vulnerabilidades foram descobertas e já não é mais recomendada. Utilizada em protocolos como WEP/WPA.

Conclusão

Neste artigo, vimos um pouco mais sobre a criptografia simétrica, seus diferentes modos de aplicação e alguns de seus principais algortimos. No próximo artigo, vamos falar sobre criptografia assimétrica.

--

--

Fernando Souza
Prognosys

Enthusiast of programming, electronics, technology and beer, not necessarily in that order. BuyMeACoffee: buymeacoffee.com/ustropo