CAST-256

Cast (Carlisle Adams and Stafford Tavares) é uma família de cifra de blocos. Nessa família se encontra a cifras de blocos individuais conhecidas como, CAST-64, CAST-128 (ou CAST5) e CAST-128 (candidato ao AES). O algoritmo encontrado na família CAST é baseado no algoritmo DES (utlizada a rede de Feistel e é conhecido como rede de substituição-permutação). CAST usa S-caixas fixas, mas são consideravelmente maiores do que as utilizadas em DES. Essas S-caixas foram cuidadosamente projetadas para ser não-linear e resistente à criptoanálise.

A cifra CAST-256 foi derivada da cifra CAST-128 que é um algoritmo de cifra de bloco, sendo criado em 1996 por Carlisle Adams e Stafford Tavares. O CAST-128 é um algoritmo de Feistel, com 12 a 16 iterações (rodadas) da etapa principal, tamanho de bloco de 64 bits e chave de tamanho variável (40 a 128 bits, com acréscimos de 8 bits). Os 16 rounds de iteração são usados quando a chave tem comprimento maior que 80 bits. [1]

O algoritmo AES (Advanced Encryption Standard) é o principal padrão de criptografia simétrica atual. [2] Vários algoritmos participaram do processo para escolha do AES. [2] Para candidatura ao AES surgiu a necessidade de aumentar o tamanho do bloco de cifragem. Blocos esses que passaram a ter 128 bits. A partir disso, deu-se inicio a cifra CAST-256.

A cifra CAST-256 além de ter a característica de blocos maiores, agora com 128 bits, também possui chaves de 128, 192 ou 256 bits e 48 iterações (12 quad-rounds) e faz uso de uma rede de Feistel "generalizada".


Princípios do CAST-256

  • Em 1988-1990 começou o processo de criação de design para cifras simétricas, dando inicio à funções booleanas, Caixas-S, funções de rodadas, rotinas de chaves.
  • Em 1992-1993 o nome CAST foi introduzido à família e especificado diversos parametros, dando inicio a criação do CAST-1 e posteriormente o CAST-2.
  • Em 1993-1995 ocorreu a modificação da rotina de chave e partir disto deu-se o CAST-3 com uma maior foco em função de rodada e no design das Caixas-S. A criação preliminar das boxes-S caracteriza a CAST-4 e quando o design das boxes-S foram finalizadas criou-se a CAST-5 conhecida como CAST-128.
  • Em 1997 foi publicada a cifra CAST-128 (RFC 2144).
  • Em 1998 deu inicio a expansão da CAST-128 para a CAST-256 que foi submetida como candidato à cifra de bloco AES (Advanced Encryption Standard.

Estrutura de funcionamento

A cifra CAST-256 faz uso de rede de Feistel, sendo o algoritmo desta rede baseado em:

  • Seja F {\displaystyle F} a função que será computada a cada rodada e seja k 0 , k 1 , . . . , k n {\displaystyle k_{0},k_{1},...,k_{n}} as subchaves utilizadas nas rodadas 0 , 1 , . . . , n {\displaystyle 0,1,...,n} respectivamente. Então a operação básica realizada para encriptar o bloco de entrada é a seguinte:
    • Divida o bloco de entrada em duas metades (esquerdo e direito) que são processadas independentemente e para cada rodada i = 0 , 1 , . . . , n {\displaystyle i=0,1,...,n} compute:
E s q u e r d a i + 1 = D i r e i t a i {\displaystyle Esquerda_{i+1}=Direita_{i}}
D i r e i t a i + 1 = E s q u e r d a i F ( D i r e i t a i , k i ) {\displaystyle Direita_{i+1}=Esquerda_{i}\oplus F(Direita_{i},k_{i})}
  • A operação em cada rodada i = n , n 1 , . . . , 0 {\displaystyle i=n,n-1,...,0} utilizada para a decriptação do texto cifrado ( E s q u e r d a i + 1 , D i r e i t a i + 1 ) {\displaystyle (Esquerda_{i+1},Direita_{i+1})} é:
D i r e i t a i = E s q u e r d a i + 1 {\displaystyle Direita_{i}=Esquerda_{i+1}}
E s q u e r d a i = D i r e i t a i + 1 F ( E s q u e r d a i + 1 , k i ) {\displaystyle Esquerda_{i}=Direita_{i+1}\oplus F(Esquerda_{i+1},k_{i})}
  • Ao final das operações, obtem-se o texto em claro novamente.

Funcionamento do algoritmo

Na Figura 1 conseguimos ver como é a estrutura de funcionamento da cifra CAST-256 que é bastante parecida com a de Feistel e se dá da seguinte maneira:

Figura 1: CAST-256

Dado um bloco de entrada de 128-bits, divida-o em quatro blocos de 32-bits, denotado por β = ( A , B , C , D ) {\displaystyle \beta =(A,B,C,D)} . Seja o quad-round definido pelas seguintes operações de encriptação: β Q i ( β ) {\displaystyle \beta \leftarrow Q_{i}(\beta )} .[3]

C = C f 1 ( D , k r 0 ( i ) , k m 0 ( i ) ) {\displaystyle C=C\oplus f_{1}(D,k_{r0}(i),k_{m0}(i))}
B = B f 2 ( C , k r 1 ( i ) , k m 1 ( i ) ) {\displaystyle B=B\oplus f_{2}(C,k_{r1}(i),k_{m1}(i))}
A = A f 3 ( B , k r 2 ( i ) , k m 2 ( i ) ) {\displaystyle A=A\oplus f_{3}(B,k_{r2}(i),k_{m2}(i))}
D = D f 1 ( A , k r 3 ( i ) , k m 3 ( i ) ) {\displaystyle D=D\oplus f_{1}(A,k_{r3}(i),k_{m3}(i))}

quando k r j ( i ) {\displaystyle k_{rj}(i)} e k m j ( i ) {\displaystyle k_{mj}(i)} são gerados pelo algoritmo de geração de chave do CAST-256 (mais detalhes sobre o algoritmo de geração de chaves e sobre as funçoes f 1 , f 2 , f 3 {\displaystyle f_{1},f_{2},f_{3}} em [4]

O processo de decriptação se dá da seguinte maneira β Q i ¯ ( β ) {\displaystyle \beta \leftarrow {\overline {Q_{i}}}(\beta )} .[3]

C = C f 1 ( D , k r 0 ( i ) , k m 0 ( i ) ) {\displaystyle C=C\oplus f_{1}(D,k_{r0}(i),k_{m0}(i))}
B = B f 2 ( C , k r 1 ( i ) , k m 1 ( i ) ) {\displaystyle B=B\oplus f_{2}(C,k_{r1}(i),k_{m1}(i))}
A = A f 3 ( B , k r 2 ( i ) , k m 2 ( i ) ) {\displaystyle A=A\oplus f_{3}(B,k_{r2}(i),k_{m2}(i))}
D = D f 1 ( A , k r 3 ( i ) , k m 3 ( i ) ) {\displaystyle D=D\oplus f_{1}(A,k_{r3}(i),k_{m3}(i))}

Descrição do algoritmo CAST-256

Seja β {\displaystyle \beta } = 128-bits de bloco de entrada (texto em claro), temos o seguinte código de encriptação que corresponde ao esquema dito na seção anterior.

for(i = 0; i < 6; i++)
    Beta <- Q[i](Beta) 
for (i = 6; i < 12; i++) 
    Beta <- Q_barra[i](Beta)


A saída desse algoritmo é o bloco de entrada cifrado β {\displaystyle \beta } de 128-bits.

A cifra CAST-256 faz uso de uma chave primária k de 256-bits. Considerando que a descriptografia é idêntica a criptografia, exceto que o conjunto de entradas das chaves k r ( i ) , k m ( i ) {\displaystyle k_{r}(i),k_{m}(i)} na quad-round são derivadas de k e são usada em ordem inversa [5], como se segue:

for (i = 0; i < 12; i++)
{
    k_{rnovo}(i) = k_{r}(11-i)
    k_{mnovo}(i) = k_{m}(11-i)
}

A rotina de geração de chaves do CAST-256 é dada pelo seguinte algoritmo [5]:

Inicialização

c m = 2 30 2 = 5 A 827999 16 {\displaystyle c_{m}=2^{30}{\sqrt {2}}=5A827999_{16}}
m m = 2 30 3 = 6 E D 9 E B A 1 16 {\displaystyle m_{m}=2^{30}{\sqrt {3}}=6ED9EBA1_{16}}
c r = 19 {\displaystyle c_{r}=19}
m r = 17 {\displaystyle m_{r}=17}
for (i = 0; i < 24; i++){
    for(j = 0; j < 8; j++){
        tmj(i) = cm
        cm = (cm + mm) mod 2 ^ 32
        trj(i) = cr
        cr = (cr + mr) mod 32
    }
}

Rotina da chave

κ {\displaystyle \kappa } = ABCDEFGH = chave primaria de 256 bits, K.

for (i = 0; i < 12; i++){
    kappa <- omega(2i)(K)
    kappa <- omega(2i+)(K)
    kr(i) <- kappa
    km(i) <- kappa
}

Detalhes sobre a especificação da função omega em [5].

Nota:

( | K | = 128 ) > ( E = F = G = H = 0 ) {\displaystyle (|K|=128)->(E=F=G=H=0)}
( | K | = 160 ) > ( F = G = H = 0 ) {\displaystyle (|K|=160)->(F=G=H=0)}
( | K | = 192 ) > ( G = H = 0 ) {\displaystyle (|K|=192)->(G=H=0)}
( | K | = 224 ) > ( H = 0 ) {\displaystyle (|K|=224)->(H=0)}

Criptoanálise

A ferramenta fundamental de um ataque linear é um diferenciador linear que consiste uma equação linear envolvendo pedaços de texto simples, texto cifrado e chave, segurando com probabilidade não uniforme. Essa discrepância entre a probabilidade de uma relação linear de uma cifra e de um comportamento aleatório é chamado de viés. Normalmente, as relações lineares são derivados para cada componente individual em uma cifra. Além disso, as relações lineares são combinadas, levando a aproximações lineares de estruturas maiores, até alcançar múltiplas rodadas. Intuitivamente, aproximações lineares são realizadas de preferência sobre os componentes não lineares, tais como, as S-boxes. Seja a S-box S: Z 2 n Z 2 m {\displaystyle \mathbb {Z} _{2}^{n}\rightarrow \mathbb {Z} _{2}^{m}} , e duas cadeias de bits, Γ X Z n 2 {\displaystyle \Gamma X\in \mathbb {Z} _{n}^{2}} e Γ Y Z n 2 {\displaystyle \Gamma Y\in \mathbb {Z} _{n}^{2}} , conhecido como máscaras de bits. A equação linear envolvendo os bits de entrada de S {\displaystyle S} , designada por Γ X {\displaystyle \Gamma X} , e seus bits de saída designados por, Γ Y {\displaystyle \Gamma Y} é X Γ X S [ X ] Γ Y = 0 {\displaystyle X\ast \Gamma X\oplus S[X]\ast \Gamma Y=0} . A probabilidade para que essa relação seja verdadeira é [3]

P Γ X , Γ Y = # X Z 2 n | X . Γ X = S [ X ] . Γ Y # X Z 2 n {\displaystyle P_{\Gamma X,\Gamma Y}={\frac {\#{X\in \mathbb {Z} _{2}^{n}|X.\Gamma X=S[X].\Gamma Y}}{\#{X\in \mathbb {Z} _{2}^{n}}}}}

Se Γ X = Γ Y = 0 {\displaystyle \Gamma X=\Gamma Y=0} , então a máscara de bits é chamado trivial; caso contrário, ele é chamado de não-trivial. A tendência desta relação linear é | P Γ X , Γ Y 1 2 | {\displaystyle |P_{\Gamma X,\Gamma Y}-{\frac {1}{2}}|} . Uma lista exaustiva contendo todas as entradas e saídas de máscaras de bits de uma S-box S é chamada Tabela aproximação linear (LAT) de S {\displaystyle S} . O LAT permite identificar os mais promissores (não-trivial) relações lineares para S, nomeadamente aqueles com maior viés. [3]

O viés da combinação de duas aproximações lineares é derivado usando de Matsui Empilhar-Up Lema. A Zero-Up Lema assume que todas as subchaves das rodadas são independentes, a fim de calcular o viés combinado das relações lineares independentes. As subchaves das rodadas em CAST, porém, não são independentes, mas gerado através de um algoritmo de chave programação. No entanto, assumimos a aproximação é razoavelmente boa, como já foi assumido em ataques lineares anteriores sobre a cifra DES. [3]

Mas, não se pode combinar um número arbitrário de relações lineares. Uma restrição óbvia é a de limitar o esforço de ataque para menos do que a de uma pesquisa exaustiva chave. O tamanho da chave para CAST-128 é de pelo menos 40 bits, e para CAST-256, pelo menos 128 bits. Além disso, tanto para CAST-128 e CAST-256, nós olhamos para os ataques que não exigem mais texto do que o livro de códigos completa ( 2 64 e 2 128 {\displaystyle (2^{64}e2^{128}} , blocos de texto, respectivamente). Caso contrário, um invasor pode recolher o livro de códigos e usá-lo para decifrar (e forjar) criptogramas sem conhecer a chave (e enquanto a chave não é alterado) [3]

As mesmas S-caixas de CAST-128 também são usadas em CAST-256. Da mesma forma, os mesmos três tipos de funções das rodadas de CAST-128 são aplicadas em grupos de quatro rodadas chamados quadrounds. Assim, usamos em CAST-256 as mesmas máscaras de bits usados em nossa análise da CAST-128. É interessante observar que [6] já previu aproximações lineares com mascára de saída diferente de zero. Mas, os autores [6] não discutiram mais este assunto. [3]

As primeiras relações lineares que temos para CAST-256 são 4-rodadas iterativa (Figura 2), que significa um quad-round. Apenas uma (de quatro) rodada é ativa e todas as quatro funções f i {\displaystyle f_{i}} desta rodada estão ativas. [3]

Figura 2 : Um quad-round iterativo de relações lineares para CAST-256

Calculamos o viés para a aproximação linear com máscaras ( 00 x , 00000001 x ) {\displaystyle (00_{x},00000001_{x})} , para cada um das quatro caixas S 1 {\displaystyle S_{1}} até S 4 {\displaystyle S_{4}} . O viés é exatamente 2 5 {\displaystyle 2^{-5}} para todos eles. [3]

Poderíamos ter construído as relações lineares alternativas iterativas, com bits de ordem superior definidos como 00000002 x {\displaystyle 00000002_{x}} ou 00000003 x {\displaystyle 00000003_{x}} . Para máscara de bit 00000002 x {\displaystyle 00000002_{x}} todos as S-caixas presente no viés 2 5 {\displaystyle 2^{-5}} , e por 00000003 x {\displaystyle 00000003_{x}} o viés são 2 6 , 2 5 , 2 6 {\displaystyle 2^{-6},2^{-5},2^{-6}} e 2 7 {\displaystyle 2^{-7}} para as S-boxes S 1 {\displaystyle S_{1}} à S 4 {\displaystyle S_{4}} , respectivamente. Estas máscaras levam a uma diminuição de 2 3 {\displaystyle 2^{-3}} no viés combinado devido ao carry e devido ao empréstimo de bits nas operações em modulo de adição e subtração nas funções das rodadas. Por exemplo, para uma rodada completa, usando a máscara 00000002 x {\displaystyle 00000002_{x}} , o viés torna-se 2 4 2 5 2 5 2 5 2 5 2 3 = 2 19 {\displaystyle 2^{4}*2^{-5}*2^{-5}*2^{-5}*2^{-5}*2^{-3}=2^{-19}} . O fator 2 3 {\displaystyle 2^{-3}} é, devido à aproximação do módulo da subtração e adição com a máscara 00000002 x {\displaystyle 00000002_{x}} . Assim, temos não nenhuma vantagem significativa no uso dessas máscaras de bits alternativas em vez de 00000001 x {\displaystyle 00000001_{x}} . [3]


A relação linear na Figura 2 pode ser usado para distinguir um número de rodadas quad-rounds da CAST-256 a partir de uma permutação aleatória (com o mesmo tamanho de bloco). Pode-se derivar uma relação linear, tais como ( D H ) 00000001 x = 0 {\displaystyle (D\oplus H)*00000001_{x}=0} , onde (A, B, C, D) indica um bloco de texto simples, e (E, F, G, H) indica um bloco de texto cifrado após uma série de quad-rodadas.

Na Prática

Diversas ferramentas comerciais fazem uso da cifragem de dados:

  • TrueCrypt
  • CryptoExpert 2004 Lite
  • E4M Disk Encryption

O PGP (Pretty Good Privacy) tem como algoritmo default CAST-128.


Referências

  1. {Ronielton Rezende Oliveira. Criptografia simétrica e assimétrica - Os principais algoritmos de cifragem. Segurança Digital [Revista online],31:11{15, 2012}
  2. a b {Joan Daemen and Vincent Rijmen. The design of Rijndael: AES-the advanced encryption standard. Springer Science & Business Media, 2013.}
  3. a b c d e f g h i j Jorge Nakahara Jr and Mads Rasmussen. Linear analysis of reduced-round cast-128 and cast-256.
  4. Carlisle Adams and Jeff Gilchrist. The cast-256 encryption algorithm. Technical report, 1999.
  5. a b c SICAST. Cast-256 algorithm specification.
  6. a b S.E. Tavares M. Wiener C.M. Adams, H.M. Heys. An analysis of the cast-256 cipher.