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.
[...]