Ciphertext roubo - Ciphertext stealing

Em criptografia , roubo texto cifrado ( CTS ) é um método geral de utilização de um modo de bloco de cifra de funcionamento que permite o processamento de mensagens que não são divisíveis em blocos sem resultar em qualquer expansão do texto cifrado , com o custo de um ligeiro aumento da complexidade.

Características gerais

Texto cifrado roubar é uma técnica para codificar em texto utilizando uma codificação de bloco, sem preenchimento a mensagem a um múltiplo do tamanho do bloco, de modo que o texto cifrado é do mesmo tamanho que o texto simples.

Ele faz isso, alterando o processamento dos dois últimos blocos da mensagem. O processamento de todos, mas os últimos dois blocos está inalterada, mas uma parte do segundo texto cifrado do bloco -última é "roubada" para preencher o último bloco de texto simples. O bloco final acolchoado é então criptografado, como de costume.

O texto cifrado final, para os dois últimos blocos, consiste no bloco penúltimo parcial (com a porção "roubado" omitido) mais o bloco final completo, que são do mesmo tamanho que o texto original inicial.

Descriptografia requer desencriptar o primeiro bloco final, depois recolocando o texto cifrado roubado ao bloco penúltimo, o qual pode, então, ser descriptografado, como de costume.

Em princípio, qualquer orientada para o bloco modo de cifra de bloco de operação pode ser usado, mas modos de stream-cifra-como já pode ser aplicada a mensagens de comprimento arbitrário, sem preenchimento, para que eles não se beneficiam desta técnica. Os comuns modos de operação que são acoplados com roubo texto cifrado são Eletrônico Codebook (BCE) e Cipher Block Chaining (CBC).

Ciphertext roubar para o modo BCE exige que o texto simples para ser mais do que um bloco . Uma possível solução alternativa é a utilização de um fluxo de cifra-como modo de operação , quando o comprimento de texto simples é um bloco ou menos, tal como o CTR, CFB ou modos ofb.

Roubo texto cifrado para CBC modo não requer necessariamente o texto simples para ser mais do que um bloco . No caso em que o texto simples é um bloco longo ou menos, o vector de inicialização (IV) pode agir como o bloco antes da mensagem cifrada. Neste caso, um IV modificado deve ser enviada para o receptor. Isto pode não ser possível em situações em que a IV não podem ser livremente escolhidas pelo emissor quando o texto cifrado é enviada (por exemplo, quando o IV é um derivado ou valor pré-estabelecido), e neste caso o texto cifrado roubo para CBC modo só pode ocorrer em textos simples mais longos do que um bloco.

Para implementar a criptografia CTS ou descodificação para os dados de comprimento desconhecido, a aplicação deve atrasar o processamento (e tampão) os dois blocos mais recentes de dados, de modo que eles podem ser adequadamente processados ​​no final do fluxo de dados.

formato de texto cifrado

Existem várias maneiras diferentes de organizar o texto cifrado para a transmissão. Os bits de texto cifrado são os mesmos em todos os casos, apenas transmitido em uma ordem diferente, por isso a escolha não tem implicações de segurança; é puramente um de conveniência implementação.

A numeração aqui é tirado de Dworkin, que todos eles descreve. O terceiro é o mais popular, e descrito por Daemen e Schneier ; Meyer descreve um esquema relacionado, mas incompatíveis (com relação à ordenação pouco e uso de chave).

CS1

Sem dúvida a maneira mais óbvia para organizar o texto cifrado é transmitir o bloco penúltima truncado, seguido pelo bloco final completo. Isso não é conveniente para o receptor, por duas razões:

  1. O receptor deve decifrar o bloco final pela primeira vez em qualquer caso, e
  2. Isso resulta no bloco final não sendo alinhado em um limite natural, complicando implementações de hardware.

Este tem a vantagem de que, se o bloco de texto simples final, passa a ser um múltiplo do tamanho do bloco, o texto cifrado é idêntico ao do modo original de funcionamento sem roubar texto cifrado.

CS2

Muitas vezes, é mais conveniente para trocar os dois últimos blocos de texto cifrado, de modo que o texto cifrado termina com o bloco final completo, seguido pelo bloco penúltima truncada. Isto resulta em blocos de texto cifrado alinhadas naturalmente.

A fim de manter a compatibilidade com os modos não roubando, opção CS2 realiza esta troca somente se a quantidade de texto cifrado roubado é diferente de zero, ou seja, a mensagem original não era um múltiplo do tamanho do bloco.

Isto mantém o alinhamento natural, e de compatibilidade com os modos não-roubo, mas requer o tratamento de casos de tamanho mensagem alinhadas e desalinhadas de forma diferente.

CS3

A alternativa mais popular troca os dois últimos blocos de texto cifrado incondicionalmente. Esta é a ordenação utilizada nas descrições abaixo.

Ciphertext descrição do modo de roubo

A fim de criptografar ou descriptografar dados, use o padrão modo de bloco cifra de operação em todos, mas os dois últimos blocos de dados.

Os passos que se seguem descrevem a forma de lidar com os dois últimos blocos de texto simples, o chamado P n -1 e P n , onde o comprimento de P n -1 iguala o tamanho do bloco de cifra em bits, B ; o comprimento do último bloco, P n , é M bits; e K é a chave que está em uso. M pode variar de 1 a B , inclusive, para P n poderia ser um bloco completo. A descrição do modo CBC também faz uso do bloco de texto cifrado apenas anterior para os blocos em causa, C N -2 , que podem de facto ser a IV, se o texto simples se encaixa dentro de dois blocos.

Para esta descrição, as seguintes funções e operadores são usados:

  • Head (dados, a ): retorna os primeiros de pedaços de corda os 'dados'.
  • Cauda (dados, um ): Retorna o último um pedaços de corda os 'dados'.
  • Criptografar ( K , dados): usar a cifra de bloco subjacente no modo de criptografar a string 'dados' usando a chave K .
  • Descriptografar ( K , dados): usar a cifra de bloco subjacente no modo descriptografar na string 'dados' usando a chave K .
  • XOR : Bitwise Exclusive-OR. Equivalente a bit a bit disso, sem o uso de um bit de transporte.
  • ||: A concatenação operador. Combine as cordas em cada lado do operador.
  • 0 a : uma corda de um 0 bits.

roubo texto cifrado BCE

Texto cifrado roubo no modo BCE introduz uma dependência inter-bloqueio nos dois últimos blocos, o que resulta em comportamento de propagação de erro alterada para os dois últimos blocos.

passos de criptografia BCE (ver figura)

BCE criptografia Passos para CTS
  1. E n -1 = encriptar ( K , P n -1 ). Criptografar P n -1 para criar E n -1 . Isto é equivalente ao comportamento de modo ECB padrão.
  2. C n = Cabeça ( E n -1 , M ). Seleccionar os primeiros M bits de E n -1 para criar C n . O bloco de texto cifrado final, C n , é composto dos principais M bits do segundo ao último bloco de texto cifrado. Em todos os casos, os dois últimos blocos são enviados em uma ordem diferente do que os blocos de texto simples correspondentes.
  3. D n = P n || Cauda ( E n -1 , B - H ). Almofada P n com os bits de baixa ordem de E n -1 .
  4. C n -1 = encriptar ( K , D n ). Criptografar D n para criar C n -1 . Para os primeiros M pedaços, isso é equivalente ao que aconteceria em modo BCE (para além da ordenação texto cifrado). Para o último B - M pedaços, esta é a segunda vez que estes dados foram criptografados sob esta chave (Já foi cifrada na produção de E n -1 no passo 2).

etapas de decodificação do BCE

  1. D n = Decrypt ( K , C n -1 ). Descriptografar C n -1 para criar D n . Este desfaz o passo 4 do processo de encriptação.
  2. E n -1 = C n || Cauda ( D n , B - H ). Pad C n com o texto cifrado extraída na extremidade da cauda de D n (ali colocado no passo 3 do processo de criptografia BCE).
  3. P n = Cabeça ( D N , M ). Seleccionar os primeiros M bits de D n para criar P n . Tal como descrito no passo 3 do processo de criptografia BCE, os primeiros M bits de D n conter P n . Nós fila neste último bloco (possivelmente parcial) para uma eventual saída.
  4. P n -1 = Decrypt ( K , E n -1 ). Descriptografar E n -1 para criar P n -1 . Isto inverte passo encriptação de um.

propagação de erros roubo texto cifrado BCE

Um erro de bit na transmissão de C n -1 resultaria em corrupção de grande bloco de ambos P n -1 e P n . Um erro de bit na transmissão de C n resultaria em corrupção de grande bloco de P n -1 . Esta é uma mudança significativa de comportamento propagação de erros do BCE.

CBC roubo texto cifrado

Em CBC, já existe interacção entre o processamento de diferentes blocos adjacentes, de modo CTS tem impacto menos conceptual neste modo. propagação do erro é afectada.

etapas de criptografia CBC

  1. X n -1 = P n -1 XOR C n -2 . EX-OR P n -1 com o bloco de texto cifrado anterior, C N -2 , para criar X n -1 . Isto é equivalente ao comportamento de modo CBC padrão.
  2. E n -1 = encriptar ( K , X n -1 ). Criptografar X n -1 para criar E n -1 . Isto é equivalente ao comportamento de modo CBC padrão.
  3. C n = Cabeça ( E n -1 , M ). Seleccionar os primeiros M bits de E n -1 para criar C n . O bloco de texto cifrado final, C n , é composto dos principais M bits do segundo ao último bloco de texto cifrado. Em todos os casos, os dois últimos blocos são enviados em uma ordem diferente do que os blocos de texto simples correspondentes.
  4. P = P n || 0 B - M . Almofada P n com zeros no final para criar P de comprimento B . O preenchimento zero nesta etapa é importante para a etapa 5.
  5. D n = E n -1 XOR P . EX-OR E n -1 com P para criar D n . Para os primeiros M bits do bloco, isto é equivalente a modo CBC; os primeiros M bits de texto cifrado do bloco anterior, E n -1 , são XORed com os M bits de texto simples do último bloco de texto simples. O preenchimento com zeros de P no passo 4 foi importante, porque faz com que o efeito da operação XOR na última B - M bits de equivalentes para copiar o último B - M os bits de E n -1 para o final de D n . Estes são os mesmos bits que foram descascados fora de E n -1 no passo 3 quando C n foi criado.
  6. C n -1 = encriptar ( K , D n ). Criptografar D n para criar C n -1 . Para os primeiros M pedaços, isso é equivalente ao que aconteceria no modo CBC (que não seja a ordenação texto cifrado). Para o último B - M pedaços, esta é a segunda vez que estes dados foram criptografados sob esta chave (Já foi cifrada na produção de E n -1 no passo 2).

passos descriptografia CBC

  1. D n = Decrypt ( K , C n -1 ). Descriptografar C n -1 para criar D n . Este desfaz passo 6 do processo de encriptação.
  2. C = C n || 0 B - M . Pad C n com zeros no fim para criar um bloco C de comprimento B . Estamos estofamento C n com zeros para ajudar no passo 3.
  3. X N = D n XOR C . EX-OR D N com C para criar X n . Olhando para os primeiros M bits de, este passo tem o resultado de XORing C n (os primeiros M bits do processo de encriptação E n -1 ) com o (agora descriptografado) P n XOR Cabeça ( E n -1 , M ) ( ver passos 4-5 do processo de criptografia). Em outras palavras, temos CBC desencriptados os primeiros M bits de P n . Olhando para o último B - M pedaços, este recupera a última B - M os bits de E n -1 .
  4. P n = Cabeça ( X N , M ). Seleccionar os primeiros M bits de X n para criar P n . Tal como descrito no passo 3, os primeiros M bits de X n conter P n . Nós fila neste último bloco (possivelmente parcial) para uma eventual saída.
  5. E n -1 = C n || Cauda ( X N , B - H ). Anexar a cauda ( B - H ) bits de X n a C n para criar E n -1 . Tal como descrito no passo 3, E n -1 é composto por todos C n (que é M bits de comprimento) em anexo com o último B - M bits de X n . Nós remontar E n -1 (que é o mesmo E n -1 visto no processo de codificação) para o processamento no passo 6.
  6. X n -1 = Decrypt ( K , E n -1 ). Descriptografar E n -1 para criar X n -1 . Isto inverte passo encriptação 2. X n -1 é o mesmo que no processo de encriptação.
  7. P n -1 = X n -1 XOR C n -2 . EX-OR X n -1 com o bloco de texto cifrado anterior, C N -2 , para criar P n -1 . Finalmente, inverter o passo XOR a partir do passo 1 do processo de encriptação.

notas de implementação CBC

Para CBC texto cifrado furto, há um método inteligente (mas opaco) de execução do processo de roubo texto cifrado descrito usando uma interface padrão CBC. Usando este método impõe uma penalidade de desempenho na fase de decodificação de uma operação de descriptografia bloco extra sobre o que seria necessário utilizar uma execução específica.

CBC texto cifrado roubar criptografia usando uma interface padrão CBC
  1. Pad o último bloco de texto simples parcial com 0.
  2. Criptografar todo o texto plano estofado usando o modo CBC padrão.
  3. Trocar os dois últimos blocos de texto cifrado.
  4. Truncar o texto cifrado para o comprimento do texto original originais.
Cifrado Roubar (CTS) em CBC, modo de criptografia
CBC texto cifrado roubar descriptografia usando uma interface padrão CBC
  1. D n = Decrypt ( K , C n -1 ). Descriptografar o segundo ao último bloco de texto cifrado.
  2. C n = C n || Cauda ( D n , B - H ). Pad o texto cifrado para o múltiplo mais próximo do tamanho do bloco usando o último B - M pedaços de bloco de descriptografia cifra do segundo ao último bloco de texto cifrado.
  3. Trocar os dois últimos blocos de texto cifrado.
  4. Decifrar a mensagem cifrada (modificado) utilizando o modo CBC padrão.
  5. Truncar o texto simples para o comprimento do texto cifrado originais.
Cifrado Roubar (CTS) em CBC, o modo de decodificação

CBC texto cifrado roubar propagação de erros

Um erro de bit na transmissão de C n -1 resultaria em corrupção de grande bloco de ambos P n -1 e P n . Um erro de bit na transmissão de C n iria resultar num erro de bit correspondente em P n , e na corrupção de grande bloco de P n -1 .

Referências

  • Daemen, Joan (1995). "2.5.1 e 2.5.2". Cipher e função Hash design, estratégias baseadas em Linear e Criptoanálise diferencial (PDF) (tese de doutorado). Katholieke Universiteit Leuven.
  • Schneier, Bruce (1995). Applied Cryptography (2nd ed.). John Wiley & Sons, Inc. pp. 191, 195. ISBN  0-471-12845-7 .
  • Meyer, Carl H .; Matyas, Stephen M. (1982). Criptografia: Uma nova dimensão em Computador Segurança de Dados . John Wiley & Sons, Inc. pp. 77 & ndash, 85. ISBN  0-471-04892-5 .
  • R. Baldwin; R. Rivest (Outubro de 1996). O RC5, RC5-CBC, RC5-CBC-Pad, e RC5-CTS Algoritmos . doi : 10,17487 / RFC2040 . RFC 2040 . https://tools.ietf.org/html/rfc2040 . 
  • Dworkin, Morris (Outubro de 2011). Recomendação para Bloco Modos cifra de Funcionamento: três variantes do texto cifrado que roubam para o modo CBC (PDF) . Instituto Nacional de Padrões e Tecnologia (NIST). Adenda ao NIST Especial Pub 800-38A.