Pular para o conteúdo principal

Criptografia de chave simétrica

Nesta lição vamos estudar a criptografia de chave simétrica, que protege boa parte dos dados em repouso e em trânsito graças à sua eficiência.

Ao final da lição, teremos abordado:

  • O que é criptografia de chave simétrica
  • Exemplos de código Python demonstrando o uso de criptografia de chave simétrica
  • Uma análise das aplicações da criptografia de chave simétrica
  • Aplicações da criptografia de chave simétrica
  • A segurança da criptografia de chave simétrica
  • Ameaças a esses algoritmos tanto por computadores clássicos quanto quânticos

Introdução à criptografia de chave simétrica

A criptografia de chave simétrica (SKC) é a forma mais antiga e intuitiva de criptografia. Com SKC, as informações confidenciais são protegidas por meio da criptografia de chave simétrica (SKE), ou seja, usando uma chave secreta única tanto para criptografia quanto para descriptografia.

A SKC envolve:

  • Uma função de criptografia que converte uma instância de texto simples em texto cifrado utilizando uma chave secreta
  • Uma função de descriptografia que inverte a operação convertendo o texto cifrado de volta ao texto simples usando a mesma chave secreta

O texto simples pode significar qualquer tipo de dado não criptografado, como texto em linguagem natural ou código binário cujo conteúdo informacional é, em princípio, diretamente acessível, enquanto texto cifrado se refere a dados criptografados cujo conteúdo informacional se destina a ser inacessível antes da descriptografia.

Um algoritmo que descreve as operações de criptografia e descriptografia usando uma chave secreta compartilhada também é chamado de cifra simétrica.

Fig 1: Criptografia simétrica de um dado texto simples para texto cifrado e descriptografia de volta ao texto simples usando a mesma chave.

Figura 1. Criptografia simétrica de um dado texto simples para texto cifrado e descriptografia de volta ao texto simples usando a mesma chave.

Propriedades dos criptossistemas de chave simétrica

Um criptossistema de chave simétrica deve garantir as seguintes propriedades para proteger mensagens — tanto dados armazenados estaticamente quanto comunicações em algum canal de transmissão:

  • Confidencialidade: Refere-se à propriedade de que o conteúdo informacional das mensagens criptografadas é protegido contra acesso não autorizado.
  • Integridade: Refere-se à propriedade de que qualquer adulteração de mensagens criptografadas durante armazenamento ou transmissão pode ser detectada.
  • Autenticidade: Refere-se à propriedade de que o receptor de uma mensagem pode verificar a identidade do remetente e detectar a personificação por uma parte não autorizada.

Além disso, essas propriedades devem ser realizadas em um contexto onde os algoritmos ou cifras usados para criptografia e descriptografia podem ser públicos e onde o acesso ao conteúdo informacional das mensagens criptografadas é controlado exclusivamente pelo acesso à chave secreta.

Implementar um criptossistema de chave simétrica seguro envolve portanto duas tarefas principais:

  1. Empregar um algoritmo de criptografia de chave simétrica robusto e resistente a ataques criptográficos.
  2. Garantir confidencialidade na distribuição e gerenciamento das chaves secretas.

Nesta lição, vamos discutir aspectos relacionados à primeira tarefa, que forma a principal preocupação da tecnologia SKC. A segunda tarefa, no entanto, requer soluções que estão fora do escopo da SKC e serão introduzidas posteriormente.

Demonstração de criptografia de chave simétrica em Python

Vamos mostrar um exemplo simples das operações de criptografia e descriptografia usando a clássica cifra de substituição de César e o moderno Advanced Encryption System (AES), que é o padrão para criptografia de chave simétrica desde 2001. Primeiro configuramos algumas bibliotecas Python que fornecem as cifras de criptografia de chave simétrica necessárias, e depois definimos o texto simples que desejamos criptografar.

# Added by doQumentation — required packages for this notebook
!pip install -q cryptography numpy secretpy
# Install the library if needed
# %pip install secretpy

# import the required crypto functions which will be demonstrated later
from secretpy import Caesar
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from functools import reduce
import numpy as np

# Set the plaintext we want to encrypt
plaintext = "this is a strict top secret message for intended recipients only"
print(f"\nGiven plaintext: {plaintext}")

Veremos como criptografar e descriptografar usando dois métodos diferentes de criptografia de chave simétrica:

  1. A clássica cifra de substituição de César
  2. O moderno protocolo Advanced Encryption Standard AES-256

Cifra de substituição de César:

A criptografia por substituição de César envolve definir:

  • Um alfabeto de possíveis caracteres a codificar
  • Um valor de deslocamento que pode estar entre 0 (sem criptografia) e o comprimento do alfabeto. Consideramos isso a chave.

É conhecida como uma cifra de substituição monoalfabética, pois cada letra do texto simples é substituída por outra no texto cifrado.

Neste exemplo usaremos letras minúsculas do alfabeto.

Vamos começar configurando tudo.

# initialize the required python object for doing Caesar shift encryption
caesar_cipher = Caesar()

# Define the shift, ie the key
caesar_key = 5
print(f"Caesar shift secret key: {caesar_key}")

# Define the alphabet
alphabet = (
"a",
"b",
"c",
"d",
"e",
"f",
"g",
"h",
"i",
"j",
"k",
"l",
"m",
"n",
"o",
"p",
"q",
"r",
"s",
"t",
"u",
"v",
"w",
"x",
"y",
"z",
" ",
)
print(f"alphabet: {alphabet}")

Criptografar o texto simples para obter o texto cifrado com a cifra de César.

caeser_ciphertext = caesar_cipher.encrypt(plaintext, caesar_key, alphabet)
print(f"Encrypted caeser shift ciphertext: {caeser_ciphertext}")

Descriptografar o texto cifrado de volta ao texto simples original usando a mesma chave usada na criptografia.

caeser_plaintext = caesar_cipher.decrypt(caeser_ciphertext, caesar_key, alphabet)
print(f"Decrypted caeser shift plaintext: {caeser_plaintext}\n")

Cifra Advanced Encryption Standard (AES)

Agora criptografamos o texto simples usando AES, um popular algoritmo de criptografia de chave simétrica.

Começamos criando a chave, neste caso, uma string aleatória de 16 letras.

# lambda defines an inline function in this case that takes two values a,b with the resulting expression of a+b
# reduce uses a two-argument function(above), and applies this to all the entries in the list (random alphabet characters) cumulatively
aes_key = reduce(lambda a, b: a + b, [np.random.choice(alphabet) for i in range(16)])

print(f"AES secret key: {aes_key}")

O AES suporta múltiplos modos de operação e requer que especifiquemos qual usar.

Escolhemos o modo Cipher Block Chaining (CBC) fornecido pela classe modes.CBC da biblioteca cryptography. O modo CBC do AES usa aleatoriedade para segurança adicional. Isso requer especificar um Vetor de Inicialização (IV) aleatório, também chamado de nonce. Usaremos também uma string aleatória para isso, assim como fizemos para a chave.

aes_initialization_vector = reduce(
lambda a, b: a + b, [np.random.choice(alphabet) for i in range(16)]
)
print(f"AES initialization vector: {aes_initialization_vector}")

Agora podemos instanciar uma cifra AES em nome do remetente da mensagem secreta. Note que o vetor de inicialização é passado para a classe modes.CBC para configurar o modo de operação CBC.

Em seguida, vamos criptografar o texto simples a ser enviado.

# The encryptor is setup using the key and CBC. In both cases we need to convert the string (utf-8) into bytes
sender_aes_cipher = Cipher(
algorithms.AES(bytes(aes_key, "utf-8")),
modes.CBC(bytes(aes_initialization_vector, "utf-8")),
)
aes_encryptor = sender_aes_cipher.encryptor()

# update can add text to encypt in chunks, and then finalize is needed to complete the encryption process
aes_ciphertext = (
aes_encryptor.update(bytes(plaintext, "utf-8")) + aes_encryptor.finalize()
)

# Note the output is a string of bytes
print(f"Encrypted AES ciphertext: {aes_ciphertext}")

Para descriptografar, vamos instanciar uma cifra AES em nome do receptor. Note que o receptor pretendido tem acesso tanto à chave secreta quanto ao vetor de inicialização, mas este último não precisa ser secreto.

# Similar setup of AES to what we did for encryption, but this time, for decryption
receiver_aes_cipher = Cipher(
algorithms.AES(bytes(aes_key, "utf-8")),
modes.CBC(bytes(aes_initialization_vector, "utf-8")),
)
aes_decryptor = receiver_aes_cipher.decryptor()

# Do the decryption
aes_plaintext_bytes = aes_decryptor.update(aes_ciphertext) + aes_decryptor.finalize()

# convert back to a character string (we assume utf-8)
aes_plaintext = aes_plaintext_bytes.decode("utf-8")

print(f"Decrypted AES plaintext: {aes_plaintext}")

Aplicações da criptografia de chave simétrica

Embora cifras clássicas como a cifra de César tenham caído em desuso há muito tempo, os modernos criptossistemas simétricos como o AES são implantados em uma ampla gama de aplicações, incluindo:

  1. Criptografia e descriptografia de dados: A SKC é amplamente usada para proteger dados confidenciais, sejam eles armazenados estaticamente em um dispositivo ou transmitidos por uma rede. Exemplos incluem proteção de credenciais de usuários, criptografia de mensagens de e-mail e proteção de transações financeiras, entre outros.

  2. Comunicação segura: Protocolos de comunicação comuns como SSL/TLS usam uma combinação de criptografia de chave simétrica e assimétrica para garantir a confidencialidade e integridade dos dados trocados entre duas partes. Essas mensagens são criptografadas e descriptografadas usando criptografia de chave simétrica com uma chave compartilhada. A chave usada na criptografia de chave simétrica é trocada de forma segura usando criptografia de chave assimétrica, que usa um par de chave pública-privada. A criptografia de chave simétrica é muito mais rápida e portanto pode ser usada para criptografia de mensagens de grande porte.

  3. Verificação de autenticidade: Em alguns contextos, a SKC é empregada por meio de técnicas como códigos de autenticação de mensagem (MACs) e MACs baseados em hash com chave (HMAC) para verificar a autenticidade e integridade das mensagens, garantindo comunicação resistente a adulterações.

  4. Criptografia de arquivos e discos: Softwares de criptografia de disco completo e ferramentas de criptografia de arquivos empregam SKC para proteger dados confidenciais armazenados em discos rígidos ou dispositivos de armazenamento portáteis.

  5. Redes privadas virtuais: Tecnologias de VPN, que visam fornecer canais de comunicação confidenciais livres de escutas, podem usar criptografia de chave simétrica ou assimétrica para conectar usuários remotos e redes corporativas.

A diversidade de aplicações em que a SKC é implantada exige que os criptossistemas simétricos satisfaçam um conjunto específico de critérios.

Princípios da criptografia de chave simétrica

Nesta seção, vamos discutir alguns dos princípios básicos subjacentes à segurança dos algoritmos de criptografia de chave simétrica.

Resistência a ataques de força bruta: O requisito mais básico para a segurança de uma cifra de criptografia é que o tamanho do espaço de chaves — em outras palavras, o número de possíveis chaves distintas entre as quais alguém usando o algoritmo poderia ter escolhido — seja muito grande.

Resistência a ataques criptanalíticos: O segundo requisito básico para uma cifra, simétrica ou não, é que ela possa gerar textos cifrados que sejam informativamente insondáveis. Para isso, uma condição necessária, mas não suficiente, da perspectiva da teoria da informação é que os textos cifrados devem ser caracterizados por alta entropia, tornando-os indistinguíveis de texto aleatório sem padrões ou correlações discerníveis. Dessa forma, um atacante não pode obter nenhuma informação sobre o texto simples ou a chave secreta tentando analisar o texto cifrado usando análise de frequência ou outras técnicas estatísticas.

A resistência a formas gerais de ataques criptanalíticos suficientes para garantir segurança semântica é formalizada por meio da noção de indistinguibilidade. Embora existam várias variantes de indistinguibilidade com requisitos distintos, um criptossistema simétrico é considerado semanticamente seguro se satisfizer o critério de Indistinguibilidade sob Ataque de Texto Simples Escolhido (IND-CPA). Isso significa que um atacante não pode distinguir entre as criptografias de duas mensagens diferentes, mesmo que seja permitido enviar vários textos simples de sua escolha para o algoritmo e visualizar os textos cifrados correspondentes.

Como consideraremos posteriormente, o IND-CPA normalmente requer o uso de aleatoriedade para garantir que cada vez que um determinado texto simples é criptografado com uma determinada chave secreta, o texto cifrado resultante seja imprevisível a cada criptografia.

Modos de falha das cifras clássicas: Antes do advento da criptografia moderna nos anos 1970, a maioria das cifras clássicas em uso prático não satisfazia um ou ambos os requisitos acima. Por exemplo, as primeiras cifras de substituição, como a cifra de substituição de César monoalfabética, eram caracterizadas tanto por um pequeno tamanho de espaço de chaves (veja a Tabela 1) quanto por texto cifrado de baixa entropia, tornando-as inseguras contra uma variedade de ataques criptanalíticos como ataques de força bruta, análise de frequência e ataques de texto simples conhecido (KPT).

Cifras de substituição polialfabéticas subsequentes, como a cifra de Vigenère e a cifra da máquina Enigma, apresentavam espaços de chave efetivamente grandes, tornando-as resistentes a ataques de força bruta, mas eram suscetíveis a análise de frequência e ataques KPT, respectivamente. Da mesma forma que as cifras de substituição, as cifras de transposição clássicas, que reorganizam as letras em uma mensagem em vez de substituí-las, também são comprometidas por uma variedade de ataques como anagramação, análise estatística, força bruta e ataques KPT, entre outros.

Teoricamente, uma cifra de substituição polialfabética conhecida como bloco de uso único (OTP) é conhecida por ser criptograficamente segura. Um OTP apresenta uma chave secreta que deve ser (1) composta de letras ou bits escolhidos aleatoriamente, (2) pelo menos tão longa quanto o texto simples original e (3) usada apenas uma vez. Um OTP é impraticável para aplicações reais porque se a chave secreta — que deve ser tão longa quanto o texto simples e só pode ser usada uma vez — pudesse ser compartilhada de forma segura, então o texto simples original também poderia ser. O OTP ilustra a utilidade da aleatoriedade na geração de textos cifrados seguros.

Um atacante tentando implementar uma busca de força bruta pelo espaço de chaves para encontrar uma chave que descriptografe a mensagem deve realizar um número de operações proporcional ao tamanho do espaço de chaves.

Portanto, um grande espaço de chaves fornece resistência contra ataques de força bruta tornando-os computacionalmente inviáveis. A Tabela 1 lista os tamanhos do espaço de chaves de algumas cifras bem conhecidas.

Tabela 1: Tamanhos do espaço de chaves de algumas cifras simétricas

CifraComprimento da chaveTamanho do espaço de chaves
Caeser shift1alphabet-size
Vigenerenalphabet-sizen^\mathrm{n}
One-time-padplaintext-lengthalphabet-sizeplaintextlength^\mathrm{plaintext-length}
DES56256^\mathrm{56}
AES-1281282128^\mathrm{128}
AES-1921922192^\mathrm{192}
AES-2562562256^\mathrm{256}
ChaCha202562256^\mathrm{256}
Os esquemas modernos de criptografia de chave simétrica superam amplamente as limitações das cifras clássicas. Eles produzem texto cifrado resistente à criptanálise e apresentam grandes espaços de chave, sendo ao mesmo tempo muito mais eficientes na prática do que um OTP.

Cifras de bloco: Uma classe de cifras modernas — como DES e AES — alcança segurança combinando os princípios de confusão e difusão originalmente introduzidos por Claude Shannon. Discutimos essas noções em um contexto onde os esquemas de criptografia trabalham com representações binárias de mensagens:

  • Confusão: Confusão é a característica pela qual cada bit no texto cifrado depende de múltiplos bits da chave secreta. Garante que uma pequena mudança na chave secreta modifica quase todos os bits do texto cifrado, obscurecendo a relação entre o texto cifrado e a chave secreta.

  • Difusão: Difusão é a característica pela qual inverter um único bit no texto simples deve modificar aproximadamente metade dos bits no texto cifrado e vice-versa. A difusão oculta relações estatísticas entre o texto simples e o texto cifrado. As cifras com difusão adequada satisfazem o chamado critério de avalanche da criptografia.

As cifras de bloco implementam confusão e difusão usando estruturas criptográficas conhecidas como redes de substituição-permutação (SPNs) operando em blocos discretos de dados. Uma SPN aceita um bloco de texto simples e a chave secreta como entradas e executa um número especificado de rodadas de transformações para produzir um bloco de texto cifrado. Cada rodada é composta de estruturas matemáticas alternadas conhecidas como caixas de substituição (S-boxes) e caixas de permutação (P-boxes) ou operações equivalentes.

Essas implementam respectivamente transformações não lineares complexas e lineares nos blocos de entrada, levando a efeitos de avalanche no texto cifrado.

As SPNs são projetadas de forma que aumentar o número de rodadas geralmente aumenta a segurança da cifra. Isso leva à noção de margem de segurança. Margem de segurança: A margem de segurança de uma cifra criptográfica baseada em SPN é a diferença entre o número de rodadas na implementação completa da cifra e o número máximo de rodadas que são conhecidas por serem quebráveis usando o melhor ataque conhecido no mundo real.

Por exemplo, atualmente os melhores ataques mais rápidos do que força bruta contra o AES-256 podem quebrar até 9 rodadas das 14 rodadas totais na cifra completa quando usada no modo padrão conhecido como modo Electronic Codebook (ECB). Portanto, atualmente a margem de segurança do AES-256 é de 5 rodadas.

Cifras de fluxo: Como alternativa às cifras de bloco, os criptólogos modernos também projetaram cifras de fluxo praticamente seguras, como o Chacha20. Essas cifras utilizam a aleatoriedade como parte fundamental de seu design e operam em fluxos de chave pseudoaleatórios de bits em vez de blocos discretos de dados.

Consequentemente, as cifras de fluxo combinam uma chave secreta e um vetor de inicialização (IV) para inicializar um gerador de números pseudoaleatórios (PRNG) para produzir um fluxo de chave de bits aleatórios que são então combinados com o texto simples fornecido para produzir o texto cifrado. Nesse sentido, as cifras de fluxo são semelhantes a um bloco de uso único (OTP) mas apresentam comprimentos de chave secreta mais curtos e chaves reutilizáveis, o que as torna mais práticas. No entanto, pela mesma razão, elas não garantem sigilo perfeito, ao contrário de um OTP.

Segurança semântica: Concluímos esta subseção retornando à noção de segurança semântica ou segurança de nível IND-CPA introduzida acima. As operações básicas implementadas por cifras de bloco, como S-box e P-box, são determinísticas. Isso significa que em modos de operação padrão como ECB, um dado par texto simples-chave sempre produz o mesmo texto cifrado, uma situação que é suscetível a ataques de texto simples escolhido.

Para alcançar segurança de nível IND-CPA, as cifras de bloco precisam operar em um modo que utilize aleatoriedade introduzida via um vetor de inicialização (IV) pseudoaleatório com o requisito adicional de que nenhuma operação de criptografia use o mesmo par chave-IV. O AES suporta vários modos de operação, como encadeamento de blocos de cifra (CBC), que são seguros no nível IND-CPA. Um requisito semelhante também se aplica às cifras de fluxo, onde o mesmo par chave-IV não deve ser usado para inicializar o PRNG mais de uma vez se IND-CPA for desejado.

Após introduzir alguns princípios básicos da SKC, listamos agora alguns algoritmos populares de chave simétrica para ilustrar a variedade de abordagens adotadas nos criptossistemas modernos. As modernas cifras de bloco e de fluxo são empregadas em diferentes contextos, como ilustrado abaixo.

  1. Advanced Encryption Standard: O AES, já introduzido acima, é atualmente o padrão de facto para SKC devido às suas características de segurança, eficiência e desempenho. O AES apresenta tamanhos de chave fixos de 128, 192 e 256 bits e usa uma rede de substituição-permutação (SPN) com múltiplas rodadas. O AES é conhecido por ser resistente a uma ampla gama de ataques criptanalíticos. O AES foi anunciado como um Federal Information Processing Standard (FIPS) para criptografia de chave simétrica nos Estados Unidos em 2001.`

  2. Data Encryption Standard (DES) e Triple Data Encryption Standard (3DES): O DES foi uma cifra de bloco originalmente inventada por Horst Feistel e colaboradores na IBM® nos anos 1970 e empregava uma SPN com uma chave relativamente curta de 56 bits. O DES foi adotado como um FIPS para criptografia de chave simétrica nos Estados Unidos até o final dos anos 1990, quando se demonstrou que ele podia ser quebrado usando ataques de força bruta com hardware especializado devido ao seu pequeno espaço de chaves. Posteriormente, o 3DES foi introduzido como substituto e aplica o algoritmo DES três vezes com chaves diferentes, aumentando o comprimento da chave para 168 bits. No entanto, o 3DES foi amplamente substituído pelo AES.

  3. Blowfish e Twofish: Blowfish e seu sucessor, Twofish, são cifras de bloco propostas pelo criptógrafo Bruce Schneier nos anos 1990. Blowfish e Twofish permitem comprimentos de chave variáveis de até 448 bits e 256 bits respectivamente, oferecendo alguma flexibilidade no tradeoff entre segurança e desempenho. Ao contrário do AES, eles também apresentam S-boxes dependentes da chave. O Twofish foi um dos finalistas na competição do NIST para selecionar o Advanced Encryption Standard, mas por fim não foi escolhido. Ambos os algoritmos são atualmente considerados seguros.

  4. Cifras Rivest (RC2, RC4, RC5 e RC6): A família de algoritmos de chave simétrica Rivest Cipher (RC) foi projetada por Ron Rivest a partir dos anos 1980. O RC2 foi uma cifra de bloco de 64 bits inicial enquanto o RC4 era uma cifra de fluxo amplamente usada em protocolos de segurança relacionados ao tráfego web devido à sua simplicidade e velocidade. Nenhum dos dois é atualmente considerado seguro. RC5 e RC6 são cifras de bloco baseadas em SPN projetadas com tamanho de bloco, tamanho de chave e número de rodadas customizáveis. Como o Twofish acima, o RC6 foi um finalista na competição NIST AES e é considerado seguro.

  5. Salsa20 e ChaCha20: Salsa20 e ChaCha20 referem-se a uma família relacionada de cifras de fluxo projetadas pelo criptógrafo Daniel Bernstein nos anos 2000. O Salsa20 faz parte do portfólio de perfil-1 do projeto de validação criptográfica eSTREAM da União Europeia. O ChaCha20, uma modificação do Salsa20, foi projetado para aumentar as características de difusão e o desempenho. Atualmente, o ChaCha20 é considerado seguro e oferece melhor desempenho na ausência de aceleração de hardware dedicada para AES. Portanto, o ChaCha20 encontra uso em certos contextos, como protocolos de rede como QUIC e dispositivos móveis com CPUs baseadas em ARM.

Vantagens da criptografia de chave simétrica

Após descrever as propriedades dos criptossistemas de chave simétrica e alguns dos princípios que fundamentam seu desenvolvimento, listamos agora algumas das principais vantagens da SKC em relação à criptografia de chave assimétrica. Esta última será discutida em lições subsequentes.

  1. Velocidade e eficiência: Os algoritmos de chave simétrica são mais adequados para criptografar grandes volumes de dados ou para uso em cenários de comunicação em tempo real, pois geralmente são mais rápidos e menos intensivos em recursos do que seus equivalentes assimétricos. Algoritmos SKC como o AES escalam linearmente com o tamanho do texto simples e não envolvem operações matemáticas algebricamente intensivas. Veja Tomoiaga et al. para uma revisão detalhada das características de desempenho do AES.

  2. Escalabilidade: Devido ao seu overhead computacional relativamente baixo, os algoritmos de chave simétrica escalam bem com o número de usuários e a quantidade de dados sendo criptografados.

  3. Simplicidade: Os protocolos de criptografia simétrica são frequentemente mais fáceis de implementar e entender do que as abordagens de chave assimétrica, tornando-os atraentes para desenvolvedores e usuários.

Desafios e limitações da criptografia de chave simétrica

Apesar das vantagens, a criptografia de chave simétrica também tem alguns desafios e limitações:

  1. Distribuição e gerenciamento de chaves: Na SKC, tanto o remetente quanto o receptor de uma mensagem devem ter acesso à mesma chave, que deve ser mantida confidencial de partes não autorizadas. Se a chave for de alguma forma interceptada ou comprometida por terceiros, a segurança dos dados criptografados também é perdida. A distribuição e o gerenciamento seguros da chave secreta são, portanto, um grande desafio. No entanto, a solução para este desafio está fora do escopo da própria SKC.

  2. Falta de não repúdio: O não repúdio refere-se à capacidade de provar que uma parte específica enviou uma mensagem. Na SKC, como a mesma chave é usada tanto para criptografia quanto para descriptografia, não é possível determinar qual parte criou um determinado texto cifrado. Em contraste, a criptografia de chave assimétrica fornece não repúdio por meio do uso de assinatura digital.

Para abordar esses desafios, a criptografia de chave simétrica é frequentemente usada em combinação com a criptografia de chave assimétrica. Por exemplo, frequentemente se usa a criptografia de chave assimétrica para transmitir de forma segura uma chave secreta compartilhada relativamente curta entre remetente e receptor. Isso permite o uso subsequente da criptografia de chave simétrica para transmitir dados e mensagens muito maiores de forma eficiente.

Computação quântica e criptografia de chave simétrica: riscos e mitigação

A criptografia quântica oferece uma via promissora para a mitigação de riscos na era digital, com a adoção de produtos quânticos seguros prontos para proteger nossas informações contra a crescente ameaça dos avanços da computação quântica.

A seguir, discutimos os riscos apresentados pelos computadores quânticos aos esquemas de criptografia de chave simétrica introduzidos na seção anterior e delineamos alguns caminhos potenciais para mitigar os riscos.

Ataques criptográficos quânticos

Existem duas classes distintas de ameaças quânticas aos algoritmos criptográficos tradicionais:

  1. Ataques de força bruta quântica: Referem-se a situações onde o atacante usa um computador quântico para executar um algoritmo quântico especializado para realizar uma busca de força bruta pelo espaço de chaves de uma cifra simétrica. A primitiva quântica mais relevante para possibilitar esse tipo de ataque é o algoritmo de Grover.

  2. Ataques criptanalíticos quânticos: Referem-se a situações onde computadores quânticos são implantados para executar ataques criptanalíticos que visam recuperar a chave secreta ou o texto simples de forma mais eficiente do que uma busca de força bruta. A possibilidade de executar ataques criptanalíticos quânticos bem-sucedidos depende de muitos fatores relacionados à estrutura matemática da cifra sendo analisada, bem como a possíveis fraquezas em implementações específicas.

Estratégias de mitigação de risco para ataques quânticos

Antes de discutir estratégias de mitigação de risco para ataques quânticos, vamos introduzir a noção de nível de segurança de uma cifra criptográfica:

Nível de segurança é uma medida da dificuldade de quebrar uma cifra, medida em termos do número de operações computacionais que uma quebra bem-sucedida da cifra exigiria.

Tipicamente, o nível de segurança é expresso em bits; ou seja, em geral, uma cifra oferece segurança de N bits se forem necessárias O(2N)\mathcal{O}(2^{N}) operações para quebrá-la. Em computadores clássicos, assumindo que uma cifra simétrica é de outra forma criptograficamente segura, o nível de segurança é aproximadamente sinônimo do comprimento da chave.

Por exemplo, o nível de segurança do AES-128, que apresenta uma chave de 128 bits, é geralmente considerado como 128 bits porque exigiria na ordem de 2128^{128} operações para um atacante empregando um computador clássico para experimentar todas as possíveis chaves de 128 bits no espaço de chaves.

Ataques de força bruta e mitigação

Risco de ataque de força bruta quântica: Um ataque de força bruta quântica muda a avaliação acima porque o algoritmo de Grover permite que um atacante com um computador quântico adequado pesquise o espaço de chaves de uma cifra quadraticamente mais rápido do que qualquer computador clássico.

Por exemplo, o mesmo ataque de força bruta no AES-128 com o algoritmo de Grover poderia potencialmente ser alcançado com apenas 264^{64} operações. Portanto, o nível de segurança do AES-128 é reduzido de 128 bits para 64 bits quando confrontado com um adversário quântico executando a busca de Grover. Como o poder computacional historicamente cresceu exponencialmente com o tempo, atualmente um nível de segurança de 64 bits é considerado inseguro, o que significa que, uma vez que computadores quânticos suficientemente capazes sejam realizados, o AES-128 terá que ser abandonado.

O mesmo tipo de cálculo se aplica a outras cifras simétricas de bloco ou de fluxo, em que o nível de segurança para um determinado comprimento de chave é efetivamente reduzido à metade pelo algoritmo de Grover.

Mitigação do risco de ataque de força bruta quântica: As considerações acima implicam que uma maneira óbvia de resistir a ataques de força bruta quântica é pelo menos dobrar os comprimentos mínimos de chave usados para criptografia de chave simétrica.

Portanto, para garantir segurança de 128 bits com relação a ataques de força bruta quântica, basta usar cifras como AES-256 ou ChaCha20 que empregam chaves de 256 bits. Isso é considerado seguro porque mesmo com computadores quânticos, realizar 2128^{128} operações para quebrar cifras é inviável no futuro previsível.

Embora teoricamente simples, essa solução proposta de dobrar tamanhos de chave não está sem custos, pois tamanhos de chave maiores implicam custo computacional adicional para tarefas rotineiras de criptografia-descriptografia, além de desempenho mais lento, maior requisito de memória e uso adicional de energia.

Ataques criptanalíticos e mitigação

Risco de ataques criptanalíticos quânticos: O risco aos criptossistemas de chave simétrica apresentado por ataques criptanalíticos quânticos está atualmente sendo ativamente pesquisado por criptógrafos. A combinação de computação clássica e quântica potencialmente expande o conjunto de ferramentas disponíveis para os atacantes investigarem fraquezas na estrutura matemática das cifras, e uma ampla gama de novos ataques criptanalíticos quânticos estão sendo propostos. Estes incluem quantizações de técnicas clássicas conhecidas como criptanálise linear e diferencial, bem como novos modos de ataque sem contrapartes clássicas.

Um recente estudo criptanalítico quântico do Advanced Encryption Standard (AES) descobriu que a cifra permaneceu resistente a vários ataques criptanalíticos quânticos conhecidos e continuou a exibir uma margem de segurança pós-quântica adequada. No entanto, alguns estudos descobriram que várias cifras simétricas consideradas classicamente seguras são facilmente comprometidas pelo chamado ataque de texto simples escolhido quântico. Portanto, novas primitivas para criptografia de chave simétrica projetadas especificamente para a era pós-quântica também foram propostas.

Mitigação do risco de ataques criptanalíticos quânticos: Dado que a criptanálise quântica como disciplina está em seus estágios iniciais, pode ser o caso de que a criptografia simétrica pós-quântica passe por uma evolução rápida à medida que novos ataques criptanalíticos quânticos surjam e novas cifras resistentes a eles sejam propostas e avaliadas. Portanto, a melhor estratégia para mitigar o risco de ataques criptanalíticos quânticos no futuro previsível é a agilidade criptográfica (ou cripto-agilidade). A cripto-agilidade refere-se à capacidade de um sistema de informação de adotar rápida e facilmente primitivas criptográficas alternativas sem mudanças disruptivas na infraestrutura do sistema.

A cripto-agilidade requer a capacidade de substituir algoritmos obsoletos usados para criptografia, descriptografia, assinaturas digitais ou outras funções criptográficas com esforço e disrupção mínimos. Sistemas cripto-ágeis estarão bem posicionados para gerenciar a transição para a criptografia de chave simétrica pós-quântica.

Resumo

A criptografia de chave simétrica fornece soluções robustas e eficientes para proteger informações digitais. A simplicidade de usar a mesma chave tanto para criptografia quanto para descriptografia permite alto desempenho e escalabilidade, tornando a SKC adequada para uma ampla gama de aplicações.

A segurança da SKC depende da resistência algorítmica a ataques criptográficos, bem como do gerenciamento adequado da chave secreta. Os criptossistemas de chave simétrica modernos combinam os princípios de confusão, difusão e aleatoriedade, em conjunto com tamanhos de chave adequados, para alcançar segurança semântica. O gerenciamento da chave secreta, embora crucial, não pode ser alcançado apenas com a SKC.

Entender as propriedades e limitações da SKC permitirá que os desenvolvedores projetem, implementem e implantem soluções seguras de tecnologia da informação usando abordagens que incluem tamanhos de chave maiores conforme necessário, e o uso de novos algoritmos.

O avanço da computação quântica e do aprendizado quântico introduz uma nova dimensão na criptografia de chave simétrica. Os computadores quânticos têm o potencial de desfazer a segurança fornecida pelos algoritmos clássicos de chave simétrica, criando a necessidade de abordagens criptográficas resistentes a quantum para garantir a privacidade e proteção dos dados diante de paisagens tecnológicas em evolução.