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

Exercício com o DES

Qui

12

Mar

2009


16:10

(15 votos, média 4.07 de 5) 


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 algoritmo criptográfico DES: o processo usado pelo algoritmo mais parece uma massa de dados sendo sovada.

Se você sabe o que é o DES, tudo bem - continue a leitura. Se você não tem idéia do que vem a ser o DES, talvez seja melhor dar uma lida em O algoritmo DES ilustrado e em O algoritmo DES ilustrado II antes de continuar.

Neste exercício faremos a cifragem da mensagem "Criptologia sempre NumaBoa" e usaremos a chave DES "0E 32 92 32 EA 6D 0D 73".

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
| | | | | | | | | | | |
bits 5 10 15 20 25 30 35 40 45 50 55 60

A tabela de permutaçã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

Observe que o bit 57 é 0, o bit 49 é 0, o bit 41 é 0, o bit 33 é 1 e assim sucessivamente.

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 "sovar" 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 nos Downloads de Criptologia.

Na 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, um abraço da vó Vicki vovo

Informações adicionais