Laboratórios
Astaroth
Seg 14 Mar 2005 04:23 |
- Detalhes
- Categoria: Laboratório de Criptografia
- Atualização: Sábado, 05 Abril 2008 18:27
- Autor: Cristiano
- Acessos: 13999
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.