PONDO A MÃO NA MASSA DO DES

Não existe forma melhor de entender e aprender alguma coisa do que pondo a mão na massa. Aliás, "por a mão na massa" é uma expressão perfeita quando se trata do DES: o processo usado pelo algoritmo mais parece uma massa de dados sendo sovada, como a massa de bolo para se fazer um rocambole.

Neste exercício faremos a cifragem da mensagem "Criptologia sempre NumaBoa" e usaremos a chave DES "0E329232EA6D0D73".

PREPARANDO AS SUB-CHAVES

Precisamos criar 16 subchaves de acordo com as tabelas de substituição de bits mas, antes disso, precisamos transformar nossa chave K em binário:

      0    E    3    2    9    2    3    2    E    A    6    D    0    D    7    3
     0000 1110 0011 0010 1001 0010 0011 0010 1110 1010 0110 1101 0000 1101 0111 0011

A tabela de permitação PC-1 nos indica qual a nova sequência de bits para a chave K+ constituída por 8 sequências de 7 bits dando um total de 56 bits:

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 --------------------------------------- K+ = 0001010 0101100 0010111 0101000 1001111 1011000 0101110 0011110

Agora dividimos a chave em duas partes iguais de 28 bits, C0 e D0:

C0 = 0001010 0101100 0010111 0101000 D0 = 1001111 1011000 0101110 0011110

Sabendo que os pares 1, 2, 9 e 16 devem receber 1 deslocamento à esquerda e os pares restantes 2 deslocamentos, obtemos o seguinte:

← 1 shift E C1 = 0010100101100001011101010000 D1 = 0011111011000010111000111101 ← 1 shift E C2 = 0101001011000010111010100000 D2 = 0111110110000101110001111010 ← 2 shift E C3 = 0100101100001011101010000001 D3 = 1111011000010111000111101001 ← 2 shift E C4 = 0010110000101110101000000101 D4 = 1101100001011100011110100111 ← 2 shift E C5 = 1011000010111010100000010100 D5 = 0110000101110001111010011111 ← 2 shift E C6 = 1100001011101010000001010010 D6 = 1000010111000111101001111101 ← 2 shift E C7 = 0000101110101000000101001011 D7 = 0001011100011110100111110110 ← 2 shift E C8 = 0010111010100000010100101100 D8 = 0101110001111010011111011000 ← 1 shift E C9 = 0101110101000000101001011000 D9 = 1011100011110100111110110000 ← 2 shift E C10 = 0111010100000010100101100001 D10 = 1110001111010011111011000010 ← 2 shift E C11 = 1101010000001010010110000101 D11 = 1000111101001111101100001011 ← 2 shift E C12 = 0101000000101001011000010111 D12 = 0011110100111110110000101110 ← 2 shift E C13 = 0100000010100101100001011101 D13 = 1111010011111011000010111000 ← 2 shift E C14 = 0000001010010110000101110101 D14 = 1101001111101100001011100011 ← 2 shift E C15 = 0000101001011000010111010100 D15 = 0100111110110000101110001111 ← 1 shift E C16 = 0001010010110000101110101000 D16 = 1001111101100001011100011110

Agora concatenamos os pares obtidos através dos deslocamentos para a esquerda e, dos 56 bits, "pescamos" apenas 48 de acordo com a tabela P-2:

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 ---------------------------------- C1D1 = 00101001011000010111010100000011111011000010111000111101 K1 = 001101100001010001100100011110001110000111100001 C2D2 = 01010010110000101110101000000111110110000101110001111010 K2 = 010000001011110100010001011101101110100011111101 C3D3 = 01001011000010111010100000011111011000010111000111101001 K3 = 010001011010010001110011001000111001110111011011 C4D4 = 00101100001011101010000001011101100001011100011110100111 K4 = 111001111100010010000010100011111011010100110011 C5D5 = 10110000101110101000000101000110000101110001111010011111 K5 = 011110101000001110000010011011110100111101100100 C6D6 = 11000010111010100000010100101000010111000111101001111101 K6 = 001110001001000000011011010110001100100111011110 C7D7 = 00001011101010000001010010110001011100011110100111110110 K7 = 001001010000000001011110110001011101010010011101 C8D8 = 00101110101000000101001011000101110001111010011111011000 K8 = 001001100100100010010100110010110011011011101001 C9D9 = 01011101010000001010010110001011100011110100111110110000 K9 = 010101000101010101000001011110011111011000110011 C10D10 = 01110101000000101001011000011110001111010011111011000010 K10 = 010000111100100101000101001111110100110000101110 C11D11 = 11010100000010100101100001011000111101001111101100001011 K11 = 000010011110000110000111100011000111100111010110 C12D12 = 01010000001010010110000101110011110100111110110000101110 K12 = 001100010000010110101011101001011110001011110101 C13D13 = 01000000101001011000010111011111010011111011000010111000 K13 = 111100010000000010100001111100111000111011000011 C14D14 = 00000010100101100001011101011101001111101100001011100011 K14 = 100100011000101010010100100111101000011100011111 C15D15 = 00001010010110000101110101000100111110110000101110001111 K15 = 000101000011001010010110000111110111011111000100 C16D16 = 00010100101100001011101010001001111101100001011100011110 K16 = 011000000110111100000100010011000011101011100111

PREPARANDO A MENSAGEM

A primeira providência a ser tomada é transformar os caracteres da mensagem em texto claro nos seus valores ASCII hexadecimais:

       C  r  i  p  t  o  l  o  g  i  a     s  e  m  p  r  e     N  u  m  a  B  o  a
      43 72 69 70 74 6F 6C 6F 67 69 61 20 73 65 6D 70 72 65 20 4E 75 6D 61 42 6F 61

A seguir adicionamos os caracteres ASCII "0D" (retorno) e "0A" (quebra de linha) para indicar o final da mensagem e separamos os caracteres em blocos de 64 bits (ou 16 dígitos hexadecimais). Além disso, completamos o último bloco com zeros para ajustar seu tamanho para 64 bits.

     43726970746F6C6F  6769612073656D70  7265204E756D6142  6F610D0A00000000

Desta forma, nossa mensagem agora é composta por 4 blocos de 16 dígitos hexadecimais. Podemos então transformar cada um dos blocos em binário, obtendo os 64 bits de cada um deles.

      4    3    7    2    6    9    7    0    7    4    6    F    6    C    6    F
     0100 0011 0111 0010 0110 1001 0111 0000 0111 0100 0110 1111 0110 1100 0110 1111

      6    7    6    9    6    1    2    0    7    3    6    5    6    D    7    0
     0110 0111 0110 1001 0110 0001 0010 0000 0111 0011 0110 0101 0110 1101 0111 0000

      7    2    6    5    2    0    4    E    7    5    6    D    6    1    4    2
     0111 0010 0110 0101 0010 0000 0100 1110 0111 0101 0110 1101 0110 0001 0100 0010

      6    F    6    1    0    D    0    A    0    0    0    0    0    0    0    0
     0110 1111 0110 0001 0000 1101 0000 0101 0000 0000 0000 0000 0000 0000 0000 0000

FAZENDO A MISTURA DA MASSA DE DADOS

De posse das 16 sub-chaves de 48 bits e dos 4 blocos de mensagem de 64 bits podemos começar a "enrolar" a mensagem para chegar ao texto cifrado. Neste exercício mostro apenas o trabalho feito com o primeiro bloco. O restante fica por sua conta - pode fazer o exercício na unha, correndo o risco de errar algum bit, ou utilizar o programa desenvolvido pelo Laboratório de Criptologia da Aldeia que você encontra na Biblioteca de Criptologia.

Na segunda parte deste exercício você pode acompanhar o processo. Divirta-se ;)))

Agradecimento

Quero agradecer ao Robson Lages, de São Vicente - SP, por me alertar que os shifts para se obter as sub-chaves não estavam corretos. Pior do que isto, não só neste texto como também no programa DES, disponibilizado para download. Ambos já foram corrigidos.

Obrigada, Robson, continue com este "olho de águia" e receba meu abraço :)

Esta página


Notice: Undefined variable: fecha in /home/numaboa.com.br/public_html/criptologia/footCript.php on line 49
Voltar Criptologia Lápis e Papel Exercícios com o DES DES II

Notice: Undefined variable: credits in /home/numaboa.com.br/public_html/criptologia/footCript.php on line 187
Créditos: vovó Vicki
| Indique aos amigos | Fale com a mestre da teia | Voltar
Notice: Undefined variable: fecha in /home/numaboa.com.br/public_html/criptologia/footCript.php on line 196
| Sobre a autora |

sobMedida by vickiSoft - /criptologia/brinca/des.php Versão 1.1 de 16.08.03 - Atualizada em 18.05.05
Licença Creative Commons 1998-2006 Aldeia NumaBoa
Exceto onde especificamente declarado, todo material deste site é disponibilizado de acordo com a Licença Creative Commons.