A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Criptografia Numaboa

O algoritmo DES ilustrado II

Seg

29

Ago

2005


01:53

(32 votos, média 4.81 de 5) 


A seguir, no cálculo de f, fazemos um XOR na saída E(Rn-1) com a chave Kn. O motivo de se utilizar o XOR lógico é porque este é reversível. Se A xor B = C, então A xor C = B e B xor C = A. A reversibilidade é importante para podermos reverter o processo quando quisermos decifrar a mensagem cifrada.

Kn + E(Rn-1)

Exemplo: Para K1, E(R0), temos

K1 = 000110 110000 001011 101111 111111 000111 000001 110010 E(R0) = 011110 100001 010101 010101 011110 100001 010101 010101 K1+E(R0) = 011000 010001 011110 111010 100001 100110 010100 100111

Ainda não terminamos o cálculo da função f. Até este ponto, expandimos Rn-1 de 32 para 48 bits, usando a tabela de seleção E, e XORamos o resultado com a chave Kn. Com este processo obtivemos 48 bits ou oito grupos de 6 bits. Agora fazemos uma coisa meio estranha com cada grupo de seis bits: usamo-os como endereços em tabelas denominadas "S boxes", ou "caixas S". Cada grupo de seis bits nos dará um endereço numa caixa S diferente. Um número de 4 bits estará localizado neste endereço. Este número de 4 bits irá substituir os 6 bits originais. O principal resultado é que os oito grupos de 6 bits são transformados em oito grupos de 4 bits (as saídas de 4 bits das caixas S) num total de 32 bits.

Escrevemos o resultado anterior, que tem 48 bits, na forma:

Kn + E(Rn-1) = B1B2B3B4B5B6B7B8

onde cada Bi é um grupo de seis bits. Agora calculamos

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8)

onde Si(Bi) se refere à iésima saída da caixa S.

Repetindo, cada uma das funções S1, S2, ..., S8, pega um bloco de 6 bits como entrada e devolve um bloco de 4 bits como saída. A tabela para determinar S1 é mostrada e explicada abaixo:

Função S1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | -------------------------------------------------------------- 0 | 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7 1 | 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8 2 | 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0 3 | 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13

Se S1 é a função definida nesta tabela e B é um bloco de 6 bits, então S1(B) é determinada da seguinte maneira: O primeiro e o último bit de B representam um número na base 2 com valor decimal entre 0 e 3 (ou binário 00 a 11). Que este número seja i. Os 4 bits centrais de B representam um número na base 2 com valor decimal entre 0 e 15 (ou binário de 0000 a 1111). Que este número seja j. Procure o número na tabela localizado na j-ésima coluna e na i-ésima linha. É um número que varia de 0 a 15 e é unicamente representado por um bloco de 4 bits. Este bloco é a saída S1(B) de S1 para a entrada B. Por exemplo, para o bloco de entrada B = 011011, o primeiro bit é "0" e o último é "1", indicando a linha 01. Os quatro bits centrais são "1101". Este é o equivalente binário do decimal 13, de modo que a coluna será a de número 13. Na linha 1, coluna 13, aparece 5. Isto determina a saída; 5 é o binário 0101, de modo que a saída é 0101. Portanto, S1(011011) = 0101.

As tabelas definindo as funções S2, ..., S8 são as seguintes:

Função S2 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | -------------------------------------------------------------- 0 | 15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10 1 | 3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5 2 | 0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15 3 | 13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9 Função S3 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | -------------------------------------------------------------- 0 | 10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8 1 | 13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1 2 | 13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7 3 | 1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12 Função S4 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | -------------------------------------------------------------- 0 | 7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15 1 | 13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9 2 | 10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4 3 | 3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14

Informações adicionais