Em criptografia, uma cifra de bloco é um algoritmo determinístico que opera sobre agrupamentos de bits de tamanho fixo, chamados de blocos, com uma transformação invariável que é especificada por uma chave simétrica. Cifras de bloco são componentes elementares importantes na concepção de muitos protocolos de criptografia, e são amplamente utilizados para implementar a encriptação de dados em massa.
O projeto moderno de cifras de bloco baseia-se no conceito de uma cifra de produto iterada. Cifras de produto foram sugeridas e analisadas por Claude Shannon em sua publicação seminal de 1949 "Teoria da Comunicação de Sistemas Secretos" (Communication Theory of Secrecy Systems em inglês) como um meio para efetivamente melhorar a segurança através da combinação de operações simples, tais como substituições e permutaçõeshttp://netlab.cs.ucla.edu/wiki/files/shannon1949.pdf. Cifras de produto iteradas realizam encriptação em várias rodadas, cada uma das quais utiliza uma subchave diferente derivada da chave original. Uma aplicação bem difundida de tais cifras é chamada de Rede de Feistel, em homenagem a Horst Feistel, e notavelmente implementada na cifra DES. Muitas outras realizações de cifras de bloco, como a AES, são classificadas como redes de substituição-permutação.
A publicação da cifra DES pelo Escritório de Padrões Nacional dos EUA (agora Instituto Nacional de Padrões e Tecnologia, NIST) em 1977 foi fundamental para a compreensão do público sobre a concepção moderna de cifra de bloco. Da mesma forma, influenciou o desenvolvimento acadêmico dos ataques de criptoanálise. Ambas criptoanálise diferencial e linear surgiram a partir de estudos sobre a concepção DES. Hoje, há uma miríade de técnicas de ataque contra os quais uma cifra de bloco deve ser segura, além de ser robusta contra ataques de força bruta.
Até mesmo uma cifra de bloco segura é adequada apenas para a encriptação de um único bloco sob uma chave fixa. Uma multitude de modos de operação foram projetados para permitir a sua utilização repetida de forma segura, comumente para alcançar as metas de segurança de confidencialidade e autenticidade. No entanto, as cifras de bloco também podem ser usadas como blocos de construção em outros protocolos criptográficos, como funções de dispersão universais e geradores de números pseudoaleatórios.
Definição Uma cifra de bloco consiste de dois algoritmos emparelhados, um para encriptação, E, e outro para a decriptação, D. Ambos os algoritmos aceitam duas entradas: um bloco de entrada de n bits de tamanho e uma chave de tamanho k bits; e ambos produzem um bloco de saída de n bits. O algoritmo de decriptação D é definido como sendo o inverso da função de encriptação, isto é, D = E-1. Mais formalmentehttp://www.cs.ucdavis.edu/~rogaway/classes/227/spring05/book/main.pdf, uma cifra de bloco é especificada por uma função de encriptação
que toma como entrada uma chave K de comprimento k bits, chamado de tamanho da chave, e uma cadeia de bits P de comprimento n, chamado de tamanho do bloco, e retorna uma cadeia de caracteres C de n bits. P é chamada de purotexto, e C é denominada de cifrotexto. Para cada K, exige-se que a função EK(P) seja um mapeamento inversível sobre {0,1}n. O inverso para E é definido como uma função
tomando uma chave K e um cifrotexto C para retornar um valor de purotexto P, tal que
Por exemplo, um algoritmo de encriptação de cifra de bloco pode tomar um bloco de 128 bits de purotexto como entrada e produzir um bloco de cifrotexto correspondente de 128 bits. A transformação exata é controlada usando uma segunda entrada - a chave secreta. Decriptação é semelhante: o algoritmo de decriptação toma, neste exemplo, um bloco de texto cifrado, juntamente com a chave secreta de 128 bits, e produz o bloco 128-bit original de purotexto.
Para cada chave K, EK é uma permutação (um mapeamento bijetivo) sobre o conjunto de blocos de entrada. Cada chave seleciona uma permutação do conjunto de possibilidades .
Projeto
Cifras de bloco iteradas A maioria dos algoritmos de cifra de bloco são classificados como cifras de bloco iteradas, o que significa que transformam blocos de purotexto de tamanho fixo em blocos de cifrotexto de tamanhos idênticos, através da aplicação repetida de uma transformação inversível conhecida como a função de rodada, com cada iteração referida por rodada.
Geralmente, a função de rodada R toma chaves de rodada diferentes Ki , que são derivadas a partir da chave original, como uma segunda entrada:
onde é o purotexto e o cifrotexto, com r sendo o número da rodada.
Frequentemente, clareamento de chave é usado em adição a isto. No início e no final, os dados são modificados com material de chave (muitas vezes com XOR, mas operações aritméticas simples como adição e subtração também são utilizadas):
Dado um dos esquemas de projeto padrão de cifras de bloco iteradas, é bastante fácil de construir um cifra de bloco que seja criptograficamente segura, simplesmente usando um grande número de rodadas. No entanto, isso fará com que a cifra se torne ineficiente. Assim, a eficiência é o mais importante critério de projeto adicional para cifras profissionais. Além disso, uma boa cifra de bloco é projetada para evitar ataques do canal lateral, como acessos à memória dependente da entrada. que pode vazar dados secretos através do estado de cache ou o tempo de execução. Além disso, a cifra deve ser concisa, para pequenas implementações de hardware e software. Finalmente, a cifra deve ser facilmente criptoanalisável, de tal forma que possa ser mostrado para que número de rodadas a cifra deve ser reduzida de modo a que os ataques criptográficos existentes funcionem e, por outro lado, que o número de rodadas reais seja grande o suficiente para proteger contra eles.
Redes de substituição-permutação thumb|200px|Um rascunho de uma Rede de Substituição-Permutação com 3 rodadas, encriptando um bloco de purotexto de 16 bits em um bloco de cifrotexto de 16 bits. As S-caixas são os Si’s, as P-caixas são os mesmos P, e as chaves de rodada são os Ki’s
Um tipo importante de cifra de bloco iterada conhecido como uma rede de substituição-permutação (SPN) toma um bloco de purotexto e a chave como entradas, e aplica várias rodadas alternadas consistindo de uma fase de substituição seguida por uma fase de permutação -para produzir cada bloco de saída de cifrotexto. A etapa de substituição não-linear mistura os bits da chave com aqueles do texto original, criando confusão de Shannon. Em seguida, a fase de permutação linear dissipa redundâncias, criando difusão.
Uma caixa de substituição (S-caixa) substitui um pequeno bloco de bits de entrada com outro bloco de bits de saída. Esta substituição deve ser um-para-um, para garantir invertibilidade (daí decriptação). Uma S-caixa segura terá a propriedade de que a alteração de um bit de entrada mudará cerca de metade dos bits de saída, em média, exibindo o que é conhecido como o efeito avalanche, ou seja que tem a propriedade de que cada bit de saída dependerá de cada bit de entrada.
Uma caixa de permutação (P-caixa) é uma permutação de todos os bits: leva as saídas de todas as S-caixas de uma rodada, permuta dos bits, e alimenta-os para as S-caixas da próxima rodada. Uma boa P-caixa tem a propriedade de que os bits de qualquer S-caixa de saída são distribuídos ao maior número de entradas de S-caixas quanto possível.
A cada rodada, a chave da rodada (obtida a partir da chave com algumas operações simples, por exemplo, usando S-caixas e P-caixas) é combinada usando-se alguma operação de grupos, tipicamente XOR.
A decriptação é feita simplesmente revertendo-se o processo (usando as inversas das S-caixas e P-caixas e aplicando as chaves de rodada em ordem inversa).
Cifras de Feistel
Em uma cifra de Feistel, o bloco de purotexto a ser encriptado é dividido em duas metades de tamanhos iguais. A função de rodada é aplicada a uma metade, utilizando uma subchave, e, em seguida, a saída é XORada com a outra metade. As duas metades são então trocadas.
Seja a função da rodada e sejam respectivamente as subchaves para as rodadas .
Então, a operação básica é a que se segue:
Divida o bloco de purotexto em duas metades iguais, (, )
Para cada rodada , calcule
.
Então o cifrotexto é .
A decriptação de um cifrotexto é realizada através da computação, para :
.
Então é o purotexto novamente.
Uma vantagem do modelo de Feistel comparado com uma rede de substituição-permutação é que a função de rodada não precisa ser inversível.
Cifras de Lai-Massey
O esquema de Lai-Massey oferece propriedades de segurança semelhantes aos da estrutura de Feistel. Ele também compartilha sua vantagem de que a função de rodada não tem que ser inversível. Outra semelhança é que também divide o bloco de entrada em duas partes iguais. No entanto, a função de rodada é aplicada à diferença entre os dois, e o resultado é, em seguida, adicionado a ambas as metades dos blocos.
Seja a função da rodada e uma função de meia rodada e sejam respectivamente as subchaves para as rodadas .
Então a operação básica é a que se segue:
Divida o bloco de purotexto em dois pedaços de tamanho igual, (, )
Para cada rodada , calcule
onde e
Então o cifrotexto é .
A decriptação de um cifrotexto é realizada pela computação de, para todo
onde e
Então é o purotexto novamente.
Operações
ARX add-rotate-xor Muitas cifras de bloco modernas e hashes são algoritmos ARX - sua função de rodada envolve apenas três operações: adição modular, rotação com quantidades fixas de rotação, e XOR (ARX). Exemplos incluem Salsa20 e Speck e BLAKE. Muitos autores desenham uma rede ARX, uma espécie de diagrama de fluxo de dados, para ilustrar tal função de rodadahttps://131002.net/siphash/siphash.pdf.
Estas operações ARX são populares porque elas são relativamente rápidas e baratas em hardware e software, e também porque elas são executadas em tempo constante, e são, portanto, imunes a ataques de tempo. A técnica de criptoanálise rotacional tenta atacar essas funções de rodada.
Outras operações
Outras operações comumente usadas em cifras de bloco incluem rotações dependentes dos dados, como em RC5 e RC6, uma caixa de substituição como uma tabela de busca como no Data Encryption Standard e Advanced Encryption Standard, uma caixa de permutação, e multiplicação, como no IDEA.
Modos de operação
thumb|Encriptação insegura de uma imagem como resultado de um modo de codificação de livro de código eletrônicoUma cifra de bloco por si só permite a encriptação de apenas um único bloco de dados do comprimento de bloco da cifra. Para uma mensagem de comprimento variável, os dados devem primeiro ser divididos em blocos de cifras separados. No caso mais simples, conhecido como o modo de electronic codebook (ECB), uma mensagem é a primeira divisão em blocos separados com tamanho do bloco da cifra (possivelmente estendendo o último bloco com bits de enchimento), e, em seguida, cada bloco é encriptado e decriptado de forma independente. No entanto, um método tão ingênuo geralmente é inseguro porque blocos de cifrotexto iguais sempre gerarão blocos de cifrotextos iguais (para a mesma chave), assim padrões na mensagem de purotexto tornam-se evidentes na saída do cifrotexto.