• Nenhum resultado encontrado

4.3 Princípios de Criptossistemas de Chave Secreta

4.3.2 Princípios de Cifras de Blocos

Uma cifra de bloco é um criptossistema que divide as mensagens de texto simples a serem transmitidas em cadeias (chamados blocos) de um comprimento fixo t sobre um alfabeto A e criptografa um bloco de cada vez, produzindo um bloco de texto cifrado de igual comprimento. Tipicamente, é utilizado um bloco de tamanho 64 ou 128 bits. Duas importantes classes de cifras de bloco são cifras de substituição, cifras de transposição.

As cifras de produto são obtidas pela combinação das técnicas de substituição e transposição. As cifras simples de substituição e de transposição individualmente não proporcio- nam um nível de segurança muito elevado. No entanto, ao combinar estas duas transformações é possível obter cifras fortes, que são muito difíceis de serem descobertas pelo criptoanalista. A maioria dos sistemas de chave secreta utilizam cifras de produto.

Seja Ekuma operação de encriptação utilizando a chavek. Um exemplo de cifra de

produto é uma composição de t ≥ 2 transformações Ek1, Ek2, · · · , Ekt onde para cada Eki, 1

≥ i ≥ t, é uma substituição ou uma cifra de transposição. Normalmente a composição de uma substituição e uma transposição é chamada de “rodada"(DELFS; KNEBL, 2015).

Exemplo de cifra de produto: Seja M = C = K o conjunto de strings binárias de tamanho 6 bits. O número de elementos em M é 26= 64. Seja m = (m1m2...m6) e defina:

E(1)k (m) = m ⊕ k , onde k ∈ K, E(2)(m) = (m

4m5m6m1m2m3).

Aqui, ⊕ é uma operação lógica de ou-exclusivo (XOR). E(1)k é uma cifra de substi- tuição polialfabética e E(2) é uma cifra de transposição (não envolvendo a chave). a aplicação de

E(1)k seguida da aplicação de E(2)é uma rodada.

Uma cifra de bloco trabalha com um bloco de texto simples de n bits para produzir um bloco cifrado de n bits. Existem 2npossíveis blocos de texto simples e, para a encriptação

ser reversível, cada bloco de texto simples deve produzir apenas um único bloco de texto cifrado. Tal transformação é chamada reversível, ou não singular. Este tipo de transformação reversível limita a quantidade de mapeamentos entre o texto simples e a cifra em 2n! combinações. Para o

primeiro bloco de texto simples, pode-se escolher 2nblocos de texto cifrado, para o segundo

bloco, temos 2n - 1 e assim por diante. Para o último bloco de texto simples temos apenas 1

bloco de texto cifrado para mapear. Feistel refere-se a isto como a cifra de bloco ideal, porque permite o número máximo de possíveis mapeamentos de criptografia a partir do bloco de texto simples (STALLINGS, 2006).

Existe um problema prático com a cifra de bloco ideal. Para tamanhos de bloco pequenos, tal como n = 4, o sistema torna-se equivalente a uma cifra de substituição clássica. Esses sistemas, são vulneráveis a uma análise estatística de texto simples. Essa fraqueza não é inerente ao uso de uma cifra de substituição, mas resulta do uso de um bloco de tamanho pequeno. Se n for suficientemente grande e houver uma substituição arbitrária reversível entre o texto simples e o texto cifrado, então as características estatísticas do texto simples da fonte serão mascaradas de tal forma que este tipo de criptoanálise se torna inviável. Uma cifra de substituição reversível arbitrária (a cifra de bloco ideal) para um tamanho de bloco grande não é prática sob o ponto de vista de implementação e desempenho.

A Cifra de Feistel

Feistel propôs uma técnica de aproximação da cifra de bloco ideal, utilizando o conceito de uma cifra de produto, que é a execução de duas ou mais cifras simples em sequência de tal forma que o resultado final ou produto seja criptograficamente mais forte do que qualquer um dos componentes de cifra (STALLINGS, 2006).

A cifra de Feistel consiste em uma cifra de bloco com uma chave de tamanho k bits e um bloco de n bits de tamanho, permitindo um total de 2kpossíveis transformações, ao invés

de 2n! transformações disponíveis na cifra ideal. A proposta de Feistel alterna o uso das técnicas

de substituição (confusão) e permutação (difusão) sobre os blocos de texto simples para gerar os blocos de texto cifrado. Trata-se de uma implementação prática das ideias de Shannon que utiliza as funções de confusão e difusão, as quais são descritas a seguir:

• confusão: esta técnica procura tornar a relação entre as estatísticas do texto cifrado e o valor da chave de criptografia tão complexa quanto possível, para impedir as tentativas de descoberta da chave. Mesmo que o atacante obtenha alguma informação sobre as estatísticas do texto cifrado, a maneira pela qual a chave foi usada para produzir esse

texto cifrado é tão complexa, que torna difícil deduzir o valor da chave. Isso é conseguido através da utilização de um algoritmo complexo de substituição.

• difusão: a estrutura estatística do texto simples é dissipada em uma longa faixa de valores estatísticos das cifras. Isto é conseguido quando cada símbolo do texto simples afeta vários símbolos do texto cifrado. Um elemento de difusão simples é a permutação de bits, que é frequentemente usada no DES. A difusão pode ser conseguida executando repetidamente alguma permutação nos dados seguida pela aplicação de uma função a essa permutação. Com efeito, consegue-se que bits de diferentes posições no bloco de texto simples contribuam para um único bit no bloco de texto cifrado.

Segundo Stallings, as técnicas de difusão e a confusão foram tão bem sucedidas ao captar a essência da aleatoriedade desejada dos atributos de uma cifra em bloco que se tornaram a pedra angular do design de cifra de bloco moderno (STALLINGS, 2006).

A estrutura de iterações (rodadas) proposta por Feistel é chamada de rede de Feistel. A seguir será explicado como esta rede funciona para transformar um bloco de texto simples em um cifra, conforme Figura 8.

1. O bloco é dividido em 2 sub-blocos de mesmo comprimento L0(esquerda) e R0(direita)

2. As duas metades passam por 16 rodadas de processamento/combinação

3. A entrada (Ln−1, Rn−1) da n-ésima rodada é transferida para a saída da n rodada, tanto

como a subchave

4. Uma substituição é feita na metade da esquerda através da aplicação de uma função fi()

na parte da direita. fi() é uma uma função complexa, tipicamente não linear, que produz

um valor dado um sub-bloco e uma subchave Kiderivada da chave global K usada pelo

algoritmo.

Figura 8 – Rede de Feistel

mesma chave.

1. Para cada rodada i = 16, 15, 14, ..., 3, 2, 1 compute 2. Ln−1= Rn

3. Rn−1= Ln⊕ f(Rn, Kn)

4. Então (L0,R0) é o texto simples novamente.

A inversibilidade de uma rede de Feistel é independente das características da função f(), o que facilita a utilização de funções não lineares que mais facilmente podem tornar o criptossistema mais complexo. Existem vários criptossistemas que usam a rede de Feistel, que se diferenciam pela função f() que usam. Como por exemplo o DES(Data Encryption Standard), Lucifer, FEAL, Khufu, LOKI, GOST, Blowfish entre outros (SCHNEIER, 2015).