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

Laboratórios

Astaroth

Seg

14

Mar

2005


04:23

(2 votos, média 4.50 de 5) 


2.2 - A geração das sub-chaves

As sub-chaves consistem de 16 pares de valores de 32-bits (as sub-chaves propriamente ditas), e mais 32 valores de 8-bits correpondentes a uma tabela de permutação de bits usada nos processos de cifragem e decifragem.

2.2.1 - Geração dos 16 pares de sub-chaves

Como já foi explicado anteriormente as sub-chaves consistem em um one-way hashing da chave de 256-bits.

O hashing é feito byte a byte, transformando cada byte em um valor de 32-bits (sub-chave), serão ao todo 32 iterações resultando em 16 pares de sub-chaves. As iterações deverão ser contadas de trás para frente (de 32 a 1), pois com o número da iteração se chegará ao número correspondente da Tabela de Rotação (TR). Ainda é usado algo que se assemelha ao CBC (Cipher Block Chaining), porém com uma fórmula especial e com um vetor de inicialização igual a zero. A seguir serão passados, uma listagem das operações feitas em uma iteração, e um diagrama lógico das mesmas.

Procedimentos para o cálculo de uma sub-chave:

  • 1. São lidos os primeiros (ou seguintes) 8-bits da chave original
  • 2. Pega-se o valor na Tabela de Rotação (TR) correspondente a iteração corrente.
  • 3. Escolhe-se uma S-BOX através da fórmula: I mod 4 (onde I, é o número da iteração corrente)
  • 4. Com a S-BOX escolhida, pega-se a saída da mesma, tendo como entrada os 8-bits lidos da chave original.
  • 5. É feita uma rotação de bits para a esquerda com o valor retirado da TR.
  • 6. É calculada a função f(x), sendo x a saída S-BOX.
  • 7. É feita uma rotação de bits para a direita com o valor retirado da TR.
  • 8. É calculada a função f(x), sendo x o valor obtido em 7.
  • 9. É feita uma rotação de bits para a esquerda com o valor retirado da TR.
  • 10. É realizado um OR-Exclusivo com vetor do CBC.

------ fim da geração da sub-chave ------

  • 11. Calcula-se o próximo valor do vetor do CBC.

Diagrama lógico do calculo da sub-chave e do vetor do CBC:

K = S[I mod 4][x] <>< TR[I]
K = f(K) ><>< TR[I]
K = K ^ CBC

Y = K * K
CBC = ((CBC – Y2) ><>< TR[I]) ^ Y1
>

* Onde, X são os 8 bits lidos da chave original; I o número da iteração; TR[I] o índice da Tabela de Rotação equivalente a I; Y uma variável temporária de 64-bits; y1 e y2 divisões de Y em dois valores de 32-bits; CBC o valor usado como vetor do Cipher Block Chaining; e S[A][B] representa a posição B de uma S-BOX A.

2.2.2 - Geração da Tabela P

A geração da tabela P é realizada da seguinte forma, enumerando-se uma array com valores de 0 a 31, em seguida lendo-se os primeiros 32-bits do bloco de sub-chaves, e dividindo-se este por 32, com o resto da divisão em mãos é feita a troca do primeiro valor da array com o mesmo. A operação é repetida com os valores de 32-bits seguintes do bloco de sub-chaves, até que todo o bloco tenha sido lido.

A seguir apresenta-se uma array de 32 bytes, numerada de 0 a 31, para demonstração da geração da Tabela P:

00  01  02  03  04  
05  06  07  08  09  
10  11  12  13  14  
15  16  17  18  19
20  21  22  23  24  
25  26  27  28  29  
30  31

Tendo-se a array apresentada, supõe-se que resto da divisão do primeiro valor de 32-bits seja o número 6, logo deverá ser feita a substituição destacada a seguir:

06  01  02  03  04  
05  00  07  08  09  
10  11  12  13  14  
15  16  17  18  19
20  21  22  23  24  
25  26  27  28  29  
30  31

O que foi feito com base nos primeiros 32-bits do bloco de sub-chaves, deverá ser repetido em outras 31 iterações baseando-se nos valores de 32-bits seguintes.

Informações adicionais