Laboratórios
DRT-240 BITS
Seg 19 Abr 2004 02:00 |
- Detalhes
- Categoria: Laboratório de Criptografia
- Atualização: Quinta, 14 Janeiro 2010 14:00
- Autor: Yugi
- Acessos: 13612
MOSTRANDO A FUNÇÃO DE GERAÇÃO DE SUB-CHAVES DO CRIPTOSSISTEMA DRT
Como o processo de geração de chaves é pouco intuitivo resolvi demonstrá-lo em um código escrito em CLIPPER. Vejamos:
PRIMEIRAMENTE ESCLARECEMOS: M_CHAVE é a variável que representa a chave do Sistema com 30 bytes, em formato ASCII.
D_Chave := M_chave L_chave := Space(0) For Ct := 1 to 3 CTemp := Space(0) For Cont := 1 to 30 Step 10 L_Chave := Cif(Substr(D_chave,Cont,10)) Ctemp := Ctemp + L_Chave Next Ctemp := Stuff(Ctemp,11,10,Cif(Substr(CTemp,11,10))) Ctemp := Stuff(Ctemp,21,10,Cif(Substr(CTemp,21,10))) Ctemp := Stuff(Ctemp,21,10,Cif(Substr(CTemp,21,10))) M_chave := M_chave + Ctemp D_chave := Substr(CTemp,7) + Substr(Ctemp,1,6) Next
ESCLARECENDO O CÓDIGO ACIMA:
Primeiramente temos duas variáveis: D_chave e L_chave. A primeira é uma cópia da chave inicial e a segunda é um elemento vazio (espaço zero).
Depois temos uma estrutura de 3 voltas onde temos uma variável nula (Ctemp). A estrutura interna tem 3 voltas sendo que em cada volta altera um terço da chave de entrada. A 1ª altera os primeiros 10 bytes da chave e os guarda na variável L_chave. A segunda volta altera os bytes intermediários da chave (11 até 20) e a 3ª volta altera os últimos 10 bytes da chave. O resultado destas operações é um cordel de 30 bytes que é armazenado na variável Ctemp.
Posteriormente os bytes intermediários de Ctemp (cordel calculado anteriormente) são alterados pela função CIF. Os últimos 10 bytes de Ctemp são alterados pela função CIF duas vezes!
Por fim a variável Ctemp (que tem 30 bytes) é agregada a chave inicial de 30 bytes. Então a chave inicial (M_chave) passa a ter 60 bytes após a primeira rodada. A variável D_chave é alterada sendo composta agora pelos elementos 7 até 30 e os elementos 1, 2, 3, 4, 5 e 6 de Ctemp (cordel calculado anteriormente).
Este processo é repetido mais duas vezes: na 2ª rodada a chave (M_chave) deve conter 90 bytes e na 3ª rodada 120 bytes. Após esta fase, como vemos no código abaixo, os bytes compreendidos entre os números 11 e 20 da chave (M_chave) sofrem uma transformação através da função CIF. Depois a chave é rotacionada tendo como ponto inicial o seu 7º elemento e terminando com os seus 6 primeiros elementos. Este processo é feito 120 vezes!
For Cont := 1 to 120 M_chave := Stuff(M_chave,11,10,Cif(Substr(M_chave,11,10))) M_chave := Substr(M_chave,7) + Substr(M_chave,1,6) Next
Preenchendo o Vetor de Chaves: ESTE CÓDIGO TRANSFORMA O VETOR ASCII EM 52 SUB-CHAVES DE 16 BITS.
CONT := 1 N := 1 DO WHILE.T. KEY[N] := BIN2W(SUBSTR(M_CHAVE,CONT,2)) N := N + 1 CONT := CONT + 2 IF N > 52 EXIT ENDIF ENDDO
O código acima pode ser explicado simplesmente: A chave (M_CHAVE) possui 120 bytes. Estes 120 bytes são suficientes para gerar 60 chaves de 16 bits. As primeiras 52 serão as 52 sub-chaves utilizadas na cifragem ou decifragem dos dados criptografados com o algoritmo DRT. As últimas 8 sub-chaves são desprezadas.
De posse destas 52 sub-chaves nós podemos iniciar o processo de cifragem ou decifragem conforme já foi explicado anteriormente nesta exposição.