É bastante comum que criptossistemas operem apenas sobre entradas de tamanho fixo. Apesar disso, em geral gostariamos de criptografar mensagens de tamanho arbitrário, fazendo assim necessária uma extensão do algoritmo de criptografia. Existem diversas formas de se realizar essa extensão, formas essas que são chamadas “modos de operação” do algoritmo.
Aqui partimos do princípio que o comprimento total da mensagem é um múltiplo do tamanho de entrada do algoritmo de criptografia. Se esse não for o caso, a mensagem deve receber um Padding.
Denotaremos a função de criptografia com chave \(K\) como \(f_K(x_i)\), a mensagem de entrada como \(x = (x_1, ..., x_n)\) onde \(x_i\) é um bloco de tamanho válido para \(f\), a mensagem de saída como \(y = (y_1, ..., y_n)\) e \(\oplus\) a operação XOR.
O modo ECB (Electronic Code Book mode) é a forma mais ingênua de extensão, onde cada bloco é criptografado de maneira independente: \[ y_i = f_K(x_i) \] O problema deste modo surge pelo fato de que blocos repetidos do texto de entrada inevitavelmente refletirão em repetições nos blocos da saída, levando a padrões estatísticos indesejáveis no criptotexto. Isso facilita muito a 2 Criptanálise.
Por conta dessas considerações, esse modo nunca deve ser utilizado em uma aplicação séria.
O modo CBC (Cipher Block Chaining mode) é uma extensão do modo ECB em que cada bloco passa por um XOR com o bloco anterior antes de ser criptografado.
Opcionalmente tomamos um bloco de “valor inicial” \(IV\), fazendo \[ y_1 = x_1 \oplus IV \] e então, para cada bloco seguinte, \[ y_i = f_K(x_i \oplus y_{i-1}) \] Para a decriptografia, basta fazer as operações em ordem reversa: \[ x_1 = y_1 \oplus IV \] e, para os blocos seguintes, \[ x_i = f^{-1}_K(y_i) \oplus y_{i-1} \] Essa alteração na operação do modo repara os problemas flagrantes do modo ECB, pois faz com que cada bloco seja dependente de todos os blocos anteriores, difundindo a informação e impedindo repetições. Isso fica fácil de ver quando escrevemos cada bloco de saída de forma expandida: \[ \begin{gather} y_1 = x_1 \oplus IV \\ y_2 = f_K(x_2 \oplus x_1 \oplus IV) \\ y_3 = f_K( x_3 \oplus f_K(x_2 \oplus x_1 \oplus IV) ) \\ y_4 = f_K( x_4 \oplus f_K( x_3 \oplus f_K(x_2 \oplus x_1 \oplus IV) ) ) \\ \vdots \\ y_n = f_K( x_n \oplus f_K( x_{n-1} \oplus f_K(\cdots \oplus f_K(x_2 \oplus x_2 \oplus IV) \cdots )) ) \end{gather} \]
Os modos CFB (Cipher Feedback mode) e OFB (Output Feedback mode) são modos de operação muito parecidos entre si usados em criptossistemas de tamanho de entrada variável, como os de criptografia assimétrica. Nestes modos, pequenos trechos da mensagem são criptografados, o que significa que o algoritmo é aplicado mais vezes. Isso torna a criptografia resultante mais segura, mas menos eficiente.
Estes modos tem como principal aplicações situações em que a informação já é naturalmente dividida em pacotes de comprimento curto e fluxo constante, como é o caso da transmissão de áudio ou vídeo.