# Modo de operação (criptografia)

Em criptografia, um ciframento em blocos trabalha com blocos de comprimento fixo, frequentemente de 64 ou 128 bits. Visto que as mensagens podem ter qualquer comprimento, e dado que criptografar o mesmo texto simples sob a mesma chave sempre produz a mesma saída (conforme descrito na seção ECB abaixo), vários modos de operação foram inventados, os quais permitem que o ciframento em blocos forneça confidencialidade para mensagens de tamanho arbitrário.
Os modos mais antigos descritos na literatura (por exemplo, ECB, CBC, OFB e CFB) provê somente confidencialidade e não assegura integridade da mensagem. Outros modos foram desenvolvidos desde então para assegurar tanto a confidencialidade quanto integridade da mensagem, tais como os modos IAPM, CCM, EAX, GCM e OCB. O modo configurável de bloco estreito (LRW) e os modos de criptografia de bloco largo (CMC e EME), projetados para criptografar setores de disco com segurança, são descritos no artigo dedicado à teoria de criptografia de disco.

## Vetor de inicialização (IV)

O Vetor de Inicialização ou Initialization Vector, em inglês, é uma espécie de 'bloco falso' que inicializa o processo para o primeiro bloco verdadeiro. Ele que dá uma aleatoriedade ao processo, fazendo com que mesmo texto que seja encriptado várias vezes, o código encriptado resultante seja diferente. Todos estes modos (exceto o ECB) precisam do IV, mas na maioria dos casos, não é necessário que o IV seja secreto, ainda que seja essencial que nunca seja reutilizado com a mesma chave. Para o CBC e CFB, reutilizar um IV transmite alguma informação sobre o primeiro bloco do texto simples e sobre qualquer prefixo comum compartilhado pelas duas mensagens. Para o OFB e CTR, reutilizar um IV destrói completamente a segurança. No modo CBC, o IV deve ser gerado aleatoriamente no momento da criptografia, não reutilizando o último bloco cifrado da última transmissão, como acontecia no SSL 2.0, pois se o atacante souber o último bloco, ele pode usa-lo para adivinhar o texto enviado posteriormente, este ataque ficou conhecido como o ataque TLS CBC IV.

## Modo ECB (Electronic CodeBook)

O modo mais simples de criptografia é o electronic codebook (ECB). A mensagem é dividida em blocos e cada bloco é criptografado separadamente. A desvantagem deste método é que blocos idênticos de texto plano são criptografados em blocos de texto cifrado idênticos; assim, ele também não oculta padrões de dados. No geral, não oferece uma perfeita confidencialidade de mensagem, e não é recomendado para uso em protocolos criptográficos em geral.
Eis aqui um bom exemplo do nível no qual o ECB pode transformar os padrões de dados de texto simples em texto cifrado. Uma versão em mapa de pixels da imagem à esquerda foi criptografada usando o modo ECB para criar a imagem do centro:
| Original | Criptografado usando modo ECB | Criptografado usando outros modos |
A imagem da direita é como ficaria a imagem criptografada com CBC, CTR ou qualquer dos outros modos seguros — indistinguíveis de ruído aleatório. Observe que a aparência aleatória da imagem à direita nos diz muito pouco sobre se a imagem foi criptografada com segurança; muitos tipos de criptografia inseguras têm sido desenvolvidas as quais produzem saídas com aspecto "aleatório".
O modo ECB também produz protocolos sem proteção de integridade e bastante suscetíveis a ataques de replay, visto que cada bloco é decriptado exatamente da mesma forma. Por exemplo, o Vídeo-game online Phantasy Star Online: Blue Burst usa Blowfish em modo ECB. Antes do sistema de troca de chaves ser "craqueada" levando a métodos ainda mais fáceis, trapaceiros repetiam pacotes de mensagens criptografadas com o texto "monster killed" ("monstro morto"), cada qual um bloco criptografado Blowfish, para ganhar de forma ilegítima pontos de experiência rapidamente.

## Modo CBC (Cipher-block chaining)

No modo de criptografia CBC (Cypher Block Chaining - Criptografia de Blocos Encadeados), a cada bloco de texto simples é aplicada uma função XOR junto com o bloco cifrado anterior antes do texto ser criptografado. Desta forma, cada bloco cifrado fica dependente de todos os blocos de texto simples processados até este momento. Além disso, para que cada mensagem seja única, mesmo de um mesmo texto original, um vector de inicialização único deve ser utilizado no primeiro bloco, preferencialmente gerado aleatoriamente.
Se o primeiro bloco tiver o índice 1, a formula matemática para a criptografia CBC é a seguinte:
$C_{i}=E_{K}(P_{i}\oplus C_{i-1}),C_{0}=IV$
e a formula matemática para descriptografia CBC é a seguinte:
$P_{i}=D_{K}(C_{i})\oplus C_{i-1},C_{0}=IV$
O CBC tem sido o modo de operação geralmente mais utilizado. Suas principais desvantagens são que a criptografia é sequencial (não pode ser paralelizada), e a mensagem deve ser alinhada de acordo com um múltiplo do tamanho do bloco de cifra. Uma maneira de atender este último caso, é através da técnica conhecida como ciphertext stealing.
Observe que a mudança de um bit no texto simples original afeta todos os blocos cifrados subsequentes, e um texto simples pode ser recuperado de apenas dois blocos adjacentes do texto cifrado. Como consequência, a descriptografia pode ser paralelizada, a mudança de um bit no texto cifrado corrompe completamente o bloco do texto simples e inverte o bit correspondente no bloco de texto simples seguinte.

### Modo PCBC (Propagating cipher-block chaining)

O modo propagating cipher-block chaining (PCBC) é uma variação do CBC desenhada para que qualquer pequeno erro no texto seja propagada indefinidamente tanto na decriptação como na criptografia. Isso permite a detecção do erro e descarte do resultado final. As rotinas de criptografia e decriptação são mostradas a seguir:
$C_{i}=E_{K}(P_{i}\oplus P_{i-1}\oplus C_{i-1}),P_{0}\oplus C_{0}=IV$
$P_{i}=D_{K}(C_{i})\oplus P_{i-1}\oplus C_{i-1},P_{0}\oplus C_{0}=IV$
O PCBC é usado notadamente nos protocolos Kerberos v4 e WASTE, mas fora isso é relativamente incomum.
Quando dois blocos adjacentes são trocados numa mensagem criptografada no modo PCBC os blocos subsequentes não são afetados, mantendo o resultado final sem erros. Isso fez com que a versão 5 do Kerberos, por exemplo, já não usasse mais este modo, tendo sido usado o CBC. De fato o PCBC não chegou a ser publicado como um padrão federal ou nacional nos EUA.

## Modo CFB (Cipher feedback)

a entrada é processada j bits de cada vez. O texto cifrado anterior é usado como entrada para o algoritmo criptográfico de forma a produzir uma saída pseudo-aleatória, que é o XOR com o texto claro para produzir a próxima unidade de texto cifrado. A mensagem é tratada como um fluxo de bits. Resultado de um bloco é usado para o bloco seguinte.

## Modo OFB (Output feedback)

semelhante ao CFB, exceto que a entrada do algoritmo criptográfico é a saída DES anterior. Mensagem tratada como um fluxo de bits, saída da cifra é adicionada à mensagem por XOR, pode ser computada com antecedência pois a saída da cifra é a realimentação.

## Modo CTR (Counter)

nova proposta, cada bloco de texto claro é XOR com um contador criptografado. O contador é incrementado para cada bloco subsequente. Semelhante ao OFB, porém a realimentação é o contador.