O que é uma cifra de bloco e como ela funciona para proteger seus dados? | CRYPTOID
A criptografia é a ciência de usar códigos e cifras para proteger mensagens
Por Megan Kaczanowski
A criptografia envolve a codificação de mensagens de forma que apenas o destinatário pretendido possa entender o significado da mensagem.
Geralmente a codificação de mensagens é usada para proteger dados em trânsito.
A criptografia é uma função bidirecional – ou seja, você precisa ser capaz de desfazer qualquer embaralhamento que tenha feito na mensagem.
Hoje, existem dois tipos básicos de algoritmos – simétricos e assimétricos.
Os algoritmos simétricos também são conhecidos como algoritmos de 'chave secreta' e os algoritmos assimétricos são conhecidos como algoritmos de 'chave pública'.
A principal diferença entre os dois é que os algoritmos simétricos usam a mesma chave para criptografar e descriptografar, enquanto os algoritmos assimétricos usam chaves diferentes para criptografar e descriptografar.
Quais princípios são importantes quando você está desenvolvendo uma cifra?
O princípio de Kerckhoff afirma que um sistema criptográfico deve ser seguro, mesmo se todos os detalhes (exceto a chave) forem conhecidos publicamente. Claude Shannon mais tarde reescreveu esta mensagem como 'O inimigo conhece o sistema.'
Essencialmente, um sistema muito bem projetado deve ser capaz de enviar mensagens secretas mesmo se um invasor puder criptografar e descriptografar suas próprias mensagens usando o mesmo algoritmo (com uma chave diferente). A segurança da mensagem criptografada deve depender inteiramente da chave.
Além disso, para dificultar a análise estatística (tentativas de quebrar um algoritmo de criptografia), um bom sistema criptográfico deve empregar os princípios de confusão e difusão.
A confusão exige que a chave não se relacione com o texto cifrado de maneira simples. Cada caractere do texto cifrado deve depender de várias partes da chave. O objetivo é tornar muito difícil para um invasor determinar a chave do texto cifrado.
Difusão significa que, se um único caractere do texto simples for alterado, vários caracteres do texto cifrado deverão ser alterados. E se um único caractere do texto cifrado for alterado, vários caracteres do texto simples deverão ser alterados.
Idealmente, a relação entre o texto cifrado e o texto simples é oculta. Nenhuma difusão é perfeita (todos terão alguns padrões), mas a melhor difusão espalha os padrões amplamente, até mesmo misturando vários padrões.
A difusão torna os padrões difíceis de serem detectados por um invasor e exige que o invasor tenha mais dados para montar um ataque bem-sucedido.
Se você quiser ler mais sobre isso, dê uma olhada em A Mathematical Theory of Cryptography .
O que são cifras de bloco e de fluxo?
As cifras de bloco e de fluxo são cifras de chave simétricas (como DES, RCx, Blowfish e Rijndael AES). As cifras de bloco convertem texto simples em texto cifrado bloco a bloco, enquanto as cifras de fluxo convertem um byte de cada vez.
A maioria dos algoritmos simétricos modernos são cifras de bloco, embora os tamanhos dos blocos variem (como DES (64 bits), AES (128, 192 e 256 bits) e assim por diante).
Qual é a vantagem de uma cifra de fluxo?
A criptografia de fluxo é mais rápida (linear no tempo) e constante no espaço. É improvável que propague erros, pois um erro na tradução de um byte não afetará o próximo byte.
No entanto, há pouca difusão, pois, um símbolo de texto simples é traduzido diretamente para um símbolo de texto cifrado. Além disso, o texto cifrado é suscetível a inserções ou modificações. Se um invasor conseguir quebrar o algoritmo, ele poderá inserir um texto que pareça autêntico.
Você normalmente usa uma cifra de fluxo quando a quantidade de texto simples é desconhecida (como streaming de áudio ou vídeo) ou quando o desempenho extremo é importante (como conexões de alta velocidade, ou para dispositivos que precisam ser muito eficientes e compactos, como cartões inteligentes)
Uma cifra de fluxo funciona gerando uma série de bytes pseudoaleatórios que dependem da chave (para qualquer chave, a série de bytes é a mesma para criptografia e descriptografia). Chaves diferentes produzirão sequências de bytes diferentes.
Para criptografar os dados, os bytes de texto simples são submetidos a XOR com a sequência de bytes pseudoaleatórios. Para descriptografar, o texto cifrado é XORed com a mesma string para ver o texto simples.
Qual é a vantagem de uma cifra de bloco?
Também é bastante difícil para um invasor inserir símbolos sem detecção, porque eles não podem inseri-los facilmente no meio de um bloco.
No entanto, é mais lento do que uma cifra de fluxo (um bloco inteiro precisa ser transmitido antes que a criptografia / descriptografia possa acontecer) e se ocorrer um erro, ele pode se propagar por todo o bloco, corrompendo toda a seção.
As cifras de bloco são uma escolha melhor quando você sabe o tamanho da transmissão – como na transferência de arquivos.
Quais são os modos comuns de Block Ciphers?
Para criptografar dados maiores do que um único bloco, vários 'modos' foram desenvolvidos. Descrevem como aplicar os princípios de bloco único a mensagens mais longas.
Existem 5 modos de confidencialidade para cifras de bloco. Alguns desses modos requerem um vetor de inicialização (IV) para funcionar.
O que é um vetor de inicialização (IV)?
Um IV é essencialmente apenas outra entrada (além do texto simples e da chave) usada para criar o texto cifrado. É um bloco de dados, usado por vários modos de cifras de bloco para randomizar a criptografia, de modo que diferentes textos cifrados sejam criados, mesmo que o mesmo texto simples seja criptografado repetidamente.
Geralmente não precisa ser secreto, embora não possa ser reutilizado. Idealmente, deve ser aleatório, imprevisível e descartável.
Duas das mesmas mensagens criptografadas com a mesma chave, mas diferentes IVs, resultarão em diferentes textos cifrados. Isso torna o trabalho do invasor mais difícil.
Modo Livro de Código Eletrônico (BCE)
Existe um mapeamento fixo entre os blocos de entrada de texto simples e os blocos de saída de texto cifrado (essencialmente como um livro de código real, onde as palavras do texto cifrado se relacionam diretamente com as palavras do texto simples).
O ECB aplica a função de cifra independentemente a cada bloco de texto simples para criptografá-lo (e a função inversa a cada bloco de texto cifrado para descriptografá-lo). Isso significa que o CBC pode criptografar e descriptografar vários blocos em paralelo (uma vez que eles não dependem um do outro), agilizando o processo.
Para que esse modo funcione corretamente, o comprimento da mensagem precisa ser um múltiplo do tamanho do bloco ou você precisa usar preenchimento para que a condição de comprimento seja atendida.
Preenchimento são essencialmente dados extras adicionados para garantir que o tamanho do bloco seja atendido. Com este modo, dada a mesma chave, o mesmo bloco de texto simples sempre resultará no mesmo bloco de texto cifrado. Isso o torna vulnerável a ataques, portanto, esse modo raramente é usado (e deve ser evitado).
Modo de encadeamento de blocos de criptografia (CBC)
Este modo 'encadeia' ou combina novos blocos de texto simples com o bloco de texto cifrado anterior ao criptografá-los, o que requer um IV para o primeiro bloco. O IV não precisa ser secreto, mas precisa ser imprevisível.
CBC ors exclusivos (XORs) o primeiro bloco de texto simples com o bloco de texto cifrado IV para criar o primeiro bloco de texto cifrado. O IV é enviado separadamente como uma mensagem curta usando o modo ECB.
Em seguida, o CBC aplica o algoritmo de criptografia ao bloco, criando o primeiro bloco de texto cifrado. O CBC então aplica um XOR a este bloco com o segundo bloco de texto simples e aplica o algoritmo de criptografia para produzir o segundo bloco de texto cifrado e assim por diante até o final da mensagem.
Para descriptografar a mensagem, o CBC faz o inverso – aplica o inverso do algoritmo de criptografia ao primeiro bloco de texto cifrado e, em seguida, executa um XOR no bloco com o IV para obter o primeiro bloco de texto simples.
CBC então aplica o inverso do algoritmo de criptografia ao segundo bloco de texto cifrado e XORs o bloco com o primeiro bloco de texto cifrado para obter o segundo bloco de texto simples. Esse processo continua até que a mensagem seja descriptografada.
Como cada bloco de entrada (exceto o primeiro) depende da criptografia do bloco anterior, o CBC não pode executar a criptografia em paralelo. No entanto, uma vez que a descriptografia requer XORing com os blocos de texto cifrado (imediatamente disponíveis), ela pode ser feita em paralelo. CBC é um dos modos mais comumente usados.
Da mesma forma que o ECB, para que esse modo funcione corretamente, o comprimento da mensagem precisa ser um múltiplo do tamanho do bloco ou você precisa usar preenchimento para que a condição de comprimento seja atendida.
Modo de feedback de cifra (CFB)
O CFB é semelhante ao CBC, mas em vez de usar todo o bloco de texto cifrado anterior para calcular o próximo bloco, o CFB usa uma fração do bloco anterior.
O CFB começa com um IV do mesmo tamanho de bloco esperado pela cifra de bloco e o criptografa com o algoritmo de criptografia.
CFB retém s (significativos) bytes dessa saída e os XORs com s bytes de texto simples a serem transmitidos.
Em seguida, o CFB desloca os bytes IV s para a esquerda, inserindo os bytes de texto cifrado produzidos pela etapa 2 como bytes à direita (IV permanece com o mesmo comprimento).
Em seguida, ele repete essas etapas.
Para descriptografar uma mensagem, o CFB usa o IV como o primeiro bloco e forma cada bloco seguinte executando a etapa 3 acima e aplicando o algoritmo de criptografia para formar os blocos. CFB então XORs s mordidas com o texto cifrado correspondente para revelar o texto simples.
Dentro do CFB, o sistema de criptografia processa s <b bits de texto simples por vez, embora o próprio algoritmo execute a transformação de b-bits em b-bits. Isso significa que s pode ser qualquer número, incluindo 1 byte e o CFP pode funcionar funcionalmente como uma cifra de fluxo.
Infelizmente, isso significa que o CFB pode propagar erros downstream. Se um byte for recebido com um erro, quando o CFB o usar para descriptografar o primeiro byte, ele produzirá uma descriptografia incorreta, causando erros de downstream quando realimentado na descriptografia.
Como o CBC, quando o CFB criptografa, a entrada para cada rodada depende do resultado da rodada anterior, o que significa que a criptografia não pode ser feita em paralelo, embora a descriptografia possa ser realizada em paralelo se os blocos de entrada forem criados primeiro a partir do IV e do texto cifrado.
Feedback de saída (OFB)
OFB é semelhante ao CFB, mas em vez de processar s <b bits em uma transformação de b-bits em b-bits, ele processa s bits diretamente. Da mesma forma que o CFB, o OFB pode ser usado funcionalmente como uma cifra de fluxo.
OFB requer que o IV seja um nonce único (número usado uma vez) para cada execução com uma determinada chave.
Primeiro, o OFB criptografa o IV com o algoritmo de criptografia para produzir um bloco de saída. OFB então realiza um XOR neste bloco com o primeiro bloco de texto simples, produzindo o primeiro bloco de texto cifrado.
OFB criptografa o primeiro bloco de saída com o algoritmo de criptografia para produzir o segundo bloco de saída. Em seguida, aplica um XOR a este bloco com o segundo bloco de texto simples para produzir o segundo bloco de texto cifrado. O OFB repete esse processo para o comprimento da mensagem.
Ao descriptografar, o OFB criptografa o IV com o algoritmo de criptografia, produzindo um bloco de saída. OFB então realiza um XOR neste bloco com o primeiro bloco de texto cifrado, recuperando o primeiro bloco de texto simples.
OFB criptografa o primeiro bloco de saída com o algoritmo de criptografia para produzir o segundo bloco de saída. OFB, então, realiza um XOR com o segundo bloco de texto cifrado para recuperar o segundo bloco de texto simples. O OFB repete esse processo para o comprimento da mensagem.
Como os blocos de saída para descriptografia são gerados localmente, OFB é mais resistente a erros de transmissão do que CFB.
O CTR aplica o algoritmo de criptografia a um conjunto de blocos de entrada exclusivos (contadores) para produzir saídas que são XORed com o texto simples para produzir texto cifrado.
O CTR criptografa o primeiro contador com o algoritmo de criptografia e, em seguida, XORs a saída resultante com o primeiro bloco de texto simples para produzir o primeiro bloco de texto cifrado. CTR repete isso para cada bloco (com um novo contador – os contadores devem ser exclusivos em todas as mensagens criptografadas usando uma única chave).
Se o bloco final for um bloco parcial de s bytes, os bits mais significativos, s, do bloco de saída são usados ​​para o XOR, enquanto os bytes b – s do bloco de saída são descartados.
A descriptografia segue o mesmo padrão. O CTR criptografa o contador com o algoritmo de criptografia e, em seguida, XORs a saída com o bloco de texto cifrado correspondente para produzir o bloco de texto simples.
O CTR demonstrou ser pelo menos tão seguro quanto os outros quatro modos, além de poder ser executado em paralelo (criptografia e descriptografia), o que significa que é muito rápido.
Cada bloco pode ser recuperado independentemente se seu bloco contador pode ser determinado e a criptografia pode ser aplicada aos contadores antes de receber o texto simples ou texto cifrado (se a memória não for restrição).
Leitura Adicional: Recomendação NIST para Modos de Operação de Cifra de Bloco
Como os invasores tentam quebrar as cifras?
Existem várias técnicas que os invasores usam, mas elas se enquadram amplamente nas seguintes categorias de ataque, com base nas informações necessárias para executá-lo.
Esta não é uma lista completa (existem outros ataques, como ataques de canal lateral), mas muitos dos mais comuns se enquadram em uma dessas categorias.
Ataque de texto cifrado conhecido
Um invasor possui algum texto cifrado, mas não sabe qual texto simples foi usado para gerar esse texto cifrado. O invasor não consegue escolher qual texto cifrado possui e não pode obter / produzir mais.
Este é o tipo de ataque mais fácil de tentar, já que é mais fácil espionar uma conversa criptografada (já que presumivelmente as pessoas que estão conversando estão usando criptografia forte e não estão tão preocupadas com bisbilhoteiros). Mas é o mais difícil de ser bem-sucedido, desde que as pessoas que enviam as mensagens usem criptografia forte de forma adequada.
Por exemplo: David encontra uma mensagem criptografada (texto cifrado) em um local morto, mas não tem ideia do que a mensagem significa.
Ataque de texto simples conhecido
Um invasor tem alguns pares de texto simples e de texto cifrado que não escolheu (portanto, o invasor não escolheu a mensagem que foi criptografada, mas conseguiu roubar uma mensagem de texto simples e seu texto cifrado associado). O invasor não pode obter / produzir mais pares.
Por exemplo: David encontra o esconderijo de um espião inimigo e o interrompe enquanto ele envia uma mensagem criptografada. O espião é tolo o suficiente para ter fugido, deixando a mensagem em texto simples e o texto cifrado associado anotados.
Ataque de texto simples escolhido
Um invasor pode escolher qualquer texto simples e obter o texto cifrado em troca (mas não pode ver a própria chave).
Isso é dividido em texto simples escolhido em lote (onde o invasor pode enviar um conjunto de textos simples e receber o texto cifrado, mas não pode fazer isso novamente) e texto simples escolhido adaptável (onde o invasor pode enviar texto simples, receber o texto cifrado e enviar texto simples adicional com base no texto cifrado anterior.)
Por exemplo: um estado-nação está espionando a comunicação criptografada de outro e sabe que usa a mesma chave para toda a criptografia. Eles enviam uma comunicação diplomática sensível para o outro estado-nação, sabendo que ela será transmitida por meio do canal criptografado, dando a eles um texto simples escolhido – par de texto cifrado.
Ataque de texto cifrado escolhido
Este é o oposto do último ataque, onde o invasor pode escolher qualquer texto cifrado e obter o texto simples em troca (mas não consegue ver a própria chave).
Por exemplo: David sabe que um espião inimigo enviará uma mensagem criptografada amanhã, então ele substitui o texto pelo seu próprio texto cifrado escolhido, então espia o destinatário, ouvindo enquanto eles leem o texto simples da mensagem.
Fontes / leituras adicionais:
Recomendações NIST para modos de operação de codificação em bloco
Difusão e confusão
Confusão e Difusão
Princípio de Kerckhoffs
Mecanismos de enchimento
Fundamentos da ciência da computação: criptografia de fluxo e bloco
Fonte: Freecodecamp.org
Sobre Megan Kaczanowski
"I'm a threat intelligence analyst for S&P Global, focused on delivering curated, actionable intelligence to stakeholders throughout the organization. Previously I worked in financial services as an analyst. While I loved the intellectual rigor of the work, I've always been deeply passionate about the fast-paced nature of cybersecurity, and when I had the opportunity to combine those two passions, I knew that I had found a long-lasting career."
Se você quiser colaborar para melhorar a tradução, por favor escreva para nós, redacao@cryptoid.com.br.