Cifra Feistel

Nesta edição decidimos trazer até si, caro leitor, um artigo sobre uma cifra que data ao ano de 1973. Criada por Horst Feistel enquanto trabalhava na IBM, este algoritmo pertence à criptografia simétrica.

Para os leitores que não estão tão habituados a este tema, existem dois tipos de cifras. A simétrica e a assimétrica. Em termos práticos, a criptografia simétrica tende a ser mais rápida uma vez que exige menos capacidade computacional. Contudo é considerada menos segura uma vez que a mesma chave é usada para encriptar e desencriptar a informação é partilhada pelos diversos intervenientes (na criptografia assimétrica são usadas duas chaves distintas – a chave privada para desencriptar e a chave pública para encriptar a informação – apenas a chave pública é partilhada entre emissor e receptor sendo que a chave privada é usada para decifrar a informação).

Antes de iniciarmos quero aproveitar para chamar a atenção ao facto deste algoritmo ser utilizado em alguns dos algoritmos de criptografia de bloco como por exemplo, o DES (Data Encryption Standard), 3DES (Triple Data Encryption Standard), RC5 (Rivest Cipher 5), entre outros.

Feita esta pequena introdução, voltamos então à famosa cifra Feistel também conhecida como Rede de Feistel.

Quando utilizamos este algoritmo as iterações processam-se da seguinte forma: As entradas do algoritmo são blocos de texto em plain text de comprimentos 2x bits e uma chave K (esta chave normalmente tem 64 bits). Normalmente o bloco plain texto é também de 64 bits sendo que cada um destes blocos é dividido em 2 blocos de 32 bits cada um (gerando o comprimento de 2X bits em cada bloco – se usarmos blocos de 48 bits, são gerados 2 blocos de 24 bits cada um).

Na primeira iteração estes dois blocos que obtemos são chamados respectivamente L0 e R0 (left, lado esquerdo, e right, lado direito). Nas iterações seguintes são denominados por Li -1 e Ri-1.

Estes blocos por N iterações de processamento e combinam-se para produzir o bloco de texto iterado. A cada iteração é recebido o bloco anterior (na primeira recebe o plain texto como já referimos anteriormente), assim como a sub-chave de KN.

As sub-chaves são sempre diferentes de K e entre si pois são geradas a partir de K com um algoritmo de geração de chaves. É importante referir que as iterações possuem todas a mesma estrutura.

[...]

Leia o artigo completo na edição 56 da Revista PROGRAMAR