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

O Cifrário SHJ

Seg

10

Abr

2006


20:37

(2 votos, média 5.00 de 5) 


A procura do criptógrafo por um sistema perfeito é sem dúvida uma das empreitadas mais difíceis que podemos imaginar. No começo a seguinte pergunta já nos atormenta: Será que existe realmente um criptossistema perfeito ou apenas não temos poder computacional suficiente para poder enfrentá-lo? Infelizmente não posso responder aos leitores deste artigo.

Introdução

Alguns criptoanalistas dizem que não há lógica alguma que o ser humano possa criar, que ele mesmo, com a aplicação e competência necessária, não possa elucidar. Esta pode ser uma verdade, contudo ainda não foi provada ou refutada.

Isto nos leva a refletir sobre o futuro da criptografia e da criptoanálise (na realidade falamos do futuro da Criptologia). Os sistemas especialistas que se baseiam nos conhecimentos da Inteligência Artificial e utilizam técnicas de busca de soluções - em profundidade (depth-first), em nível (breadth-first), através de técnicas heurísticas (Hill-climbing, least-cost) – com o objetivo de resolver o problema da explosão combinatória podem realmente criar "problemas" para os criptógrafos da nova geração. E a computação quântica que promete tornar os supercomputadores atuais em peças de um museu pré-histórico!

Vemos que hoje a criptoanálise evoluiu e geralmente as técnicas que são normalmente divulgadas (criptoanálise diferencial, linear, integral, etc...) representam apenas uma mínima parte do que realmente se conhece. É que a criptoanálise é a parte mais secreta da criptologia. Imagine que descobrimos uma técnica criptoanalítica eficiente contra o AES. É preferível, neste caso, fazer com que todos pensem que o AES é extremamente seguro e que não existe a mínima possibilidade de quebrá-lo, a não ser por força bruta. E realmente, ao contrário do que pensam os leigos, a quebra de criptossistemas importantes não é divulgada. Basta girar a roda da história pra trás e veremos que a máquina nazista Enigma (que já fora criptoanalisada com sucesso pelo matemático polonês Marian Rejewski, antes da Segunda Guerra Mundial) foi utilizada por vários países, principalmente as ex-colônias da Grã-Bretanha após o término da Guerra (os britânicos tinham capturado milhares de máquinas Enigma e as distribuíra para as ex-colônias que acreditavam que a cifra era inviolável!). Naturalmente, os britânicos decifraram rotineiramente as comunicações secretas destas ex-colônias durante anos. Somente em 1974 é que os britânicos revelaram que a Enigma havia sido decifrada (graças à insistência do capitão F. W. Winterbotham).

Exemplos como este podem nos assombrar. Será que o AES já foi quebrado e temos uma idéia ilusória de segurança? E a cifra RSA? Será que o problema da fatoração já pode ser solucionado? Quem nos responderá estas questões? Meu objetivo é fazer com que o leitor destas breves linhas possa pensar um pouco sobre isto.

Enquanto não chega a criptografia perfeita eu vos apresento mais um simples trabalho: O Criptossistema SHJ. Espero que gostem.

YUGI TUMRO

CRIPTOSSISTEMA SHJ

O cifrário SHJ é muito simples: todavia ele pode proteger informações em nível de segurança satisfatório. O criptossistema SHJ não é indicado para proteger informações extremamente sigilosas (militares ou governamentais), mas pode ser usado onde o AES é também utilizado.

Vamos ao descritivo do criptossistema SHJ.

1.0 Sobre as chaves do sistema

O cifrário SHJ trabalha com uma chave de 256 bits e cifra o texto claro em blocos de 64 bits. O algoritmo utiliza, numa estrutura de 20 voltas, 4 caixas de substituição não-lineares com entradas e saídas de 8 bits.

As operações utilizadas para cifrar os dados são simples: XOR, adição em módulo 216 e rotação dependente de dados (rotação para a esquerda).

1.1 Sobre a divisão dos dados

O bloco claro é dividido em 4 words de 16 bits, normalmente rotuladas de A, B, C e D. As words interagem com a chave e entre si em cada uma das voltas do processo de cifragem.

O bloco cifrado é formado pela concatenação das words após a 20 volta de processamento do sistema.

A chave inicial de 256 bits gera 84 sub-chaves de 16 bits que são utilizadas nas 20 voltas do processamento.


1.2 Sobre o cálculo de sub-chaves

As sub-chaves do sistema são calculadas a partir da chave mestre que tem 256 bits. Inicialmente temos uma tabela de rotação com 32 elementos. Ela é denominada TABROT e é apresentada a seguir:

1° - 8° 02 04 15 13 12 06 14 00
9° - 16° 07 01 11 08 03 09 05 10
17° - 24° 07 01 04 11 02 08 05 13
25° - 32° 03 15 06 12 10 14 09 00

A tabela TABROT (a tabela TABROT é fixa!) é utilizada como um índice de rotação em uma rotina interna da geração de sub-chaves que veremos logo mais.

O parâmetro da entrada da função de geração de sub-chaves é uma chave de 256 bits. Ela pode ser dividida em um vetor de 32 elementos onde esses elementos obedecem à sentença 0 <= X <= 255, sendo X um elemento deste vetor. De fato cada elemento X indica uma entrada em uma SBOX (o sistema possui 4 SBOX’s, veja em anexos). Assim podemos formar mais 4 vetores de 32 elementos Y, onde Y representa a saída correspondente do elemento X na SBOX em uso. Veja abaixo (CHAVE = chave inicial de 256 bits, 32 bytes):

For ct := 1 to 32 step 1
C1[ct] = (C1[ct] + CAIXA1[CHAVE[ct] + 1]) MOD 256
C2[ct] = (C2[ct] + CAIXA2[CHAVE[ct] + 1]) MOD 256
C3[ct] = (C3[ct] + CAIXA3[CHAVE[ct] + 1]) MOD 256
C4[ct] = (C4[ct] + CAIXA4[CHAVE[ct] + 1]) MOD 256
Next

De acordo com este processo temos 4 vetores C1, C2, C3 e C4. Eles nada mais são do que a própria chave inicial que passou pelas SBOX's 1, 2, 3 e 4, respectivamente. Também são criadas duas variáveis V1 e V2 ambas com valor inicial zero. A variável SUBCHAVE é iniciada com o conteúdo da chave inicial de 256 bits.

Neste ponto temos o início da estrutura mestre de geração de sub-chaves, rotulado de estrutura Z1. No princípio desta estrutura os vetores C1, C2, C3 e C4 se alteram através de uma rotação de elementos (não confundir com rotação de bits!). As rotações são de 1, 3, 5 e 7 elementos em relação à C1, C2, C3 e C4, respectivamente. Isto significa que o primeiro elemento de C1 passa a ser o último e os outros são deslocados uma posição para cima; em C2 temos que o primeiro elemento é o 4° visto que os 3 primeiros foram deslocados para as últimas posições e assim sucessivamente. Veja:

C1 = Substr(C1,2) + Substr(C1,1,1)
C2 = Substr(C2,4) + Substr(C2,1,3)
C3 = Substr(C3,6) + Substr(C3,1,5)
C4 = Substr(C4,8) + Substr(C4,1,7)

Neste ponto abre-se uma nova estrutura rotulada de sub-estrutura Z1.1. Esta sub-estrutura é um laço de 32 voltas onde a mesma rotina é executada 32 vezes. Inicialmente vamos considerar a pseudovariável ct como o número da volta em questão. Assim temos que:

V1 = (V1 + ((C1[ct] * 256) + C3[ct])) MOD 65536
V2 = (V2 + ((C2[ct] * 256) + C4[ct])) MOD 65536
V1 = (ROT(V1,9) + (V1 XOR ROT(V2,TABROT[ct]))) MOD 65536

Nesta nomenclatura MOD representa módulo e ROT representa rotação para a esquerda; XOR é o ou-exclusivo bit a bit; * representa multiplicação.

Ao final da estrutura os nomes dos vetores C1, C2, C3 e C4 são alterados de acordo com o esquema:

TEMP = C1
C1 = C2
C2 = C3
C3 = C4
C4 = TEMP

A sub-estrutura acima (Z1.1) repete 32 vezes estes 2 trechos de pseudocódigo. A tabela TABROT faz com que V2 seja rotacionada a cada volta com um índice diferente. Ao final de cada volta os vetores são trocados: na primeira volta V1 interage com C1 e C3; na 2ª volta com C2 e C4, e assim sucessivamente.

Abre-se a nova estrutura Z2 (com 8 voltas) que mistura os 4 vetores C1, C2, C3 e C4. Primeiramente temos que os vetores C1, C2, C3 e C4 tem os seus elementos deslocados em 9, 11, 13 e 17 posições, respectivamente. Isto significa que C1 tem início com o seu 10º elemento, C2 com o seu 12º elemento, etc.

Em seguida invertem-se os últimos 16 elementos de C1 e C2. Os que pertenciam a este passam a pertencer àquele. O mesmo é feito com C3 e C4. Finalmente invertemos C1 e C3. O vetor C1 é agora C3 e este é C1.

O pseudocódigo a seguir explica este processo:

C1 = Substr(C1,10) + Substr(C1,1,09)
C2 = Substr(C2,12) + Substr(C2,1,11)
C3 = Substr(C3,14) + Substr(C3,1,13)
C4 = Substr(C4,18) + Substr(C4,1,17)

cx = c1
C1 = Substr(c1,1,16) + substr(c2,17)
C2 = Substr(c2,1,16) + substr(cx,17)

cx = c3
c3 = Substr(c3,1,16) + substr(c4,17)
C4 = Substr(c4,1,16) + substr(cx,17)

cx = c1
C1 = c3
C3 = cx

Em seguida os vetores C1, C2, C3 e C4 passam por 4 caixas de substituição do sistema rotuladas de CAIXA1, CAIXA2, CAIXA3 e CAIXA4. Cada elemento de cada vetor (C1, C2, C3 e C4) passa por uma destas SBOX’s.

Nas voltas de números 1, 2, 3 e 4 são utilizadas as SBOX’s de números 2, 3, 4 e 1; 3, 4, 1 e 2; 4, 1, 2 e 3; 1, 2, 3 e 4 respectivamente. Nas voltas de 5 a 8 repete-se esta mesma ordem de uso das SBOX’s. Veja:

i = 1
FOR CT := 1 TO 32 STEP 1
C1[CT] = CAIXAi[C1[CT] + 1]
C2[CT] = CAIXAi+1[C2[CT] + 1]
C3[CT] = CAIXAi+2[C3[CT] + 1]
C4[CT] = CAIXAi+3[C4[CT] + 1]
i = i + 1
NEXT

A nomenclatura CAIXAi representa uma das 4 caixas possíveis: para a volta 1 temos as caixas 2, 3, 4 e 5 para C1, C2, C3 e C4, respectivamente.

Finalizando a estrutura Z2 temos que Cx = C1. Cada elemento de C1 deve ser alterado por um XOR com o elemento correspondente de C2 em passagem pela SBOX VetInc. Cada elemento de C2 é alterado por XOR com o correspondente em C3 em passagem pela SBOX VetInc; cada elemento de C3 é alterado por XOR com o correspondente em C4 em passagem pela SBOX VetInc; Finalmente cada elemento de C4 é alterado por XOR seu o seu correspondente do vetor temporário Cx em passagem pela SBOX VetInc. Veja:

for ct := 1 to 32
Cx = C1
C1[ct] = C1[ct] XOR VETINC[C2[ct] + 1]
C2[ct] = C2[ct] XOR VETINC[C3[ct] + 1]
C3[ct] = C3[ct] XOR VETINC[C4[ct] + 1]
C4[ct] = C4[ct] XOR VETINC[Cx[ct] + 1]
Next

A função XOR é apenas uma simples operação de ou-exclusivo. VetInc é uma SBOX de 8 bits com 256 entradas. As entradas da SBOX VetInc são endereçadas de 1 até 256 e os elementos de C1, C2, C3 e C4 são endereçados de 0 até 255; isto explica o acréscimo da unidade no pseudocódigo acima que faz referência à SBOX VetInc. Fecha-se aqui a estrutura Z2.

Iniciamos a estrutura Z3 com 32 voltas onde cada elemento de C1, C2, C3 e C4 é alterado por uma operação de adição ou subtração com a SBOX VetInc (caixa de substituição de 8 bits). O parâmetro de endereçamento é representado pelas variáveis V1 e V2. Na realidade V1 e V2 são variáveis de 16 bits, logo é preciso dividi-las em 2 endereços de 8 bits para aplicar na SBOX VetInc. Existe ainda a variável Posic que controla a mudança cíclica dos vetores C1, C2, C3 e C4.

Veja a seguir todo o pseudocódigo desta rotina:

POSIC = 0
FOR CT := 1 TO 32 STEP 1
C1[CT] = (C1[CT] + VETINC[(V1 DIV 256) + 1]) MOD 256
C2[CT] = (C2[CT] - VETINC[(V1 MOD 256) + 1]) MOD 256
C3[CT] = (C3[CT] + VETINC[(V2 DIV 256) + 1]) MOD 256
C4[CT] = (C4[CT] - VETINC[(V2 MOD 256) + 1]) MOD 256

V1 = (ROT(V1,Tabrot[ct]) * VetInc[(V2 MOD 256) + 1]) MOD 65536
V2 = (V2 + (V1 XOR ROT(v2,tabrot[(V1 MOD 32) + 1]))) MOD 65536
V1 = (V1 - ROT(V2,Tabrot[(V1 MOD 32) + 1]) + 65536) MOD 65536
V2 = (ROT(V2,Tabrot[ct]) * VetInc[(V1 DIV 256) + 1]) MOD 65536

FOR XD := 0 TO POSIC
acl := c1
c1 := c2
c2 := c3
c3 := c4
c4 := acl
NEXT

POSIC = POSIC + 1
IF POSIC > 3
POSIC = 0
ENDIF
NEXT

O final da rotina é a geração da primeira sub-chave que é acrescida ao vetor SUBCHAVE. A sub-chave gerada é a própria variável V1. Neste ponto voltamos ao início da estrutura Z1 e repetimos todo o processo até que as 84 sub-chaves de 16 bits estejam geradas.

Todo o processo de geração de chaves pode ser resumido no se modelo:

  1. Criar as variáveis SUBCHAVE (com o conteúdo da chave inicial de 256 bits); criar também as variáveis V1 e V2 com valor zero.
  2. A partir da chave inicial criar 4 vetores de 32 elementos denominados C1, C2, C3, C4 que são realmente a própria chave inicial transformada pelas SBOX’s CAIXA1, CAIXA2, CAIXA3 e CAIXA4, respectivamente.
  3. Início da estrutura mestre de geração de sub-chaves. Rotação dos elementos dos vetores C1, C2, C3 e C4 em 1, 3, 5 e 7 bytes respectivamente.
  4. Início da sub-estrutura Z1.1. Alteração das variáveis V1 e V2. Ciclo de 32 voltas.
  5. Abre-se a sub-estrutura Z2 com 8 voltas. Iniciamos com rotação e inversão dos vetores C1, C2, C3 3 C4. Depois cada um destes vetores passa por uma SBOX’s que depende da variável POSIC. Posteriormente os vetores V1, V2, V3 e V4 interagem entre si e com a SBOX especial VETINC.
  6. Inicia-se a estrutura Z3 com 32 voltas. Interação geral entre V1, V2, C1, C2, C3, C4 e a SBOX VetInc.
  7. Acrescenta-se V1 ao Vetor SUBCHAVE.
  8. Verificar se já existem 84 sub-chaves de 16 bits. Em caso positivo terminar a rotina de geração de sub-chaves, caso contrário voltar ao passo 3.

É importante lembrar que o vetor SUBCHAVE já tem 16 sub-chaves antes da rotina de geração de sub-chaves ser executada. Estas sub-chaves são recolhidas da chave inicial de 256 bits.

Está finalizada a rotina de cálculo de sub-chaves do criptossistema SHJ. Resta explicar o processo de cifragem do texto claro e decifragem do criptograma.


2.0 Sobre o processo de cifragem

A cifragem do sistema SHJ é muito simples. A estrutura de cifragem tem 20 voltas e inicia com a adição de 4 palavras chaves nas words A, B, C e D que representam um bloco de texto claro com 64 bits. As palavras chaves são inseridas através de soma e XOR (N = 1, índice das sub-chaves e KEY é o vetor com 84 sub-chaves):

A = (A + KEY[N + 0]) MOD 65536
B = B XOR KEY[N + 1]
C = C XOR KEY[N + 2]
D = (D + KEY[N + 3]) MOD 65536

O próximo passo representa a estrutura de difusão do sistema SHJ. Neste passo procurou-se fazer com que a interação entre as 4 words que representam o bloco em processamento seja o mais confusa possível (sem complicar demais o código de cifragem!). Vejam:

X1 = A XOR B
X2 = (A + B) MOD 65536
X1 = X1 XOR ROT(X2,3)
X2 = (X1 * X2) MOD 65536
X1 = X1 XOR ROT(C,9)

C = C XOR X2
D = D XOR X1

O código acima altera as palavras C e D com X2 e X1. Este representa uma fusão entre A, B e C; aquele representa fusão entre A e B.

O próximo passo é a alteração da palavra B:

B = (B + ((CAIXA1[(C MOD 256) + 1] * 256) + (CAIXA2[(D DIV 256) + 1]))) MOD 65536

CAIXA1 e CAIXA2 são SBOX’s do sistema. MOD representa módulo e DIV representa a parte inteira de uma operação de divisão; * = multiplicação.

O próximo passo é a alteração da palavra A. A alteração processa-se como segue:

X = ROT(B,(C + D) MOD 16)
X = (CAIXA3[(X DIV 256) + 1] * 256) + CAIXA4[(X MOD 256) + 1]
A = A XOR X

Uma pequena observação deve ser feita em relação ao código acima. Ele é executado em 19 das 20 voltas da estrutura de cifragem. Na volta de número 13 a palavra A fica inalterada (esta rotina é desprezada na 13ª volta).

Para finalizar a estrutura de cifragem temos a inversão das palavras A e C; B e D. Veja:

TMP = A
A = C
C = TMP

TMP = B
B = D
D = TMP

A última instrução antes de começar a próxima volta é incrementar o índice de sub-chaves N. Neste caso N = N + 4. Depois voltamos ao início da estrutura de cifragem e começamos a 2ª volta. Faremos o mesmo para as voltas restantes até que se complete a 20ª volta.

Após a 20ª volta inserimos mais 4 sub-chaves nas words e terminamos a cifragem:

A = (A + KEY[N + 0]) MOD 65536
B = B XOR KEY[N + 1]
C = C XOR KEY[N + 2]
D = (D + KEY[N + 3]) MOD 65536

O bloco cifrado é a concatenação das words A, B, C e D.

2.1 Sobre o processo de decifragem

O processo de decifragem com o algoritmo SHJ é quase idêntico ao processo de cifragem. Ele pode ser condensado no pseudocódigo abaixo:

* Passo 1: Inverso do passo final:

A = (A - KEY[81] + 65536) MOD 65536
B = B XOR KEY[82]
C = C XOR KEY[83]
D = (D - KEY[84] + 65536) MOD 65536

N := 77 // INDICE DE SUB-CHAVES

FOR CONT := 20 TO 1 STEP -1

* DECIFRAGEM DA INVERSÃO:

TMP = A
A = C
C = TMP

TMP = B
B = D
D = TMP

* Passo 2: DECIFRAGEM DA ESTRUTURA DE DIFUSÃO:

X = ROT(B,(C + D) MOD 16)
X = CAIXA3[(X DIV 256) + 1] * 256) + CAIXA4[(X MOD 256) + 1]
A = A XOR X
B = (B - ((CAIXA1[(C MOD 256) + 1] * 256) + (CAIXA2[(D DIV 256) + 1] )) + 65536) MOD 65536

X1 = A XOR B
X2 = (A + B) MOD 65536
X1 = X1 XOR ROT(X2,3)
X2 = (X1 * X2) MOD 65536


C = C XOR X2
X1 = X1 XOR ROT(C,9)
D = D XOR X1

* Passo 1: Inverso do passo inicial


A = (A - KEY[N + 0] + 65536) MOD 65536

B = B XOR KEY[N + 1]
C = C XOR KEY[N + 2]
D = (D - KEY[N + 3] + 65536) MOD 65536

N = N - 4
NEXT


3.0 Sobre as SBOX’S do cifrário SHJ

O criptossistema SHJ trabalha com 5 SBOX’s de 8 bits com 256 entradas e saídas cada uma. Estas são chamadas de CAIXA1, CAIXA2, CAIXA3, CAIXA4 e VETINC. As 4 primeiras são utilizadas na cifragem, decifragem e geração de sub-chaves. A última (VETINC) é usada somente na geração de sub-chaves do sistema.

Caixa 1
51 105 201 220 86 92 36 24 217 247 175 15 225 41 85 193
124 176 116 76 18 83 148 17 103 38 163 87 22 134 61 45
140 106 11 211 122 221 123 196 234 89 69 72 187 126 71 210
132 97 55 146 44 53 224 207 96 70 32 249 169 102 65 237
7 206 183 23 212 56 209 12 137 184 154 248 230 25 135 33
228 156 75 68 161 130 204 112 58 47 205 255 90 52 77 246
31 232 8 66 173 171 136 107 178 231 185 20 214 162 194 26
120 143 252 197 73 138 46 202 218 251 150 91 155 28 88 203
3 78 170 131 1 13 190 238 94 64 229 159 226 21 119 145
42 81 6 29 127 244 158 9 164 39 180 84 74 213 95 242
191 14 195 59 16 165 125 172 149 153 192 160 2 114 250 30
110 93 222 168 57 253 208 239 82 174 128 109 200 101 215 223
219 48 151 115 216 141 139 157 236 133 100 104 243 19 63 111
10 235 40 4 198 199 108 144 43 188 241 147 79 80 49 186
67 37 233 227 0 27 177 179 34 121 5 181 182 254 142 245
113 129 152 167 50 98 99 117 166 189 62 54 60 35 240 118

Caixa 2
194 61 48 128 164 213 169 248 240 22 113 134 179 84 210 52
205 14 253 88 42 98 209 180 81 130 77 159 127 119 53 40
102 87 155 60 136 115 183 149 229 238 212 147 152 116 63 2
76 255 153 166 148 110 13 72 59 0 121 129 158 163 142 145
62 215 1 79 34 168 107 39 15 192 105 27 174 222 211 154
9 243 200 111 20 125 108 226 124 31 239 165 49 167 26 217
175 19 123 156 46 191 221 246 99 118 104 254 236 133 140 86
74 151 17 41 85 112 5 252 237 56 181 146 227 51 139 193
95 70 69 78 197 83 144 21 241 162 251 225 198 18 150 161
36 195 176 106 141 58 172 214 12 64 178 11 29 231 28 57
103 208 73 24 117 25 96 131 43 186 202 37 199 126 54 75
66 109 4 224 203 30 185 50 10 189 33 8 38 171 47 223
89 173 100 245 32 232 7 137 188 187 228 132 234 190 216 94
3 65 93 23 92 235 45 201 101 71 250 90 233 230 207 244
220 114 170 182 135 97 35 204 157 177 82 6 44 184 160 80
120 196 16 67 247 206 138 249 68 218 122 143 91 242 55 219

Caixa 3
36 80 225 145 162 228 58 236 123 205 150 235 246 92 83 178
66 12 116 176 90 16 187 210 112 79 85 15 117 231 68 57
119 6 49 160 39 152 140 42 21 195 135 109 237 180 233 9
216 175 76 71 177 170 19 136 120 131 151 48 2 239 208 221
232 230 26 130 173 29 84 73 181 106 244 126 47 89 87 20
108 161 64 255 40 238 24 4 186 118 124 125 5 23 63 190
14 166 183 60 218 199 55 113 165 139 93 169 105 32 30 127
247 249 191 61 51 182 163 115 91 146 33 121 70 65 7 214
220 164 72 69 41 250 74 227 209 86 96 143 172 27 202 219
134 104 37 82 197 110 132 31 111 75 101 129 56 81 3 59
77 254 189 167 50 54 157 102 213 53 122 148 215 78 241 98
147 107 17 168 253 28 0 193 251 94 88 171 159 179 43 11
204 224 95 8 198 212 243 142 222 201 206 44 223 158 62 18
138 97 22 45 35 207 155 184 217 133 153 25 185 13 203 192
211 188 229 194 154 103 240 156 128 114 252 226 67 10 144 248
141 100 38 196 245 242 99 137 1 149 200 174 52 46 234 34


Caixa 4
242 82 5 254 88 162 151 223 126 209 109 3 97 250 62 33
78 156 169 207 72 212 196 234 158 93 16 103 163 2 131 4
142 84 155 192 45 107 201 137 191 37 61 91 63 185 39 214
235 152 226 42 219 43 229 59 34 112 53 174 190 58 146 108
98 139 30 76 202 220 26 111 127 249 54 70 121 7 40 140
105 217 199 138 66 183 154 21 222 100 241 255 48 85 65 113
168 244 172 123 83 44 94 181 143 218 147 90 208 134 92 23
237 118 179 177 119 141 238 96 184 149 171 75 99 164 9 130
8 10 11 124 145 87 215 224 195 188 95 221 210 79 194 52
86 132 49 144 31 170 245 240 12 198 251 17 200 203 225 189
129 74 182 102 35 176 125 232 216 69 19 115 136 239 114 173
77 230 80 165 14 0 213 243 41 117 153 1 106 32 248 204
128 187 193 60 247 38 253 233 71 104 252 22 36 159 89 116
47 51 64 197 167 29 150 50 228 27 57 231 67 68 15 180
28 175 206 13 55 205 186 161 236 178 46 246 101 81 56 6
25 166 122 135 73 20 120 227 160 110 148 18 24 133 211 157

Estas caixas de substituição são utilizadas na cifragem, decifragem e geração de sub-chaves do sistema.

A ordem de leitura da SBOX é a linha e depois a coluna. Logo, o primeiro elemento da CAIXA4 é 242, o 2º 82, o 16º 33, o 17º elemento é 78 e assim sucessivamente.

A próxima SBOX é VETINC que somente é usada na geração de sub-chaves do sistema. Vejam a seguir.

Caixa VETINC

184 67 144 216 209 126 118 101 36 5 40 235 145 161 164 163
59 89 45 245 133 88 15 8 49 68 64 29 172 107 157 227
254 194 155 247 206 120 102 239 110 201 195 11 81 251 77 72
149 134 213 17 22 63 37 66 32 168 74 222 108 94 180 19
148 97 181 125 115 193 179 109 202 173 156 198 7 135 188 75
53 196 3 113 152 210 249 214 204 252 211 220 111 183 253 192
79 55 190 215 103 203 236 34 114 58 218 61 242 158 86 224
14 129 57 154 65 106 150 197 92 136 44 46 237 2 91 16
95 73 208 31 231 117 170 124 176 52 232 167 54 98 38 185
104 90 199 243 186 56 217 69 82 191 42 153 27 230 212 166
9 244 116 50 0 18 112 47 205 39 51 28 238 248 83 130
207 171 62 138 87 187 151 10 189 1 159 105 128 255 26 246
140 80 137 241 147 146 48 223 141 142 250 13 177 225 24 85
127 93 169 221 139 35 175 165 162 229 96 41 43 233 160 33
122 60 131 178 226 143 6 174 4 182 100 200 78 25 228 12
70 20 123 121 21 76 99 219 119 30 84 23 234 71 132 240

4.0 Conclusão final

O Criptossistema SHJ é de uma estrutura muito simples; contudo apresenta algumas características criptográficas muito interessantes (a difusão, por exemplo). A chave tem um tamanho muito bom (256 bits) e é suficiente para garantir a segurança nos dias de hoje.

Espero que os leitores tenham gostado deste breviário criptográfico sobre o SHJ. Que estas informações lhes sejam úteis.

Download

vovo Recado da vovó Vicki:

Juntamente com este texto de apresentação, o Yugi enviou um aplicativo que permite cifrar e decifrar arquivos usando o Cifrário SHJ. Você encontra o software para download aqui e na Seção de Downloads da Aldeia. Procure por Laboratórios da Aldeia | Laboratório de Criptografia.

Gostaria de aproveitar esta oportunidade para agradecer a colaboração e o empenho do Yugi, um dos colaboradores mais antigos da Aldeia Numaboa. É isso aí, Yugi! Obrigada por escolher a Aldeia para publicar seu trabalho.

Вадим Логофет банкирсковорода гриль для индукцииотзывы супермаркет класскласс лобановскийgobli nанализ данныхотзывы nikas

Informações adicionais