# Cifra de bloco

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ções. 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 formalmente, uma cifra de bloco é especificada por uma função de encriptação
    $E_{K}(P):=E(K,P):\{0,1\}^{k}\times \{0,1\}^{n}\rightarrow \{0,1\}^{n},$
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 E$_K$(P) seja um mapeamento inversível sobre {0,1}$^n$. O inverso para E é definido como uma função
    $E_{K}^{-1}(C):=D_{K}(C)=D(K,C):\{0,1\}^{k}\times \{0,1\}^{n}\rightarrow \{0,1\}^{n},$
tomando uma chave K e um cifrotexto C para retornar um valor de purotexto P, tal que
    $\forall K:D_{K}(E_{K}(P))=P.$
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, E$_K$ é uma permutação (um mapeamento bijetivo) sobre o conjunto de blocos de entrada. Cada chave seleciona uma permutação do conjunto de possibilidades $(2^{n})!$.

## 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 K$_i$ , que são derivadas a partir da chave original, como uma segunda entrada:
    $M_{i}=R_{K_{i}}(M_{i-1})$
onde $M_{0}$ é o purotexto e $M_{r}$ 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):
    $M_{0}=M\oplus K_{0}$
    $M_{i}=R_{K_{i}}(M_{i-1})\;;\;i=1\dots r$
    $C=M_{r}\oplus K_{r+1}$
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

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 ${\rm {F}}$ a função da rodada e sejam $K_{0},K_{1},\ldots ,K_{n}$ respectivamente as subchaves para as rodadas $0,1,\ldots ,n$.
Então, a operação básica é a que se segue:
Divida o bloco de purotexto em duas metades iguais, ($L_{0}$, $R_{0}$)
Para cada rodada $i=0,1,\dots ,n$, calcule
    $L_{i+1}=R_{i}\,$
    $R_{i+1}=L_{i}\oplus {\rm {F}}(R_{i},K_{i})$.
Então o cifrotexto é $(R_{n+1},L_{n+1})$.
A decriptação de um cifrotexto $(R_{n+1},L_{n+1})$ é realizada através da computação, para $i=n,n-1,\ldots ,0$:
    $R_{i}=L_{i+1}\,$
    $L_{i}=R_{i+1}\oplus {\rm {F}}(L_{i+1},K_{i})$.
Então $(L_{0},R_{0})$ é o purotexto novamente.
Uma vantagem do modelo de Feistel comparado com uma rede de substituição-permutação é que a função de rodada ${\rm {F}}$ 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 $\mathrm {F}$ a função da rodada e $\mathrm {H}$ uma função de meia rodada e sejam $K_{0},K_{1},\ldots ,K_{n}$ respectivamente as subchaves para as rodadas $0,1,\ldots ,n$.
Então a operação básica é a que se segue:
Divida o bloco de purotexto em dois pedaços de tamanho igual, ($L_{0}$, $R_{0}$)
Para cada rodada $i=0,1,\dots ,n$, calcule
    $(L_{i+1}',R_{i+1}')=\mathrm {H} (L_{i}'+T_{i},R_{i}'+T_{i})$
onde $T_{i}=\mathrm {F} (L_{i}'-R_{i}',K_{i})$ e $(L_{0}',R_{0}')=\mathrm {H} (L_{0},R_{0})$
Então o cifrotexto é $(L_{n+1},R_{n+1})=(L_{n+1}',R_{n+1}')$.
A decriptação de um cifrotexto $(L_{n+1},R_{n+1})$ é realizada pela computação de, para todo $i=n,n-1,\ldots ,0$
    $(L_{i}',R_{i}')=\mathrm {H} ^{-1}(L_{i+1}'-T_{i},R_{i+1}'-T_{i})$
onde $T_{i}=\mathrm {F} (L_{i+1}'-R_{i+1}',K_{i})$ e $(L_{n+1}',R_{n+1}')=\mathrm {H} ^{-1}(L_{n+1},R_{n+1})$
Então $(L_{0},R_{0})=(L_{0}',R_{0}')$ é 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 rodada.
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

Uma 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.
Para superar essa limitação, vários assim chamados modos de operação de cifra de bloco foram projetados e especificados nas recomendações nacionais norte-americanas, como NIST 800-38A e BSI TR-02102 e as normas internacionais, tais como ISO/IEC 10116. O conceito geral é usar aleatorização dos dados de purotexto com base em um valor de entrada adicional, frequentemente chamado um vetor de inicialização, para criar o que é chamado de encriptação probabilística. Nas cifras de bloco encadeadas populares (modo CBC), para a encriptação ser segura, o vetor de inicialização passado, juntamente com a mensagem de purotexto, deve ser um valor aleatório ou pseudo-aleatório, o qual é adicionado via ou-exclusivo ao primeiro bloco de purotexto antes da encriptação. O bloco de cifrotexto resultante é então utilizado como o novo vetor de inicialização para o próximo bloco de purotexto. No modo de retroalimentação da cifra (CFB), que emula uma cifra de fluxo de auto-sincronização, o vetor de inicialização é encriptado em primeiro lugar e, em seguida, adicionado ao bloco de purotexto. O modo de retroalimentação de saída (OFB) encripta repetidamente o vetor de inicialização para criar uma chave de fluxo para a emulação de uma cifra de fluxo síncrona. O modo do contador mais recente (CTR) cria uma chave de fluxo semelhante, mas tem a vantagem de só necessitar de valores não (pseudo-)aleatórios como vetores de inicialização; a aleatoriedade necessária é derivada internamente usando o vetor de inicialização como um contador de bloco e encriptando este contador para cada bloco.
De um ponto de vista segurança-teórico, os modos de operação devem fornecer o que é conhecido como a segurança semântica. Informalmente, isso significa que, dada uma mensagem cifrada sob uma chave desconhecida, praticamente não se pode derivar qualquer informação a partir do cifrotexto (além do comprimento da mensagem) sobre o que se seria conhecido sem ver o cifrotexto. Demonstrou-se que todos os modos discutidos acima, com a exceção do modo ECB, proporcionam esta propriedade sob os chamados ataques de purotexto escolhido.

## Preenchimento

Alguns modos como o modo CBC só funcionam em blocos de purotexto completos. Estender o último bloco de uma mensagem com bits 0 é insuficiente, uma vez que não permite que um receptor de mensagens distinga facilmente que duas mensagens que difiram apenas na quantidade de bits de preenchimento. Mais importante ainda, uma solução tão simples dá origem a ataques muito eficientes de preenchimento oracular. É, portanto, necessário um esquema de preenchimento adequado para estender o último bloco de purotexto para o tamanho do bloco da cifra. Enquanto muitos sistemas conhecidos descritos nos padrões e na literatura têm mostrado estar vulneráveis a ataques de preenchimento oracular, uma solução que adiciona um bit 1 e, em seguida, estende o último bloco com bits 0, padronizou-se como "método de preenchimento 2 "na ISO/IEC 9797-1, foi provado seguro contra esses ataques.

## Criptoanálise
### Ataques de força bruta

Devido à característica de uma cifra de bloco como uma função inversível, sua saída se torna distinguível de uma seqüência de saída verdadeiramente aleatória ao longo do tempo devido ao ataque do aniversário. Esta propriedade resulta na degradação da segurança da cifra de forma quadrática, e deve ser levada em conta quando se seleciona um tamanho de bloco. Há um preço a se pagar: já que blocos grandes podem resultar em tornar o algoritmo ineficiente para operar. Cifras de blocos anteriores, como o DES, têm tipicamente selecionado um tamanho de bloco de 64 bits, enquanto os projetos mais recentes, como o AES suporta blocos de tamanho 128 bits ou mais, com algumas cifras que suportam uma variedade de diferentes tamanhos de blocos.

### Criptoanálise linear

Criptoanálise linear é uma forma de criptoanálise baseada em encontrar aproximações afins para a ação da cifra. Criptoanálise linear é dos ataques mais abrangentemente utilizados em cifras de bloco; o outro sendo criptoanálise diferencial.
A descoberta é atribuída a Mitsuru Matsui, que foi quem primeiro aplicou a técnica na cifra FEAL.

### Criptoanálise integral

Criptoanálise Integral é um ataque criptoanalítico que é particularmente aplicável para bloquear cifras baseado em redes de substituição-permutação. Ao contrário de criptoanálise diferencial, que usa pares de purotextos escolhidos com uma diferença XOR fixa, criptoanálise integral usa conjuntos ou mesmo multiconjuntos de purotextos escolhidos dos quais parte é mantida constante e outra parte varia através de todas as possibilidades. Por exemplo, um ataque pode usar 256 purotextos escolhidos que têm todos, exceto oito de seus bits iguais, mas todos diferem nesses 8 bits. Tal conjunto tem necessariamente uma soma XOR de 0, e as somas XOR dos conjuntos correspondentes de mensagens cifradas fornecem informações sobre o funcionamento da cifra. Esse contraste entre as diferenças de pares de textos e as somas dos maiores conjuntos de textos inspirou o nome "criptoanálise integral", utilizando a terminologia do cálculo.

### Outras técnicas

Além de criptoanálise diferencial e linear, há um catálogo crescente de ataques: criptoanálise diferencial truncada, criptoanálise diferencial parcial, criptoanálise integral, que engloba ataques quadráticos e integrais, ataques de slides, ataques bumerangue, o ataque XSL, criptoanálise diferencial impossível e ataques algébricos. Para um novo projeto de cifra de bloco ter qualquer credibilidade, ele deve demonstrar evidência de segurança contra ataques conhecidos.

## Segurança demonstrável

Quando uma cifra de bloco é usada em um determinado modo de operação, o algoritmo resultante deve idealmente ser tão seguro quanto a própria cifra de bloco. O modo ECB (discutido acima) não tem enfaticamente esta propriedade: independentemente de quão seguro a cifra de bloco subjacente for, o modo ECB pode facilmente ser atacado. Por outro lado, o modo CBC pode ser provado seguro e sob o pressuposto de que a cifra de bloco subjacente é igualmente segura. Note, no entanto, que fazer declarações como essa requer definições matemáticas formais para o que significa para um algoritmo de encriptação ou uma cifra de bloco "estar seguro(a)". Esta seção descreve duas noções comuns para as propriedades que uma cifra de bloco deveria ter. Cada uma corresponde a um modelo matemático que pode ser usado para provar propriedades de algoritmos de nível mais elevado, tais como CBC.
Esta abordagem geral à criptografia --- provando que algoritmos de nível superior (tais como CBC) são seguros sob pressupostos explicitamente declarados em relação aos seus componentes (como uma cifra de bloco) --- é conhecida como segurança demonstrável.

### Modelo padrão

Informalmente, uma cifra de bloco é segura no modelo padrão se um atacante não pode dizer a diferença entre a cifra de bloco (equipada com uma chave aleatória) e uma permutação aleatória.
Para ser um pouco mais preciso, seja E uma cifra de bloco de n bits. Nós imaginamos o seguinte jogo:
* A pessoa executando o jogo joga uma moeda.
** Se a moeda der cara, ele escolhe uma chave aleatória K e define a função f = E$_K$.
** Se der coroa, ele escolhe uma permutação aleatória PA sobre o conjunto de cadeias de n bits e define a função f = PA.
* O atacante escolhe uma cadeia de n bits X, e a pessoa executando o jogo o diz o valor de f(X).
* O passo 2 é repetido num total de q vezes (cada uma dessas iterações é chamada de consulta).
* O atacante estipula como a moeda caiu. Se ele acertar, ele ganha o jogo.
O atacante, que podemos modelar como um algoritmo, é chamado de adversário. A função f (que o adversário é capaz de consultar) é chamada de oráculo.
Note que um adversário pode trivialmente garantir 50% de chance de ganhar simplesmente por adivinhar aleatoriamente (ou mesmo, por exemplo, sempre supondo "caras"). Portanto, suponha que P$_E$(A) indique a probabilidade de que o adversário A ganha o jogo contra E, e defina a vantagem de A, tal como 2(P$_E$(A) - 1/2). Com isso, se A escolhe aleatoriamente, a sua vantagem vai ser 0; Por outro lado, se A ganha sempre, a sua vantagem é 1. A cifra de bloco E é uma permutação pseudo-aleatória (PRP) se nenhum adversário tem uma vantagem significativamente maior do que 0, dadas as restrições sobre q e tempo de funcionamento do adversário especificado. Se no Passo 2 acima os adversários tiverem a opção de descobrir f$^{−1}$(X) em vez de f(X) (mas ainda tem vantagens pequenas), então E é um PRP forte (SPRP). Um adversário é não-adaptativo se escolhe todos os valores q para X antes do início do jogo (ou seja, ele não utiliza qualquer informação recolhida a partir de consultas prévias para escolher cada X com o passar do jogo).
Estas definições têm se provado úteis para analisar vários modos de operação. Por exemplo, pode-se definir um jogo similar para medir a segurança de um algoritmo de encriptação baseado em cifra de bloco, e, em seguida, tentar mostrar (através de um argumento de redução) que a probabilidade de um adversário ganhar este novo jogo não é muito mais do P$_E$(A) para algum A (a redução normalmente fornece limitantes para q e o tempo de execução de A). De forma equivalente, se P$_E$(A) é pequena para todo A relevante, então nenhum atacante tem uma probabilidade significativa de ganhar o novo jogo. Isso formaliza a ideia de que o algoritmo de nível superior herda a segurança da cifra de bloco.

## Avaliação prática

Cifras de bloco podem ser avaliadas de acordo com vários critérios na prática. Fatores comuns incluem:
* Parâmetros-chave, tais como a sua dimensão e tamanho de bloco da chave, ambos que fornecem um limitante superior sobre a segurança da cifra.
* O nível de segurança estimado, que é baseado na confiança adquirida no projeto da cifra de bloco após ela ter resistido a grandes esforços em criptoanálise com o passar do tempo, a solidez matemática do projeto, e a existência de ataques práticos ou certificacionais.
* A complexidade da cifra e sua adequação para implementação em hardware ou software. Implementações de hardware podem medir a complexidade em termos de contagem de comporta ou o consumo de energia, que são parâmetros importantes para dispositivos com recursos limitados.
* A performance da cifra em termos de vazão de processamento em várias plataformas, incluindo seus requisitos de memória.
* O custo da cifra, que se refere aos requisitos de licença que podem ser aplicados devido a direitos de propriedade intelectual.
* A flexibilidade da cifra, que inclui sua habilidade de suportar tamanhos de chave e de blocos variados.

## Cifras de bloco notáveis
### Lucifer / DES

Lúcifer é geralmente considerada como a primeira cifra de bloco civil, desenvolvida pela IBM na década de 1970 com base no trabalho feito por Horst Feistel. Uma versão revisada do algoritmo foi adotada como um Federal Information Processing Standard do governo dos Estados Unidos:. FIPS PUB 46 Data Encryption Standard (DES). Ele foi escolhido pelo NBS dos EUA após um convite público para a apresentação e algumas mudanças internas pela NBS (e, potencialmente, a NSA). DES foi lançada publicamente em 1976 e tem sido amplamente utilizada.
DES foi projetada para, entre outras coisas, resistir a um determinado ataque criptoanalítico conhecido pelo NSA e redescoberto pela IBM, embora desconhecido publicamente até ser redescoberta novamente e publicado por Eli Biham e Adi Shamir no final de 1980. A técnica é chamada de criptoanálise diferencial e continua a ser um dos poucos ataques gerais contra cifras de bloco; criptoanálise linear é outro, mas pode ter sido desconhecida até mesmo para a NSA, antes da sua publicação por Mitsuru Matsui. DES causou uma grande quantidade de outros trabalhos e publicações em criptografia e criptoanálise na comunidade aberta e que inspirou muitos projetos novos de cifra.
DES tem um tamanho de bloco de 64 bits e um tamanho de chave de 56 bits. Blocos de 64 bits tornaram-se comuns em projetos de cifra de bloco depois de DES. O comprimento da chave dependia de diversos fatores, incluindo a regulamentação do governo. Muitos observadores na década de 1970, comentaram que o comprimento da chave de 56 bits usado para DES foi muito curto. Conforme o tempo passava, sua inadequação tornou-se evidente, especialmente depois de uma máquina de propósito específico projetado para quebrar o DES foi demonstrada em 1998 pela Electronic Frontier Foundation. Uma extensão para DES, Triple DES, encripta triplamente cada bloco com duas chaves independentes (chave de 112 bits chave segurança de 80 bits) ou três chaves independentes (chave de 168 bits e segurança de 112 bits). Foi amplamente adotado como uma substituição. A partir de 2011, a versão de três-chaves ainda é considerada segura, embora o Instituto Nacional de Padrões e Tecnologia (NIST) não permita o uso da versão de duas chaves em novas aplicações, devido ao seu nível de segurança de 80 bits.

### IDEA

O Algoritmo de Encriptação de Dados Internacional (International Data Encryption Algorithm/IDEA em inglês) é uma cifra de bloco projetada por James Massey de ETH Zurich e Xuejia Lai; foi descrita inicialmente em 1991, como uma substituta candidada para o DES.
IDEA opera em blocos de 64 bits, usando uma chave de 128 bits, e consiste de uma série de oito transformações idênticas (uma rodada) e uma transformação da saída (a meia rodada). Os processos de encriptação e decriptação são semelhantes. IDEA deriva muito de sua segurança intercalando operações de diferentes grupos - adição e multiplicação modular, e ou-exclusivo bit a bit (XOR) - que são algebricamente "incompatíveis" em algum sentido.
Os projetistas analisaram IDEA para medir sua força contra a criptoanálise diferencial e concluiu que é imune sob determinados pressupostos. Não há pontos fracos lineares ou algébricos bem sucedidos que tenham sido relatados. Desde de 2012, o melhor ataque, que se aplica a todas as chaves pode quebrar a IDEA de 8.5 rodadas usando um ataque de bicliques estreitos cerca de quatro vezes mais rápido do que a força bruta.

### RC5

RC5 é uma cifra de bloco projetada por Ronald Rivest em 1994, que, ao contrário de muitas outras cifras, tem um tamanho de bloco (32, 64 ou 128 bits), tamanho de chave (0-2040 bits) e número de rodadas (0 a 255) variáveis . A escolha original sugerida dos parâmetros foram um tamanho de bloco de 64 bits, uma chave de 128-bit e 12 rodadas.
Uma característica fundamental do RC5 é o uso de rotações dependentes de dados; um dos objetivos do RC5 foi para incentivar o estudo e avaliação de tais operações como uma primitiva criptográfica. RC5 também é composto por um número de adições modulares e XORs. A estrutura geral do algoritmo é semelhante a uma rede de Feistel. As rotinas de encriptação e decriptação podem ser especificadas em algumas linhas de código. O escalonamento da chave, no entanto, é mais complexo, expandindo a chave usando uma função essencialmente unidirecional com as expansões binárias de ambos e e a proporção áurea como fontes de "aleatoriedade". A simplicidade tentadora do algoritmo em conjunto com a novidade das rotações dependente de dados fez RC5 um objeto atraente de estudo para criptoanalistas.
RC5 com 12 rodadas (com blocos de 64 bits) é vulnerável ao ataque diferencial usando 2$^{44}$ purotextos escolhidos. De 18 a 20 rodadas são sugeridas como proteção suficiente.

### Rijndael/AES

DES foi substituído como Padrão Federal dos Estados Unidos pela AES, aprovada pelo NIST em 2001 depois de um concurso público de 5 anos. A cifra foi desenvolvida por dois criptógrafos belgas, Joan Daemen e Vincent Rijmen, e apresentou sob o nome Rijndael.
AES tem um tamanho de bloco fixo de 128 bits e um tamanho de chave de 128, 192 ou 256 bits, enquanto que Rijndael pode ser especificado com bloco e tamanhos de chave em qualquer múltiplo de 32 bits, com um mínimo de 128 bits. O tamanho de bloco tem um máximo de 256 bits, mas o tamanho da chave não tem qualquer máximo teórico. AES opera em uma matriz 4 × 4 de bytes, denominada de estado (versões de Rijndael com um tamanho de bloco maior têm colunas adicionais no estado).

### Blowfish

Blowfish é uma cifra de bloco, projetada em 1993 por Bruce Schneier e incluída em um grande número de conjuntos de cifras e produtos de encriptação. Blowfish tem um tamanho de bloco de 64 bits e um comprimento de chave variável de 1 bit de até 448 bits. É um cifra de 16 rodadas de Feistel e utiliza grandes S-caixas dependentes da chave. As características notáveis ​​do projeto incluem as S-caixas dependentes de chaves e um escalonamento de chave altamente complexo.
Schneier concebeu Blowfish como um algoritmo de finalidade geral, concebido como uma alternativa para o envelhecido DES e livre dos problemas e limitações associadas com outros algoritmos. Na época em que Blowfish foi lançado, muitos outros projetos eram proprietários, gravadas por patentes ou eram segredos comerciais/governamentais. Schneier afirmou que, "Blowfish é não protegido por patente, e permanecerá assim em todos os países. O algoritmo fica colocado no domínio público, e pode ser usado livremente por qualquer pessoa." Blowfish fornece uma taxa de encriptação boa em software e não há até agora uma criptoanálise eficaz da versão de rodada completa.

## Generalizações
### Cifras de bloco ajustáveis

M. Liskov, R. Rivest, e D. Wagner descreveram uma versão generalizada de cifras de bloco chamadas cifras de bloco "ajustáveis". Uma cifra de bloco ajustável aceita uma segunda entrada chamada de ajuste juntamente com o seu habitual purotexto ou entrada de cifrotexto. O ajuste, juntamente com a chave, seleciona a permutação calculada pela cifra. Se a mudança de ajustes for suficientemente leve (em comparação com uma operação de configuração chave, geralmente bastante cara), então alguns novos modos de operação interessantes se tornam possíveis. O artigo teoria de encriptação de disco descreve alguns desses modos.

### Encriptação preservadora de formato

Cifras de bloco trabalham tradicionalmente ao longo de um alfabeto binário. Ou seja, tanto a entrada quanto a saída são cadeias binárias, consistindo em n zeros e uns. Em algumas situações, no entanto, pode-se desejar ter uma cifra de bloco que funciona através de algum outro alfabeto; por exemplo, a encriptação de números de cartão de crédito 16 dígitos, de tal maneira que o cifrotexto seja também uma série de 16 dígitos pode facilitar a adição de uma camada de encriptação para o software de legado. Este é um exemplo de encriptação preservadora de formato. De modo mais geral, a encriptação preservadora de formato requer uma permutação chaveada em alguma linguagem finita. Isso faz de esquemas de encriptação preservadora de formato uma generalização natural de cifras de bloco ajustáveis. Em contraste, os esquemas de encriptação tradicionais, tais como o CBC, não são permutações porque o mesmo purotexto pode encriptar para múltiplos cifrotextos diferentes, mesmo quando se utiliza uma chave fixa.

## Relação com outras primitivas criptográficas

Cifras de blocos podem ser usadas para construir outras primitivas criptográficas, tais como as que estão abaixo. Para estas outras primitivas serem criptograficamente seguras, elas têm de ser cuidadosamente construídas:
* Cifras de fluxo podem ser construídas a partir de cifras de bloco. Veja função de compressão unilateral para descrições de tais métodos. Os métodos são semelhantes aos modos de operação de cifra de bloco normalmente usados para encriptação.
* Funções hash criptográficas podem ser construídas a partir de cifras de bloco. Veja função de compressão unidirecional para descrições de tais métodos. Os métodos são semelhantes aos modos de operação de cifra de bloco normalmente usados para encriptação.
* Geradores de números pseudoaleatórios criptograficamente seguros (CSPRNGs) podem ser construídos a partir de cifras de bloco.
* Permutações pseudoaleatórias seguras de conjuntos de tamanho finito arbitrários podem ser construídas com cifras de bloco. Veja Encriptação preservadora de formato.
* Códigos de autenticação de mensagem (MACs) são normalmente construídos a partir de cifras de bloco. Ex: CBC-MAC, OMAC, PMAC.
* Encriptação autenticada também é construída a partir de cifras de bloco. Ex: CCM, EAX, GCM e OCB.
Assim como cifras de bloco podem ser usadas na construção de funções de dispersão, o inverso também é verdade. Ex: SHACAL, BEAR e LION.

## Veja também

* DES
* AES