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) 


Passo 1: A partir da chave de 56 bits, criar 16 subchaves de 48 bits

A chave de 64 bits é permutada de acordo com a tabela a seguir, PC-1. Observe que nesta tabela os bits de paridade foram excluídos (os bits 8, 16, 24, 32, 40, 48, 56 e 64 estão ausentes) portanto, esta operação só é efetuada depois da verificação de integridade da chave. Como a primeira entrada da tabela é "57", isto significa que o 57º bit da chave original K torna-se o primeiro bit da chave permutada K+. O 49º bit da chave original transforma-se no segundo bit da chave permutada. O 4º bit da chave original é o último bit da chave permutada. Observe que apenas 56 bits da chave original aparecem na chave permutada.

PC-1 --------------------------------------- 57 49 41 33 25 17 9 1 58 50 42 34 26 18 10 2 59 51 43 35 27 19 11 3 60 52 44 36 63 55 47 39 31 23 15 7 62 54 46 38 30 22 14 6 61 53 45 37 29 21 13 5 28 20 12 4 ---------------------------------------

Exemplo: Da chave original de 64 bits

K = 00010011 00110100 01010111 01111001 10011011 10111100 11011111 11110001

obtemos a permutação de 56 bits

K+ = 1111000 0110011 0010101 0101111 0101010 1011001 1001111 0001111

A seguir, dividimos esta chave em duas metades, esquerda C0 e direita D0, onde cada metade tem 28 bits.

Exemplo: Da chave permutada K+ obtemos

C0 = 1111000 0110011 0010101 0101111

D0 = 0101010 1011001 1001111 0001111

Com C0 e D0 definidas, criamos dezesseis blocos Cn e Dn, 1<=n<=16. Cada par de blocos Cn e Dn é formado pelo par anterior Cn-1 e Dn-1, respectivamente para n = 1, 2, ..., 16, usando o seguinte esquema de "deslocamentos para a esquerda" ("left shift") no bloco anterior. Para fazer um deslocamento à esquerda, mova cada bit uma posição para a esquerda, exceto o primeiro bit, o qual é deslocado para o final do bloco.

Número de Iterações Número de deslocamentos à esquerda ---------------------------------------------------------- 1 1 2 1 3 2 4 2 5 2 6 2 7 2 8 2 9 1 10 2 11 2 12 2 13 2 14 2 15 2 16 1

Isto significa que, por exemplo, C3 e D3 são obtidos de C2 e D2, respectivamente, com dois deslocamentos à esquerda, e C16 e D16 são obtidos de C15 e D15, respectivamente, com um deslocamento à esquerda. Em todos os casos, um único deslocamento à esquerda significa uma rotação dos bits uma posição para a esquerda de modo que, após um deslocamento à esquerda, os bits nas 28 posições sejam os bits que previamente estavam nas posições 2, 3, ..., 28, 1.

Exemplo: Do par original C0 e D0 obtemos:

C0 = 1111000011001100101010101111 D0 = 0101010101100110011110001111 C1 = 1110000110011001010101011111 D1 = 1010101011001100111100011110 C2 = 1100001100110010101010111111 D2 = 0101010110011001111000111101 C3 = 0000110011001010101011111111 D3 = 0101011001100111100011110101 C4 = 0011001100101010101111111100 D4 = 0101100110011110001111010101 C5 = 1100110010101010111111110000 D5 = 0110011001111000111101010101 C6 = 0011001010101011111111000011 D6 = 1001100111100011110101010101 C7 = 1100101010101111111100001100 D7 = 0110011110001111010101010110 C8 = 0010101010111111110000110011 D8 = 1001111000111101010101011001 C9 = 0101010101111111100001100110 D9 = 0011110001111010101010110011 C10 = 0101010111111110000110011001 D10 = 1111000111101010101011001100 C11 = 0101011111111000011001100101 D11 = 1100011110101010101100110011 C12 = 0101111111100001100110010101 D12 = 0001111010101010110011001111 C13 = 0111111110000110011001010101 D13 = 0111101010101011001100111100 C14 = 1111111000011001100101010101 D14 = 1110101010101100110011110001 C15 = 1111100001100110010101010111 D15 = 1010101010110011001111000111 C16 = 1111000011001100101010101111 D16 = 0101010101100110011110001111

Agora montamos as chaves Kn, para 1<=n<=16, aplicando a seguinte tabela de permutação em cada um dos pares concatenados CnDn. Cada par possui 56 bits, porém PC-2 usa apenas 48 deles.

PC-2 ---------------------------------- 14 17 11 24 1 5 3 28 15 6 21 10 23 19 12 4 26 8 16 7 27 20 13 2 41 52 31 37 47 55 30 40 51 45 33 48 44 49 39 56 34 53 46 42 50 36 29 32 ----------------------------------

Portanto, o primeiro bit de Kn é o 14º bit de CnDn, o segundo bit o 17º, e assim sucessivamente, terminando com o 48º bit de Kn sendo o 32º de CnDn.

Exemplo: Para a primeira chave temos

C1D1 = 1110000 1100110 0101010 1011111 1010101 0110011 0011110 0011110

a qual, após aplicarmos a permutação PC-2 transforma-se em

K1 = 000110 110000 001011 101111 111111 000111 000001 110010

Para as outras chaves temos

K2 = 011110 011010 111011 011001 110110 111100 100111 100101 K3 = 010101 011111 110010 001010 010000 101100 111110 011001 K4 = 011100 101010 110111 010110 110110 110011 010100 011101 K5 = 011111 001110 110000 000111 111010 110101 001110 101000 K6 = 011000 111010 010100 111110 010100 000111 101100 101111 K7 = 111011 001000 010010 110111 111101 100001 100010 111100 K8 = 111101 111000 101000 111010 110000 010011 101111 111011 K9 = 111000 001101 101111 101011 111011 011110 011110 000001 K10 = 101100 011111 001101 000111 101110 100100 011001 001111 K11 = 001000 010101 111111 010011 110111 101101 001110 000110 K12 = 011101 010111 000111 110101 100101 000110 011111 101001 K13 = 100101 111100 010111 010001 111110 101011 101001 000001 K14 = 010111 110100 001110 110111 111100 101110 011100 111010 K15 = 101111 111001 000110 001101 001111 010011 111100 001010 K16 = 110010 110011 110110 001011 000011 100001 011111 110101

Em relação às subchaves é só. Agora vamos dar uma olhada na mensagem.

Informações adicionais