Modo de operação de cifra de bloco - Block cipher mode of operation

Na criptografia, um modo de operação de cifra de bloco é um algoritmo que usa uma cifra de bloco para fornecer segurança de informações , como confidencialidade ou autenticidade . Uma cifra de bloco por si só é adequada apenas para a transformação criptográfica segura (criptografia ou descriptografia) de um grupo de bits de comprimento fixo denominado bloco . Um modo de operação descreve como aplicar repetidamente a operação de bloco único de uma cifra para transformar com segurança quantidades de dados maiores do que um bloco.

A maioria dos modos requer uma sequência binária exclusiva, geralmente chamada de vetor de inicialização (IV), para cada operação de criptografia. O IV deve ser não repetitivo e, para alguns modos, também aleatório. O vetor de inicialização é usado para garantir que textos criptografados distintos sejam produzidos, mesmo quando o mesmo texto simples é criptografado várias vezes de forma independente com a mesma chave . As cifras de bloco podem operar em mais de um tamanho de bloco , mas durante a transformação o tamanho do bloco é sempre fixo. Os modos de codificação de bloco operam em blocos inteiros e exigem que a última parte dos dados seja preenchida em um bloco completo se for menor do que o tamanho do bloco atual. Existem, no entanto, modos que não requerem preenchimento porque eles usam efetivamente uma cifra de bloco como uma cifra de fluxo .

Historicamente, os modos de criptografia foram estudados extensivamente em relação às suas propriedades de propagação de erro em vários cenários de modificação de dados. O desenvolvimento posterior considerou a proteção da integridade como um objetivo criptográfico inteiramente separado. Alguns modos modernos de operação combinam confidencialidade e autenticidade de maneira eficiente e são conhecidos como modos de criptografia autenticados .

História e padronização

Os primeiros modos de operação, ECB, CBC, OFB e CFB (ver todos abaixo), datam de 1981 e foram especificados em FIPS 81 , DES Modes of Operation . Em 2001, o Instituto Nacional de Padrões e Tecnologia dos Estados Unidos (NIST) revisou sua lista de modos de operação aprovados incluindo AES como uma cifra de bloco e adicionando o modo CTR em SP800-38A , Recomendação para Modos de Operação de Cifra de Bloco . Finalmente, em janeiro de 2010, o NIST adicionou XTS-AES no SP800-38E , Recomendação para Modos de Operação de Cifra de Bloco: O Modo XTS-AES para Confidencialidade em Dispositivos de Armazenamento . Existem outros modos de confidencialidade que não foram aprovados pelo NIST. Por exemplo, CTS é o modo de roubo de texto cifrado e está disponível em muitas bibliotecas criptográficas populares.

Os modos de codificação de bloco ECB, CBC, OFB, CFB, CTR e XTS fornecem confidencialidade, mas não protegem contra modificação acidental ou adulteração maliciosa. A modificação ou violação pode ser detectada com um código de autenticação de mensagem separado , como CBC-MAC ou uma assinatura digital . A comunidade criptográfica reconheceu a necessidade de garantias de integridade dedicadas e o NIST respondeu com HMAC, CMAC e GMAC. HMAC foi aprovado em 2002 como FIPS 198 , The Keyed-Hash Message Authentication Code (HMAC) , CMAC foi lançado em 2005 sob SP800-38B , Recomendação para Block Cipher Modes of Operation: The CMAC Mode for Authentication , e GMAC foi formalizado em 2007 sob SP800-38D , recomendação para modos de operação de codificação de bloco: modo Galois / contador (GCM) e GMAC .

A comunidade criptográfica observou que a composição (combinação) de um modo de confidencialidade com um modo de autenticidade pode ser difícil e sujeito a erros. Eles, portanto, começaram a fornecer modos que combinavam confidencialidade e integridade de dados em um único primitivo criptográfico (um algoritmo de criptografia). Esses modos combinados são chamados de criptografia autenticada , AE ou "autenticação". Exemplos de modos AE são CCM ( SP800-38C ), GCM ( SP800-38D ), CWC , EAX , IAPM e OCB .

Os modos de operação são definidos por vários organismos de normalização reconhecidos nacional e internacionalmente. Organizações de padrões notáveis ​​incluem NIST , ISO (com ISO / IEC 10116), IEC , IEEE , ANSI e IETF .

Vetor de inicialização (IV)

Um vetor de inicialização (IV) ou variável inicial (SV) é um bloco de bits que é usado por vários modos para randomizar a criptografia e, portanto, para produzir textos cifrados distintos, mesmo se o mesmo texto simples for criptografado várias vezes, sem a necessidade de um re mais lento -Processo de chave.

Um vetor de inicialização tem requisitos de segurança diferentes de uma chave, portanto, o IV geralmente não precisa ser secreto. Para a maioria dos modos de criptografia de bloco, é importante que um vetor de inicialização nunca seja reutilizado na mesma chave, ou seja, deve ser um nonce criptográfico . Muitos modos de criptografia de bloco têm requisitos mais rígidos, como o IV deve ser aleatório ou pseudo-aleatório . Algumas cifras de bloco têm problemas específicos com certos vetores de inicialização, como todos zero IV que não geram criptografia (para algumas chaves).

Recomenda-se revisar os requisitos IV relevantes para o modo de cifra de bloco em particular na especificação relevante, por exemplo, SP800-38A .

Para CBC e CFB, a reutilização de um IV vaza algumas informações sobre o primeiro bloco de texto simples e sobre qualquer prefixo comum compartilhado pelas duas mensagens.

Para OFB e CTR, a reutilização de um IV causa a reutilização do fluxo de bits de chave, o que quebra a segurança. Isso pode ser visto porque ambos os modos criam efetivamente um fluxo de bits que é XORed com o texto simples, e esse fluxo de bits depende apenas da chave e do IV.

No modo CBC, o IV deve ser imprevisível ( aleatório ou pseudo - aleatório ) no momento da criptografia; em particular, a (anteriormente) prática comum de reutilizar o último bloco de texto cifrado de uma mensagem como o IV para a próxima mensagem é insegura (por exemplo, este método foi usado por SSL 2.0). Se um invasor souber o IV (ou o bloco anterior de texto cifrado) antes que o próximo texto simples seja especificado, ele pode verificar sua suposição sobre o texto simples de algum bloco que foi criptografado com a mesma chave antes (isso é conhecido como ataque TLS CBC IV) .

Para algumas chaves, um vetor de inicialização totalmente zero pode gerar alguns modos de criptografia de bloco (CFB-8, OFB-8) para obter o estado interno preso em zero. Para CFB-8, um IV totalmente zero e um texto simples totalmente zero, faz com que 1/256 das chaves não gerem criptografia, o texto simples é retornado como texto cifrado. Para OFB-8, usar todo o vetor de inicialização zero não gerará criptografia para 1/256 das chaves. A criptografia OFB-8 retorna o texto simples não criptografado para as chaves afetadas.

Alguns modos (como AES-SIV e AES-GCM-SIV) são construídos para serem mais resistentes ao uso incorreto, ou seja, resilientes a cenários em que a geração de aleatoriedade é falha ou está sob o controle do invasor.

  • O vetor de inicialização sintética (SIV) sintetiza um IV interno executando uma construção de função pseudo-aleatória (PRF) chamada S2V na entrada (dados adicionais e texto simples), evitando que quaisquer dados externos controlem diretamente o IV. Nonces / IV externos podem ser alimentados em S2V como um campo de dados adicional.
  • O AES-GCM-SIV sintetiza um IV interno executando o modo POLYVAL Galois de autenticação na entrada (dados adicionais e texto simples), seguido por uma operação AES.

Preenchimento

Uma cifra de bloco funciona em unidades de tamanho fixo (conhecido como tamanho de bloco ), mas as mensagens vêm em uma variedade de comprimentos. Portanto, alguns modos (a saber, ECB e CBC ) exigem que o bloco final seja preenchido antes da criptografia. Existem vários esquemas de preenchimento . O mais simples é adicionar bytes nulos ao texto simples para aumentar seu comprimento até um múltiplo do tamanho do bloco, mas deve-se tomar cuidado para que o comprimento original do texto simples possa ser recuperado; isso é trivial, por exemplo, se o texto simples for uma string de estilo C que não contém bytes nulos, exceto no final. Um pouco mais complexo é o método DES original , que consiste em adicionar um único bit , seguido de bits zero suficientes para preencher o bloco; se a mensagem terminar em um limite de bloco, um bloco de preenchimento inteiro será adicionado. Mais sofisticados são os esquemas específicos de CBC, como roubo de texto cifrado ou terminação de bloco residual , que não causa nenhum texto cifrado extra, às custas de alguma complexidade adicional. Schneier e Ferguson sugerem duas possibilidades, ambas simples: acrescentar um byte com valor 128 (hex 80), seguido por quantos bytes zero forem necessários para preencher o último bloco, ou preencher o último bloco com n bytes, todos com valor n .

Os modos CFB, OFB e CTR não requerem quaisquer medidas especiais para lidar com mensagens cujos comprimentos não sejam múltiplos do tamanho do bloco, uma vez que os modos funcionam por XORing do texto simples com a saída da cifra do bloco. O último bloco parcial de texto simples é XORed com os primeiros poucos bytes do último bloco de fluxo de chaves , produzindo um bloco final de texto cifrado que é do mesmo tamanho que o bloco final de texto simples parcial. Essa característica das cifras de fluxo os torna adequados para aplicativos que exigem que os dados de texto criptografado criptografados tenham o mesmo tamanho que os dados de texto simples original e para aplicativos que transmitem dados em forma de fluxo onde é inconveniente adicionar bytes de preenchimento.

Modos comuns

Criptografia autenticada com modos de dados adicionais (AEAD)

Vários modos de operação foram projetados para combinar sigilo e autenticação em uma única primitiva criptográfica. Exemplos de tais modos são encadeamento de bloco de cifra estendido (XCBC) , encadeamento de bloco de cifra com reconhecimento de integridade (IACBC) , modo paralelizável com reconhecimento de integridade (IAPM), OCB , EAX , CWC , CCM e GCM . Os modos de criptografia autenticados são classificados como modos de passagem única ou modos de passagem dupla. Alguns algoritmos de criptografia autenticados de passagem única , como o modo OCB , são sobrecarregados por patentes, enquanto outros foram especificamente projetados e lançados de forma a evitar tais obstáculos.

Além disso, alguns modos também permitem a autenticação de dados associados não criptografados e são chamados de esquemas AEAD (criptografia autenticada com dados associados). Por exemplo, o modo EAX é um esquema AEAD de passagem dupla, enquanto o modo OCB é uma passagem única.

Galois / contador (GCM)

GCM
Galois / contador
Encriptação paralelizável sim
Descriptografia paralelizável sim
Acesso de leitura aleatória sim

O modo Galois / contador (GCM) combina o conhecido modo contador de criptografia com o novo modo Galois de autenticação. O principal recurso é a facilidade de computação paralela da multiplicação do campo de Galois usada para autenticação. Esse recurso permite uma taxa de transferência mais alta do que os algoritmos de criptografia.

GCM é definido para cifras de bloco com um tamanho de bloco de 128 bits. O código de autenticação de mensagem Galois (GMAC) é uma variante somente de autenticação do GCM que pode formar um código de autenticação de mensagem incremental. Tanto o GCM quanto o GMAC podem aceitar vetores de inicialização de comprimento arbitrário. O GCM pode aproveitar ao máximo o processamento paralelo e a implementação do GCM pode fazer uso eficiente de um pipeline de instrução ou de um pipeline de hardware. O modo de operação CBC incorre em paralisações do pipeline que prejudicam sua eficiência e desempenho.

Como no CTR, os blocos são numerados sequencialmente e, em seguida, esse número de bloco é combinado com um IV e criptografado com uma cifra de bloco E , geralmente AES. O resultado dessa criptografia é então XORed com o texto simples para produzir o texto cifrado. Como todos os modos de contador, isso é essencialmente uma cifra de fluxo e, portanto, é essencial que um IV diferente seja usado para cada fluxo criptografado.

Operação de criptografia GCM

Os blocos de texto cifrado são considerados coeficientes de um polinômio que é então avaliado em um ponto H dependente de chave , usando aritmética de campo finito . O resultado é então criptografado, produzindo uma tag de autenticação que pode ser usada para verificar a integridade dos dados. O texto criptografado contém o IV, o texto cifrado e a tag de autenticação.

Contador com código de autenticação de mensagem de encadeamento de bloco de criptografia (CCM)

Contador com código de autenticação de mensagem de encadeamento de bloco de criptografia (contador com CBC-MAC; CCM) é umalgoritmo de criptografia autenticado projetado para fornecer autenticação e confidencialidade . O modo CCM é definido apenas para cifras de bloco com um comprimento de bloco de 128 bits.

Vetor de inicialização sintética (SIV)

O vetor de inicialização sintética (SIV) é um modo de codificação de bloco resistente ao uso incorreto de nonce.

O SIV sintetiza um IV interno usando a função pseudo-aleatória S2V. S2V é um hash codificado baseado em CMAC, e a entrada para a função é:

  • Dados autenticados adicionais (zero, um ou muitos campos AAD são suportados)
  • Texto simples
  • Chave de autenticação (K 1 ).

O SIV criptografa a saída S2V e o texto simples usando AES-CTR, codificado com a chave de criptografia (K 2 ).

O SIV pode suportar criptografia autenticada baseada em nonce externa, caso em que um dos campos de dados autenticados é utilizado para essa finalidade. O RFC5297 especifica que, para fins de interoperabilidade, o último campo de dados autenticado deve ser usado externamente.

Devido ao uso de duas chaves, a chave de autenticação K 1 e a chave de criptografia K 2 , os esquemas de nomenclatura para variantes do SIV AEAD podem levar a alguma confusão; por exemplo AEAD_AES_SIV_CMAC_256 refere-se a AES-SIV com duas chaves AES-128 e não AES-256.

AES-GCM-SIV

AES-GCM-SIV é um modo de operação para o Advanced Encryption Standard que oferece desempenho semelhante ao modo Galois / contador , bem como resistência ao uso indevido no caso de reutilização de um nonce criptográfico . A construção é definida no RFC 8452.

AES-GCM-SIV sintetiza o IV interno. Ele deriva um hash dos dados autenticados adicionais e do texto simples usando a função de hash POLYVAL Galois. O hash é então criptografado com uma chave AES e usado como tag de autenticação e vetor de inicialização AES-CTR.

AES-GCM-SIV é uma melhoria em relação ao algoritmo de nome muito semelhante GCM-SIV , com algumas mudanças muito pequenas (por exemplo, como AES-CTR é inicializado), mas que produz benefícios práticos para sua segurança "Esta adição permite criptografar até 2 50 mensagens com a mesma chave, em comparação com a limitação significativa de apenas 2 32 mensagens permitidas com o GCM-SIV. "

Modos apenas de confidencialidade

Muitos modos de operação foram definidos. Alguns deles são descritos abaixo. O objetivo dos modos de cifra é mascarar padrões que existem em dados criptografados, conforme ilustrado na descrição da fraqueza do ECB .

Os diferentes modos de cifra mascaram os padrões ao colocar saídas em cascata do bloco de cifra ou outras variáveis ​​globalmente determinísticas para o bloco de cifra subsequente. As entradas dos modos listados estão resumidas na seguinte tabela:

Resumo dos modos
Modo Fórmulas Texto cifrado
Livro de código eletrônico (BCE) Y i = F (PlainText i , Chave) Sim eu
Encadeamento de blocos de cifras (CBC) Y i = PlainText i XOR Texto cifrado i −1 F (Y, tecla); Texto cifrado 0 = IV
Propagando CBC (PCBC) Y i = PlainText i XOR (Texto cifrado i −1 XOR PlainText i −1 ) F (Y, tecla); Texto cifrado 0 = IV
Feedback de cifra (CFB) Y i = Texto cifrado i −1 Texto simples XOR F (Y, chave); Texto cifrado 0 = IV
Feedback de saída (OFB) Y i = F (Y i −1 , Chave); Y 0 = F (IV, Chave) Texto simples XOR Y i
Contador (CTR) Y i = f (IV + g ( i ), Chave); IV = token () Texto simples XOR Y i

Nota: g ( i ) é qualquer função determinística, geralmente a função de identidade .

Livro de código eletrônico (BCE)

BCE
Livro de código eletrônico
Encriptação paralelizável sim
Descriptografia paralelizável sim
Acesso de leitura aleatória sim

O mais simples dos modos de criptografia é o modo de livro de código eletrônico (ECB) (nomeado após livros de código físicos convencionais ). A mensagem é dividida em blocos e cada bloco é criptografado separadamente.

Encriptação BCE.svg ECB decryption.svg

A desvantagem desse método é a falta de difusão . Porque BCE criptografa idênticos texto plano blocos em idênticas texto cifrado blocos, ele não esconde padrões de dados bem. ECB não é recomendado para uso em protocolos criptográficos.

Um exemplo notável do grau em que o ECB pode deixar padrões de dados de texto simples no texto cifrado pode ser visto quando o modo ECB é usado para criptografar uma imagem de bitmap que usa grandes áreas de cores uniformes. Embora a cor de cada pixel individual seja criptografada, a imagem geral ainda pode ser discernida, pois o padrão de pixels com cores idênticas no original permanece na versão criptografada.

Imagem original
Criptografado usando o modo ECB
Modos diferentes de ECB resultam em pseudo-aleatoriedade
A terceira imagem é como a imagem pode aparecer criptografada com CBC, CTR ou qualquer um dos outros modos mais seguros - indistinguível de ruído aleatório. Observe que a aparência aleatória da terceira imagem não garante que a imagem foi criptografada com segurança; muitos tipos de criptografia insegura foram desenvolvidos, o que produziria uma saída com "aparência aleatória".

O modo ECB também pode tornar os protocolos sem proteção de integridade ainda mais suscetíveis a ataques de repetição , uma vez que cada bloco é descriptografado exatamente da mesma maneira.

Cipher block chaining (CBC)

CBC
Encadeamento de blocos de cifras
Encriptação paralelizável Não
Descriptografia paralelizável sim
Acesso de leitura aleatória sim

Ehrsam, Meyer, Smith e Tuchman inventaram o modo de operação Cipher Block Chaining (CBC) em 1976. No modo CBC, cada bloco de texto simples é XORed com o bloco de texto cifrado anterior antes de ser criptografado. Dessa forma, cada bloco de texto cifrado depende de todos os blocos de texto simples processados ​​até aquele ponto. Para tornar cada mensagem única, um vetor de inicialização deve ser usado no primeiro bloco.

Encriptação do modo Cipher Block Chaining (CBC)
Descriptografia do modo Cipher Block Chaining (CBC)

Se o primeiro bloco tiver índice 1, a fórmula matemática para criptografia CBC é

enquanto a fórmula matemática para a descriptografia CBC é

Exemplo
Exemplo CBC com uma cifra de brinquedo de 2 bits
Exemplo CBC com uma cifra de brinquedo de 2 bits

CBC tem sido o modo de operação mais comumente usado. Suas principais desvantagens são que a criptografia é sequencial (ou seja, não pode ser paralelizada) e que a mensagem deve ser preenchida para um múltiplo do tamanho do bloco de criptografia. Uma maneira de lidar com esse último problema é por meio do método conhecido como roubo de texto cifrado . Observe que uma alteração de um bit em um texto simples ou vetor de inicialização (IV) afeta todos os blocos de texto cifrado seguintes.

A descriptografia com o IV incorreto causa a corrupção do primeiro bloco de texto simples, mas os blocos de texto simples subsequentes estarão corretos. Isso ocorre porque cada bloco é XORed com o texto cifrado do bloco anterior, não o texto simples, portanto, não é necessário descriptografar o bloco anterior antes de usá-lo como o IV para a descriptografia do atual. Isso significa que um bloco de texto simples pode ser recuperado de dois blocos adjacentes de texto cifrado. Como consequência, a descriptografia pode ser paralelizada. Observe que uma alteração de um bit no texto cifrado causa corrupção completa do bloco correspondente de texto simples e inverte o bit correspondente no bloco seguinte de texto simples, mas o restante dos blocos permanece intacto. Essa peculiaridade é explorada em diferentes ataques de oráculo de preenchimento , como POODLE .

Os vetores de inicialização explícitos aproveitam essa propriedade adicionando um único bloco aleatório ao texto simples. A criptografia é feita normalmente, exceto que o IV não precisa ser comunicado à rotina de descriptografia. Qualquer que seja o uso da descriptografia IV, apenas o bloco aleatório é "corrompido". Ele pode ser descartado com segurança e o resto da descriptografia é o texto simples original.

Propagando encadeamento de blocos de criptografia (PCBC)
PCBC
Propagando encadeamento de blocos de cifras
Encriptação paralelizável Não
Descriptografia paralelizável Não
Acesso de leitura aleatória Não

O encadeamento de bloco de cifra de propagação ou modo de encadeamento de bloco de cifra de texto simples foi projetado para fazer com que pequenas alterações no texto cifrado se propaguem indefinidamente ao descriptografar, bem como ao criptografar. No modo PCBC, cada bloco de texto simples é XORed com o bloco de texto simples anterior e o bloco de texto cifrado anterior antes de ser criptografado. Como no modo CBC, um vetor de inicialização é usado no primeiro bloco.

Criptografia do modo de propagação de encadeamento de blocos de criptografia (PCBC)
Descriptografia do modo de propagação de encadeamento de blocos de criptografia (PCBC)

Os algoritmos de criptografia e descriptografia são os seguintes:

PCBC é usado no Kerberos v4 e WASTE , principalmente, mas não é comum. Em uma mensagem criptografada no modo PCBC, se dois blocos de texto cifrado adjacentes forem trocados, isso não afetará a descriptografia dos blocos subsequentes. Por esse motivo, o PCBC não é usado no Kerberos v5.

Feedback de cifra (CFB)

CFB de bloco completo
CFB
Feedback de cifra
Encriptação paralelizável Não
Descriptografia paralelizável sim
Acesso de leitura aleatória sim

O modo de feedback de cifra (CFB), em sua forma mais simples, usa toda a saída da cifra de bloco. Nesta variação, é muito semelhante ao CBC, transforma uma cifra de bloco em uma cifra de fluxo de sincronização automática . A descriptografia CFB nesta variação é quase idêntica à criptografia CBC realizada ao contrário:

Criptografia CFB.svg CFB decryption.svg

CFB-1, CFB-8, CFB-64, CFB-128, etc.

NIST SP800-38A define CFB com uma largura de bits. O modo CFB também requer um parâmetro inteiro, denotado s, tal que 1 ≤ s ≤ b. Na especificação do modo CFB abaixo, cada segmento de texto simples (Pj) e segmento de texto cifrado (Cj) consiste em s bits. O valor de s às vezes é incorporado ao nome do modo, por exemplo, o modo CFB de 1 bit, o modo CFB de 8 bits, o modo CFB de 64 bits ou o modo CFB de 128 bits.

Esses modos truncarão a saída da cifra de bloco subjacente.

CFB-1 é considerado autossincronizador e resiliente à perda de texto cifrado; "Quando o modo CFB de 1 bit é usado, a sincronização é restaurada automaticamente posições b + 1 após o bit inserido ou excluído. Para outros valores de s no modo CFB, e para os outros modos de confidencialidade nesta recomendação, a sincronização deve ser restaurado externamente. " (NIST SP800-38A). Ou seja, a perda de 1 bit em uma cifra de bloco de 128 bits como AES renderá 129 bits inválidos antes de emitir bits válidos.

O CFB também pode se sincronizar automaticamente em alguns casos especiais além dos especificados. Por exemplo, uma mudança de um bit no CFB-128 com uma cifra de bloco de 128 bits subjacente será ressincronizada após dois blocos. (No entanto, CFB-128 etc. não lidará com a perda de bits normalmente; uma perda de um bit fará com que o descriptografador perca o alinhamento com o criptografador)

CFB em comparação com outros modos

Como o modo CBC, as alterações no texto simples se propagam para sempre no texto cifrado e a criptografia não pode ser paralelizada. Também como o CBC, a descriptografia pode ser paralelizada.

CFB, OFB e CTR compartilham duas vantagens sobre o modo CBC: a cifra de bloco só é usada na direção de criptografia e a mensagem não precisa ser preenchida para um múltiplo do tamanho do bloco de cifragem (embora o roubo de texto cifrado também possa ser usado para Modo CBC para tornar o preenchimento desnecessário).

Feedback de saída (OFB)

OFB
Feedback de saída
Encriptação paralelizável Não
Descriptografia paralelizável Não
Acesso de leitura aleatória Não

O modo de feedback de saída (OFB) transforma uma cifra de bloco em uma cifra de fluxo síncrono . Ele gera blocos de fluxo de chaves , que são submetidos a XOR com os blocos de texto simples para obter o texto cifrado. Assim como com outras cifras de fluxo, inverter um pouco no texto cifrado produz um bit invertido no texto simples no mesmo local. Esta propriedade permite que muitos códigos de correção de erros funcionem normalmente, mesmo quando aplicados antes da criptografia.

Devido à simetria da operação XOR, a criptografia e a descriptografia são exatamente as mesmas:

OFB criptografia.svg OFB decryption.svg

Cada operação de cifra de bloco de feedback de saída depende de todas as anteriores e, portanto, não pode ser executada em paralelo. No entanto, como o texto simples ou texto cifrado é usado apenas para o XOR final, as operações de cifragem de bloco podem ser realizadas com antecedência, permitindo que a etapa final seja executada em paralelo, uma vez que o texto simples ou texto cifrado esteja disponível.

É possível obter um fluxo de chaves do modo OFB usando o modo CBC com uma string constante de zeros como entrada. Isso pode ser útil, pois permite o uso de implementações de hardware rápidas do modo CBC para criptografia no modo OFB.

Usar o modo OFB com um bloqueio parcial como feedback, como o modo CFB, reduz a duração média do ciclo por um fator de 2 32 ou mais. Um modelo matemático proposto por Davies e Parkin e substanciado por resultados experimentais mostrou que apenas com feedback completo um comprimento de ciclo médio próximo ao máximo obtido pode ser alcançado. Por esse motivo, o suporte para feedback truncado foi removido da especificação do OFB.

Contador (CTR)

CTR
Contador
Encriptação paralelizável sim
Descriptografia paralelizável sim
Acesso de leitura aleatória sim
Observação: o modo CTR (CM) também é conhecido como modo de contador inteiro (ICM) e modo de contador inteiro segmentado (SIC).

Como o OFB, o modo contador transforma uma cifra de bloco em uma cifra de fluxo . Ele gera o próximo bloco de fluxo de chaves criptografando valores sucessivos de um "contador". O contador pode ser qualquer função que produza uma sequência que não se repita por muito tempo, embora um contador real de incremento por um seja o mais simples e o mais popular. O uso de uma função de entrada determinística simples costumava ser controverso; os críticos argumentaram que "expor deliberadamente um criptosistema a uma entrada sistemática conhecida representa um risco desnecessário". No entanto, hoje o modo CTR é amplamente aceito e quaisquer problemas são considerados uma fraqueza da cifra de bloco subjacente, que se espera que seja segura, independentemente do viés sistêmico em sua entrada. Junto com o CBC, o modo CTR é um dos dois modos de cifra de bloco recomendados por Niels Ferguson e Bruce Schneier.

O modo CTR foi introduzido por Whitfield Diffie e Martin Hellman em 1979.

O modo CTR tem características semelhantes ao OFB, mas também permite uma propriedade de acesso aleatório durante a descriptografia. O modo CTR é adequado para operar em uma máquina com vários processadores, onde os blocos podem ser criptografados em paralelo. Além disso, não sofre do problema de ciclo curto que pode afetar o OFB.

Se o IV / nonce for aleatório, eles podem ser combinados com o contador usando qualquer operação invertível (concatenação, adição ou XOR) para produzir o bloco de contador exclusivo real para criptografia. No caso de um nonce não aleatório (como um contador de pacote), o nonce e o contador devem ser concatenados (por exemplo, armazenar o nonce nos 64 bits superiores e o contador nos 64 bits inferiores de um bloco de contador de 128 bits) . Simplesmente adicionar ou aplicar XOR no nonce e no contador em um único valor quebraria a segurança sob um ataque de texto simples escolhido em muitos casos, uma vez que o invasor pode ser capaz de manipular todo o par IV-contador para causar uma colisão. Uma vez que um invasor controla o par IV-contador e o texto simples, XOR do texto cifrado com o texto simples conhecido produziria um valor que, quando XORed com o texto cifrado do outro bloco compartilhando o mesmo par IV-contador, decodificaria esse bloco.

Observe que o nonce neste diagrama é equivalente ao vetor de inicialização (IV) nos outros diagramas. No entanto, se as informações de deslocamento / localização estiverem corrompidas, será impossível recuperar parcialmente esses dados devido à dependência do deslocamento de bytes.

Criptografia CTR 2.svg Descriptografia CTR 2.svg

Propagação de erro

As propriedades de "propagação de erro" descrevem como uma descriptografia se comporta durante erros de bit, ou seja, como o erro em um bit se espalha para diferentes bits descriptografados.

Erros de bit podem ocorrer aleatoriamente devido a erros de transmissão.

Erros de bits podem ocorrer intencionalmente em ataques.

  • Erros de bit específicos em modos de cifra de fluxo (OFB, CTR, etc.) são triviais e afetam apenas o bit específico pretendido.
  • Erros de bits específicos em modos mais complexos, como (por exemplo, CBC): o ataque de texto cifrado escolhido adaptável pode combinar de forma inteligente muitos erros de bits específicos diferentes para quebrar o modo de cifra. No ataque Padding oracle , o CBC pode ser descriptografado no ataque ao adivinhar os segredos de criptografia com base nas respostas de erro. A variante de ataque Padding Oracle "CBC-R" (CBC Reverse) permite que o invasor construa qualquer mensagem válida.

Para criptografia autenticada moderna (AEAD) ou protocolos com códigos de autenticação de mensagem encadeados na ordem MAC-Then-Encrypt, qualquer erro de bit deve abortar completamente a descriptografia e não deve gerar nenhum erro de bit específico para o descriptografador. Ou seja, se a descriptografia for bem-sucedida, não deve haver nenhum erro de bit. Como tal, a propagação de erros é um assunto menos importante nos modos de cifra modernos do que nos modos tradicionais apenas de confidencialidade.

Modo Efeito de erros de bits em C i Efeito de erros de bit no IV
BCE Erros de bit aleatórios em P i Não aplicável
CBC Erros de bits aleatórios em P i
Erros de bits específicos em P i + 1
Erros de bits específicos na descriptografia de C 1
CFB Erros de bits específicos em P i
Erros de bits aleatórios em P i + 1
Erros de bits aleatórios na descriptografia de C 1
OFB Erros de bit específicos em P i Erros de bits aleatórios na descriptografia de C 1 , C 2 , .., C n
CTR Erros de bit específicos em P i Não aplicável (erros de bit no j-ésimo bloco do contador, T j , resultam em erros de bit aleatórios na descriptografia de C j )

(Fonte: SP800-38A Tabela D.2: Resumo do efeito dos erros de bits na descriptografia)

Pode ser observado, por exemplo, que um erro de um bloco no texto cifrado transmitido resultaria em um erro de um bloco no texto simples reconstruído para criptografia no modo ECB, enquanto no modo CBC tal erro afetaria dois blocos. Alguns achavam que tal resiliência era desejável em face de erros aleatórios (por exemplo, ruído de linha), enquanto outros argumentavam que a correção de erros aumentava o escopo para os invasores adulterarem uma mensagem de forma maliciosa.

No entanto, quando a proteção de integridade adequada é usada, tal erro resultará (com alta probabilidade) na rejeição de toda a mensagem. Se a resistência a erros aleatórios for desejável, códigos de correção de erros devem ser aplicados ao texto cifrado antes da transmissão.

Outros modos e outras primitivas criptográficas

Muitos outros modos de operação para cifras de bloco foram sugeridos. Alguns foram aceitos, totalmente descritos (até padronizados) e estão em uso. Outros foram considerados inseguros e nunca deveriam ser usados. Outros ainda não categorizam como confidencialidade, autenticidade ou criptografia autenticada - por exemplo , modo de feedback de chave e hashing Davies-Meyer .

O NIST mantém uma lista de modos propostos para cifras de bloco em Desenvolvimento de modos .

A criptografia de disco geralmente usa modos de propósito especial projetados especificamente para o aplicativo. Modos de criptografia de bloco estreito ajustáveis ​​( LRW , XEX e XTS ) e modos de criptografia de bloco amplo ( CMC e EME ) são projetados para criptografar setores de um disco com segurança (consulte a teoria de criptografia de disco ).

Muitos modos usam um vetor de inicialização (IV) que, dependendo do modo, pode ter requisitos como ser usado apenas uma vez (um nonce) ou ser imprevisível antes de sua publicação, etc. Reutilizar um IV com a mesma chave em CTR, GCM ou o modo OFB resulta no XORing do mesmo fluxo de chaves com dois ou mais textos simples, um claro uso indevido de um fluxo, com uma perda catastrófica de segurança. Os modos de criptografia autenticados determinísticos, como o algoritmo NIST Key Wrap e o modo SIV (RFC 5297) AEAD, não exigem um IV como entrada e retornam o mesmo texto cifrado e marca de autenticação sempre para um determinado texto simples e chave. Outros modos resistentes ao uso indevido de IV, como AES-GCM-SIV, se beneficiam de uma entrada IV, por exemplo, na quantidade máxima de dados que podem ser criptografados com segurança com uma chave, sem falhar catastroficamente se o mesmo IV for usado várias vezes.

As cifras de bloco também podem ser usadas em outros protocolos criptográficos . Eles são geralmente usados ​​em modos de operação semelhantes aos modos de bloco descritos aqui. Como acontece com todos os protocolos, para ser criptograficamente seguro, deve-se tomar cuidado para projetar esses modos de operação corretamente.

Existem vários esquemas que usam uma cifra de bloco para construir uma função hash criptográfica . Consulte a função de compressão unilateral para obter descrições de vários desses métodos.

Geradores de números pseudo-aleatórios criptograficamente seguros (CSPRNGs) também podem ser construídos usando cifras de bloco.

Os códigos de autenticação de mensagens (MACs) geralmente são criados a partir de cifras de bloco. CBC-MAC , OMAC e PMAC são exemplos.

Veja também

Referências