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

DRT-240 BITS

Seg

19

Abr

2004


02:00

(4 votos, média 4.00 de 5) 


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.

Informações adicionais