Laboratórios

DRT-240 BITS

Seg

19

Abr

2004


02:00

  • Imprimir
(4 votos, média 4.00 de 5) 


O autor do DRT-240 BITS, Yugi Tumro, disponibiliza um pacote "zipado" contendo o texto explicativo do seu algoritmo, um programa para cifrar e decifrar textos além de um texto desafio cifrado com o DRT-240 mas de chave desconhecida.

Image Faça o download do DRT-240 (157 Kb).

INTRODUÇÃO

O Criptossistema DRT é um algoritmo simétrico que trabalha com criptografia de blocos de 64 bits e uma chave de 240 bits. A motivação para a sua construção foi elaborar um criptossistema seguro, porém muito mais simples que o criptossistema CPBA, também de minha autoria, mais que tem uma chave de 512 bits e codifica o texto claro em blocos de 256 bits.

A estrutura do algoritmo é absurdamente simples (somente a rotina de expansão de chaves é um pouco confusa...) e eficiente. A degenerescência do criptograma em relação ao texto claro é transparente e de fácil constatação.

O algoritmo utiliza 8 voltas e 52 sub-chaves de 16 bits (oriundas da chave mestra) para criptografar cada bloco de 64 bits. São empregadas substituições, permutações e operações de grupos algébricos diferentes para melhor promover a difusão dos elementos do bloco claro no bloco cifrado.

Dedico este trabalho a todos aqueles que lutam para realizar os seus sonhos. Em especial à Sueli Veiga, Noêmia, Jésus, Rafael Veríssimo e Sandra Aparecida. Este trabalho também é dedicado ao Prof. Antônio Faleiros e aos amigos do ITA (Instituto Tecnológico de Aeronáutica).

O Autor

SOBRE AS SUB-CHAVES

Resolvi quebrar a cronologia da descrição do cifrário face à simplicidade da estrutura de cifra do algoritmo em relação ao cálculo das sub-chaves. Não quero dizer que o cálculo de sub-chaves seja complexo, mas ele é pouco intuitivo. Deixemos pois esta questão para o final desta breve exposição do algoritmo DRT.

Como não é possível codificar sem ter as 52 sub-chaves vamos considerar as sub-chaves como sendo as seguintes:

	Nº DA CHAVE	VALOR 	Nº DA CHAVE	VALOR
	     1		40443	     27		40462
	     2		 7862	     28		50235
	     3		35747	     29		37791
	     4		57512	     30		33004
	     5		12596	     31		29516
	     6		28188	     32		38061
	     7		55699	     33		31796
	     8		12491	     34		34932
	     9		44864	     35		62177
	    10		40374	     36		19007
	    11		20623	     37		11326
	    12		32346	     38		 8853
	    13		15641	     39		33015
	    14		58660	     40		57157
	    15		32403	     41		60957
	    16		59878	     42		11845
	    17		35192	     43		63409
	    18		27081	     44		12136
	    19		47423	     45		57203
	    20		33484	     46		51754
	    21		45665	     47		 5897
	    22		 7483	     48		22114
	    23		61792	     49		46815
	    24		19179	     50		62247
	    25		43081	     51		  775
	    26		34057	     52		14601

Estas 52 Sub-chaves se originaram da chave mestre
[000000000000000000000000000000000000000000000000000000000000] em Hexadecimal.

Veremos em seguida o ciclo de cifragem do DRT-240 bits!


O CICLO DE CIFRAGEM

As quatro fases de cada rodada:

1. Soma e Subtração
	A = (A + CHAVE[1]) MOD 65536
	B = (B - CHAVE[2] + 65536) MOD 65536
	C = (C - CHAVE[3] + 65536) MOD 65536
	D = (D + CHAVE[4]) MOD 65536
2. Inversão
	X1 = A DIV 256
	X2 = C MOD 256
	X3 = A MOD 256
	X4 = C DIV 256
	A = (X2 * 256) + X1
	C = (X3 * 256) + X4

	X1 = B DIV 256
	X2 = D MOD 256
	X3 = B MOD 256
	X4 = D DIV 256
	B = (X2 * 256) + X1
	D = (X3 * 256) + X4
3. Difusão
	ACL = C XOR 27809
	ACL = (ACL + (D * CHAVE[5])) MOD 65536
	A = A XOR ACL
	B = (B + A) MOD 65536

	ACL = (A * CHAVE[6])
	ACL = (ACL + (B XOR 30561)) MOD 65536
	C = ((C + ACL) MOD 65536) XOR B

	ACL = (C DIV 256) + ((B MOD 256) * 256)
	ACL = ACL XOR A
	D = ((D XOR B) + ACL) MOD 65536
4. Rotação
	ACL = A
	A = B
	B = C
	C = D
	D = ACL

Após a oitava rodada faz-se o processo da 1 parte da rodada, ou seja, soma e subtração. Na primeira rodada utilizamos as chaves de 1 até 6, na 2ª de 7 até 12, na 3ª de 13 até 18, na 4ª de 19 até 24, na 5ª rodada de 25 até 30, na 6ª de 31 até 36, na 7ª de 37 até 42, e na oitava rodada de 43 até 48. As Sub-chaves de números 49, 50, 51 e 52 são utilizadas na última parte da cifragem que é executada após a última rodada e corresponde a 1ª fase da rodada, ou seja:

	A = (A + CHAVE[49]) MOD 65536
	B = (B - CHAVE[50] + 65536) MOD 65536
	C = (C - CHAVE[51] + 65536) MOD 65536
	D = (D + CHAVE[52]) MOD 65536

Após este processo o bloco de 64 bits está cifrado. O ciclo da cifragem pode ser representado da seguinte forma:

					-----------------
	A = (A + CHAVE[1]) MOD 65536			|
	B = (B - CHAVE[2] + 65536) MOD 65536		|
	C = (C - CHAVE[3] + 65536) MOD 65536		|
	D = (D + CHAVE[4]) MOD 65536			|
							|
	X1 = A DIV 256					|
	X2 = C MOD 256					|
	X3 = A MOD 256					|
	X4 = C DIV 256					|
	A = (X2 * 256) + X1				|
	C = (X3 * 256) + X4				|
	X1 = B DIV 256					|
	X2 = D MOD 256					|
	X3 = B MOD 256					|
	X4 = D DIV 256					|
	B = (X2 * 256) + X1				|
	D = (X3 * 256) + X4				|
							| ----- 8 voltas
	ACL = C XOR 27809				|
	ACL = (ACL + (D * CHAVE[5])) MOD 65536		|
	A = A XOR ACL					|
	B = (B + A) MOD 65536				|
							|
	ACL = (A * CHAVE[6])				|
	ACL = (ACL + (B XOR 30561)) MOD 65536		|
	C = ((C + ACL) MOD 65536) XOR B			|
							|
	ACL = (C DIV 256) + ((B MOD 256) * 256)		|
	ACL = ACL XOR A					|
	D = ((D XOR B) + ACL) MOD 65536			|
							|
	ACL = A						|
	A = B						|
	B = C						|
	C = D						|
	D = ACL						|
	-------------------------------------------------
			|
			|
	A = (A + CHAVE[49]) MOD 65536
	B = (B - CHAVE[50] + 65536) MOD 65536
	C = (C - CHAVE[51] + 65536) MOD 65536
	D = (D + CHAVE[52]) MOD 65536


CIFRAGEM PASSO A PASSO

O Criptossistema DRT codifica o texto claro em blocos de 64 bits. Este bloco é dividido em 4 partes iguais (Words) de 16 bits. Estas 4 partes são representadas por A, B, C e D, respectivamente. Os Valores A, B, C e D são números de 16 bits, ou seja, números compreendidos entre 0 e 65535.

Vamos considerar que o texto claro seja representado por 8 bytes nulos, ou seja, com valor 0. Assim os valores A, B, C e D são iguais a zero.

Primeira Rodada

Soma e Subtração:

	A = (A + CHAVE[1]) MOD 65536
	B = (B - CHAVE[2] + 65536) MOD 65536
	C = (C - CHAVE[3] + 65536) MOD 65536
	D = (D + CHAVE[4]) MOD 65536

	Considerando os valores correntes teremos:

	A = (0 + 40443) MOD 65536 = 40443
	B = (B – 7862 + 65536) MOD 65536 = 57674
	C = (C – 35747 + 65536) MOD 65536 = 29789
	D = (D + 57512) MOD 65536 = 57512

Inversão:

	X1 = A DIV 256
	X2 = C MOD 256
	X3 = A MOD 256
	X4 = C DIV 256
	A = (X2 * 256) + X1
	C = (X3 * 256) + X4

	X1 = (40443 DIV 256) = 157
	X2 = (29789 MOD 256) = 93
	X3 = (40443 MOD 256) = 251
	X4 = (29789 DIV 256) = 116
	A = (93 * 256) + 57 = 23965
	C = (251 * 256) + 116 = 64372

	X1 = B DIV 256
	X2 = D MOD 256
	X3 = B MOD 256
	X4 = D DIV 256
	B = (X2 * 256) + X1
	D = (X3 * 256) + X4

	X1 = (57674 DIV 256) = 225
	X2 = (57512 MOD 256) = 168
	X3 = (57674 MOD 256) = 74
	X4 = (57512 DIV 256) = 224
	B = (168 * 256) +  225 = 43223
	D = (74 * 256) + 224 = 19168

	Neste ponto teremos os valores

	A = 23965
	B = 43233
	C = 64372
	D = 19168

Difusão:

	ACL = C XOR 27809
	ACL = (ACL + (D * CHAVE[5])) MOD 65536
	A = A XOR ACL
	B = (B + A) MOD 65536

	ACL  = (64372 XOR 27809) = 38869
	ACL = (38869 + (19168 * 12596)) MOD 65536
	ACL = 44373
	A = 23965 XOR 44373 = 61640
	B = (43233 + 61640) MOD 65536 = 39337

	ACL = (A * CHAVE[6])
	ACL = (ACL + (B XOR 30561)) MOD 65536
	C = ((C + ACL) MOD 65536) XOR B

	ACL = (61640 * 28188) = 1737508320
	ACL = (1737508320 + (39337 XOR 30561)) MOD 65536 = 13480
	C = ((64372 + 13480) MOD 65536) XOR 39337 = 43445

	ACL = (C DIV 256) + ((B MOD 256) * 256)
	ACL = ACL XOR A
	D = ((D XOR B) + ACL) MOD 65536

	ACL = (43445 DIV 256) + ((39337 MOD 256) * 256) = 43433
	ACL = 43433 XOR 61640 = 22881
	D = ((19168 XOR 39337) + 22881) MOD 65536 = 11434

	Neste ponto temos os valores:

	A = 61640
	B = 39337
	C = 43445
	D = 11434

Rotação:

	ACL = A
	A = B
	B = C
	C = D
	D = ACL

	ACL = 61640
	A = 39337
	B = 43445
	C = 11434
	D = 61640

	Valores finais no final da 1ª rodada:

	A = 39337
	B = 43445
	C = 11434
	D = 61640

Assim vemos acima os valores finais para a 1ª rodada da cifragem. As outras 7 rodadas têm o processo de cifragem idêntico e, por isso, vou condensar os dados destas 7 rodadas na tabela a seguir:

	RODADA	Soma & Subtração	Inversão		Difusão			Rotação

	2	A = 29500		A = 27251		A = 56413		A = 23253
		B = 30954		B = 32376		B = 23253		B = 62006
		C = 32106		C = 15485		C = 62006		C = 47626
		D = 36478		D = 60046		D = 47626		D = 56413

	3	A = 38894		A = 30615		A = 13053		A = 30218
		B =  3346		B = 17165		B = 30218		B = 52033
		C = 15223		C = 60987		C = 52033		C = 40194
		D = 50755		D =  4806		D = 40194		D = 13053

	4	A = 12105		A = 41263		A = 53860		A =  2732
		B = 18549		B = 14408		B =  2732		B = 56111
		C = 60065		C = 18922		C = 56111		C = 65211
		D = 20536		D = 30032		D = 65211		D = 53860

	5	A = 45813		A = 44466		A =  8025		A = 48815
		B = 22054		B = 40790		B = 48815		B = 39829
		C = 24749		C = 62816		C = 39829		C = 18683
		D = 38559		D = 9878		D = 18683		D =  8025

	6	A = 12795		A = 50993		A = 14085		A =  1035
		B =  1768		B = 52486		B =  1035		B = 28538
		C = 52423		C = 64460		C = 28538		C = 10518
		D = 42957		D = 59559		D = 10518		D = 14085

	7	A = 12361		A =  7984		A = 37815		A = 56835
		B = 19685		B = 19020		B = 56835		B = 31582
		C = 43039		C = 18856		C = 31582		C = 52193
		D =  5706		D = 58646		D = 52193		D = 37815

	8	A = 54708		A = 28373		A = 45639		A = 37778
		B = 19446		B = 57675		B = 37778		B =  8351
		C = 60526		C = 46316		C =  8351		C = 34358
		D = 24033		D = 63069		D = 34358		D = 45639

	INTERAÇÃO FINAL
		A = 19057
		B = 11640
		C = 33583
		D = 60240

Esta tabela resume toda a cifragem de um bloco de 64 bits no algoritmo DRT. Na entrada temos:

	A = 0
	B = 0
	C = 0
	D = 0

	A Chave de cifragem é (em Hexadecimal, 240 bits):

	000000000000000000000000000000000000000000000000000000000000

	O Criptograma correspondente é:

	A = 19057
	B = 11640
	C = 33583
	D = 60240

Em seguida vejamos um exemplo da decifragem utilizando o algoritmo DRT.


2.4 DECIFRAGEM PASSO A PASSO

Consideremos o criptograma cujos valores para A, B, C e D, representem respectivamente 19057, 11640, 33583 e 60240, e cuja chave seja
[000000000000000000000000000000000000000000000000000000000000]. Vamos à sua decifragem. Como se fez na cifragem, vamos condensar a decifragem relativa à interação final e às rodadas de 8 até 2 (note que na decifragem devemos considerar tudo ao inverso!!!) em uma tabela. Veja a seguir:

RODADA Rotação Difusão Inversão Soma &
Subtração
INTERAÇÃO
FINAL
A = 37778
B = 8351
C = 34358
D = 45639
8 A = 45639
B = 37778
C = 8351
D = 34358
A = 28373
B = 57675
C = 46316
D = 63069
A = 54708
B = 19446
C = 60526
D = 24033
A = 56835
B = 31582
C = 52193
D = 37815
7 A = 37815
B = 56835
C = 31582
D = 52193
A = 7984
B = 19020
C = 18856
D = 58646
A = 12361
B = 19685
C = 43039
D = 5706
A = 1035
B = 28538
C = 10518
D = 14085
6 A = 14085
B = 1035
C = 28538
D = 10518
A = 50993
B = 52486
C = 64460
D = 59559
A = 12795
B = 1768
C = 52423
D = 42957
A = 48815
B = 39829
C = 18683
D = 8025
5 A = 8025
B = 48815
C = 39829
D = 18683
A = 44466
B = 40790
C = 62816
D = 9878
A = 45813
B = 22054
C = 24749
D = 38559
A = 2732
B = 56111
C = 65211
D = 53860
4 A = 53860
B = 2732
C = 56111
D = 65211
A = 41263
B = 14408
C = 18922
D = 30032
A = 12105
B = 18549
C = 60065
D = 20536
A = 30218
B = 52033
C = 40194
D = 13053
3 A = 13053
B = 30218
C = 52033
D = 40194
A = 30615
B = 17165
C = 60987
D = 4806
A = 38894
B = 3346
C = 15223
D = 50755
A = 23253
B = 62006
C = 47626
D = 56413
2 A = 56413
B = 23253
C = 62006
D = 47626
A = 27251
B = 32376
C = 15485
D = 60046
A = 29500
B = 30954
C = 32106
D = 36478
A = 39337
B = 43445
C = 11434
D = 61640

LÓGICA DA DECIFRAGEM (última volta)

4. Rotação
	A = 39337
	B = 43445
	C = 11434
	D = 61640

	ACL = D
	D = C
	C = B
	B = A
	A = ACL

	A = 61640
	B = 39337
	C = 43445
	D = 11434
3. Difusão
	ACL = (C DIV 256) + ((B MOD 256) * 256)
	ACL = (ACL XOR A)
	D = (D – ACL + 65536) MOD 65536
	D = (D XOR B)

	ACL = (43445 DIV 256) + ((39337 MOD 256) * 256) = 43433
	ACL = 43433 XOR 61640 = 22881
	D = (11434 – 22881 + 65536) MOD 65536 = 54089
	D = (54089 XOR 39337) = 19168

	ACL = (A * KEY[N + 5])
	ACL = (ACL + (B XOR 30561)) MOD 65536 
	C = C XOR B 
	C = (C - ACL + 65536) MOD 65536

	ACL = (61640 * 28188) = 1737508320
	ACL = (1737508320 + (39337 XOR 30561)) MOD 65536 = 13480
	C = 43445 XOR 39337 = 12316
	C = (12316 – 13480 + 65536) MOD 65536 = 64372

	ACL = ((C XOR 27809) + (D * KEY[N + 4])) MOD 65536
	B = (B - A + 65536) MOD 65536
	A = (A XOR ACL)

	ACL  = (64372 XOR 27809) = 38869
	ACL = (38869 + (19168 * 12596)) MOD 65536 = 44373
	B = (39337 – 61640 + 65536) MOD 65536 = 43233
	A = (61640 XOR 44373) = 23965

Valores atuais para as words:

	A = 23965
	B = 43233
	C = 64372
	D = 19168
2. Inversão
	X1 = (A MOD 256) * 256
	X2 = C DIV 256
	X3 = (C MOD 256) * 256
	X4 = A DIV 256
	A = (X1 + X2)
	C = (X3 + X4)

	X1 = (23965 MOD 256) * 256 = 40192
	X2 = 64372 DIV 256 = 251
	X3 = (64372 MOD 256) * 256 = 29696
	X4 = 23965 DIV 256 = 93
	A = (40192 + 251) = 40443
	C = (29696 + 93) = 29789

	X1 = (B MOD 256) * 256
	X2 = D DIV 256
	X3 = (D MOD 256) * 256
	X4 = B DIV 256
	B = (X1 + X2)
	D = (X3 + X4)

	X1 = (43233 MOD 256) * 256 = 57600
	X2 = (19168 DIV 256) = 74
	X3 = (19168 MOD 256) * 256 = 57344
	X4 = (43233 DIV 256) = 168
	B = (57600 + 74) = 57674
	D = (57344 + 168) = 57512

	A = 40443
	B = 57674
	C = 29789
	D = 57512
1. Soma e Subtração
	A = (A - KEY[N + 0] + 65536) MOD 65536
	B = (B + KEY[N + 1]) MOD 65536
	C = (C + KEY[N + 2]) MOD 65536
	D = (D - KEY[N + 3] + 65536) MOD 65536

	A = (40443 – 40443 + 65536) MOD 65536 = 0
	B = (57674  + 7862) MOD 65536 = 0
	C = (29789 + 35747) MOD 65536 = 0
	D = (57512 – 57512 + 65536) MOD 65536 = 0

ENFIM O BLOCO DECIFRADO:

	A = 0
	B = 0
	C = 0
	D = 0

Está completo o processo de decifragem do Criptossistema DRT.


SOBRE A GERAÇÃO DE CHAVES

O módulo de geração de chaves do Criptossistema DRT parte de uma semente de 240 bits, ou 30 bytes. É necessário primeiro explicar a função transformadora CIF. Esta função recebe um conjunto de 80 bits e retorna um conjunto de 80 bits. Ela utiliza 2 vetores auxiliares que contém os seguintes valores:

	Nº	VETOR 1		VETOR 2
	1	155		199
	2	211		 99
	3	 33		 66
	4	 82		113
	5	 21		105
	6	101		 17
	7	 41		235
	8	 91		 73
	9	249		159
	10	173		234

Observa-se que todos os elementos dos 2 vetores representados na tabela acima podem ser representados por um único byte. A entrada da função também deve corresponder a um vetor de 10 elementos que obrigatoriamente tem os seus elementos com valores entre 0 e 255.

A primeira operação consiste em somar cada um dos elementos do vetor de entrada com cada um dos elementos do vetor 1 extraindo o módulo em base 256. Considerando que o vetor de entrada (VETOR BASE) possui todos os seus 10 elementos iguais a zero, temos:

	Nº	VETOR BASE	VETOR 1		NOVO VETOR BASE
	1	0		155		155
	2	0		211		211
	3	0		 33		 33
	4	0		 82		 82
	5	0		 21		 21
	6	0		101		101
	7	0		 41		 41
	8	0		 91		 93
	9	0		249		249
	10	0		173		173

Para dar seqüência ao processo desta função temos uma estrutura com 10 voltas. Esta estrutura é dividida em 4 partes:

  • 1ª parte: Alteração dos 5 primeiros elementos do VETOR BASE.
  • 2ª parte: Permutação dos 10 elementos do VETOR BASE.
  • 3ª parte: Adição dos elementos do VETOR 2 no VETOR BASE.
  • 4ª parte: Rotação dos elementos do VETOR 2.

Vamos explicá-las detalhadamente:

1ª parte: Alteração dos 5 primeiros elementos do VETOR BASE

Consiste simplesmente em fazer uma operação XOR entre o elemento 6 do VETOR BASE ao elemento 1; o elemento 7 ao elemento 2; o elemento 8 ao elemento 3; o elemento 9 ao elemento 4 e finalmente o elemento 10 ao elemento 5. Resta dizer que os elementos alterados são os de índice 1, 2, 3, 4 e 5, PERMANECENDO INALTERADOS OS DEMAIS!!!

	Nº	VETOR BASE	RESULTADO
	1	155
	2	211
	3	 33
	4	 82
	5	 21
	6	101		254
	7	 41		250
	8	 91		122
	9	249		171
	10	173		184

O VETOR BASE resultante é: 254, 250, 122, 171, 184, 101, 41, 91, 249, 173. Observem que os últimos 5 elementos do VETOR BASE ficaram inalterados e os 5 primeiros (que estão em negrito) foram alterados.

2ª parte: Permutação dos 10 elementos do VETOR BASE:

Nesta fase o VETOR BASE tem os seus elementos trocados de posição. A troca obedece a 2 índices, sendo um para as voltas pares e outro para as voltas ímpares. Como estão na 2ª parte da PRIMEIRA VOLTA vamos utilizar o índice de permutação 1.

	Nº	VETOR BASE	ÍNDICE DE		VETOR BASE
				PERMUTAÇÃO
	1	254		 8		 91
	2	250		 5		184
	3	122		 2		250
	4	171		 3		122
	5	184		 9		249
	6	101		 1		254
	7	 41		10		173
	8	 91		 7		 41
	9	249		 4		171
	10	173		 6		101

Verificamos que o índice de permutação é 8, 5, 2, 3, 9, 1, 10, 7, 4, 6. Este índice se refere às voltas de número ímpar. Para as voltas de número par o índice é 4, 7, 2, 9, 3, 6, 8, 10, 1, 5. O VETOR BASE, após a permutação contém os seguintes elementos: 91, 184, 250, 122, 249, 254, 173, 41, 171, 101.

3ª parte: Adição dos Elementos do Vetor 2 no Vetor Base:

Nesta parte soma-se cada elemento do VETOR BASE com cada elemento do VETOR 2 resultando deste processo um NOVO VETOR BASE.

	Nº	VETOR BASE	VETOR 2		NOVO VETOR BASE
	1	 91		199		 34
	2	184		 99		 27
	3	250		 66		 60
	4	122		113		235
	5	249		105		 98
	6	254		 17		 15
	7	173		235		152
	8	 41		 73		114
	9	171		159		 74
	10	101		234		 79

Quando há o estouro do valor 256 deve-se considerar o módulo do valor da soma nesta base.

4ª parte: Permutação dos valores do VETOR 2

Nesta operação os elementos do VETOR 2 sofrem uma rotação, ou seja, o 1º elemento passa a ser o 2º, o 2º passa a ser o 3º e assim por diante, sendo que o último elemento do vetor 2 passa a ser o primeiro.

	Nº	VETOR 2		NOVO VETOR 2
	1	199		234
	2	 99		199
	3	 66		 99
	4	113		 66
	5	105		113
	6	 17		105
	7	235		 17
	8	 73		235
	9	159		 73
	10	234		159

O VETOR BASE termina a primeira volta com os seguintes valores: 34, 27, 60, 235, 98, 15, 152, 114, 74, 79. A partir deste ponto o VETOR BASE é modificado pela outras 9 voltas restantes. Após a décima volta o VETOR BASE fica com os elementos 68, 80, 23, 97, 39, 137, 89, 160, 161, 177. Vamos chamar esta função de CIF. Ela recebeu um Vetor onde os 10 elementos eram nulos (0) e retornou um Vetor com os elementos 68, 80, 23, 97, 39, 137, 89, 160, 161, 177.


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.


CONCLUSÃO

Como autor do criptossistema DRT minhas palavras de nada valem para louvá-lo ou desprezá-lo. Somente as opiniões dos especialistas podem dizer o que realmente este criptossistema representa.

Apesar disto, em alguns testes que foram feitos, o cifrário se revelou satisfatoriamente forte, não apresentando características comuns aos cifrários banais.

A vocês, leitores interessados na Criptologia, cabe dar o veredicto.

Sobre o autor

Meu amigo Yugi, sempre muito solícito, em Abril de 2004, enviou um novo criptossistema que ele chamou de DRT-240. Trata-se de um algoritmo simétrico que trabalha com criptografia de blocos de 64 bits e uma chave de 240 bits. Como sempre, um trabalho de altíssima qualidade. Sinto-me honrada em poder divulgá-lo. Conheça o DRT-240!

Este algoritmo também está zipado num pacote que contém o texto explicativo que foi publicado aqui na Aldeia, um programa de cifragem que usa o DRT-240 da autoria do próprio Yugi e um texto desafio - você deve achar a chave que foi usada para cifrá-lo. Quem é que se habilita?

mfx brokerпосуда алюминиеваядепутат лобановский topodinмини ноутбукfbconsult.ru полигон ооо