martes, 9 de julio de 2013

CIFRADO POR BLOQUES: CAST-128

CIFRADO POR BLOQUES
Los algoritmos de cifrado por bloques toman bloques de tamaño fijo del texto en claro (plaintext) y producen un bloque de tamaño fijo de texto cifrado (ciphertext), generalmente del mismo tamaño que la entrada.
El tamaño del bloque debe ser lo suficientemente grande para evitar ataques de texto cifrado. La asignación de bloques de entrada a bloques de salida debe ser uno a uno para hacer el proceso reversible y parecer aleatoria.
Para la asignación de bloques los algoritmos de cifrado simétrico realizan sustituciones y permutaciones en el texto en claro hasta obtener el texto cifrado.

ACERCA DEL CAST-128
El algoritmo fue creado en 1996 por Carlisle Adams y Stafford Tavares usando el procedimiento de diseño CAST. CAST-128 o CAST5 es el más conocido y más ampliamente utilizado sistema de cifrado por bloques CAST. 
Es usado en un gran número de productos, notablemente como cifrador por defecto en algunas versiones de GNU Privacy Guard (GPG) y Pretty Good Privacy (PGP). También ha sido aprobado por el gobierno canadiense para ser usado por el Communications Security Establishment.

DEFINICIÓN

CAST-128 es un cifrador de 12 o 16 rondas que se basa en la red de Feistel con bloques de 64 bits y tamaños de clave entre 40 y 128 bits (pero con solo incrementos de 8 bits). 
Las 16 rondas completas se usan cuando la clave tiene un tamaño mayor de 80 bits. Incluye unas largas S-Boxes de 8x32 bits basadas en funciones bent, rotaciones dependientes de clave, adición y sustracción modular y operaciones XOR. 
Hay tres tipos alternativos de funciones de ronda, pero son de estructura similar y se diferencian sólo en la elección del tipo exacto de operación (XOR, adición o sustracción) en varios puntos.

El algoritmo de cifrado completo se da en los siguientes cuatro pasos:

    1.   Calcular 16 pares de subkeys {Km[i], Kr[i]} de K (Key schedule).
    2.   Dividir el texto en claro en 2 partes de 32-bits, izquierda (L0) y derecha (R0).
          (L0,R0) <-- (m1...m64)      (L0 = m1...m32, R0 = m33...m64)
    3.   En 16 rondas, tomando i el valor de 1 a 16, se calcula Li y Ri de la siguiente manera: 

          Li = Ri-1; Ri = Li-1 ^ f(Ri-1,Kmi,Kri), (f es del Tipo 1, Tipo 2, o Tipo 3, dependiendo de             i).
    4.  Se intercambian los bloques finales (L16, R16) y se concatenan para obtener el texto            cifrado.
         c1...c64 <-- (R16,L16)

El descifrado es idéntico al algoritmo de cifrado dado anteriormente, excepto que las rondas (y por lo tanto los pares de subclave) se utilizan en el orden inverso para calcular (L0, R0) a partir de (R16, L16).



PARES DE CLAVES DE RONDA
CAST-128 utiliza un par de subclaves por ronda: una cantidad 32-bits en Km se utiliza como una clave de "enmascaramiento" y una cantidad de 5 bits en Kr se utiliza como una clave de "rotación".

RONDA NO IDENTICAS
Se utilizan 3 funciones de rondas diferentes en CAST-128:
Donde "D" es la entrada de datos a la función f y "Ia" - "Id" son el byte más significativo a través de byte menos significativo de I, respectivamente. 
Tenga en cuenta que "+" y "-" son la suma y la resta módulo 2 ** 32, "^" es bit a bit XOR, y "<<<" es la operación de desplazamiento a la izquierda circular.

          Tipo 1: I = ((Kmi + D) <<< Kri)
                        f = ((S1[Ia] ^ S2[Ib]) - S3[Ic]) + S4[Id]
          Tipo 2: I = ((Kmi ^ D) <<< Kri)
                        f = ((S1[Ia] - S2[Ib]) + S3[Ic]) ^ S4[Id]
          Tipo 3: I = ((Kmi - D) <<< Kri)
                        f = ((S1[Ia] + S2[Ib]) ^ S3[Ic]) - S4[Id]

Rondas 1, 4, 7, 10, 13, y 16 usan la función f de Tipo 1.
Rondas 2, 5, 8, 11, y 14 usan la función f de Tipo 2.
Rondas 3, 6, 9, 12, y 15 usan la función f de Tipo 3.

CAJAS DE SUSTITUCIÓN (s-boxes)
CAST-128 usa ocho cajas de sustitución: 
     s-boxes S1, S2, S3 y S4 son rondas de función s-boxes.
     s-boxes  S5, S6, S7 y S8 son cronograma clave s-boxes.
Aunque 8 s-boxes requieren un total de 8 Kbytes de almacenamiento, tenga en cuenta que sólo se requieren 4 KBytes durante el cifrado / descifrado ya que la generación subclave se realiza normalmente antes de cualquier entrada de datos.

KEY SCHEDULE
Que la clave de 128 bits se x0x1x2x3x4x5x6x7x8x9xAxBxCxDxExF, donde x0 representa el byte más significativo y xF representa el byte menos significativo.
Vamos z0 .. zF ser bytes intermedios (temporal). Que Si [] representan s-box i y dejar "^" representa además XOR.

VENTAJAS
Resistencia a ataques lineales y diferenciales:
Uno de los objetivos del procedimiento de diseño CAST es para producir sistemas de cifrado que no son vulnerables a cualquiera de criptoanálisis lineal o criptoanálisis diferencial. Estos son sólo los ataques conocidos que rompen DES con menos esfuerzo que la fuerza bruta. Más en general, son los más poderosos métodos criptográficos conocidos de atacar cifrados de bloque. Ambos, sin embargo, requiere de un gran número de textos planos conocidos o elegido, por lo que una simple defensa contra ellos es volver a introducir a menudo que el enemigo no puede recopilar textos suficientes.

CÓDIGO EN PYTHON
Ejemplo tomado de www.dlitz.net, el cifrado se puede realizar de la siguiente manera:


Mostrando como resultado:

REFERENCIAS
1. Sergio Talens-Oliang, Introducción a la Criptografía.
2. www.vocal.com, CAST (CAST-128, CAST-256)
3. C. Adams (Mayo, 1997), The CAST-128 Encryption Algorithm.

5. www.dlitz.net, Module CAST

2 comentarios:

  1. Ojo con la ortografía; intenta ser consistente con el formato de las referencias en la bibliografía con respeto a qué información incluir, a qué precisión y en qué orden. 6 pts.

    ResponderEliminar
  2. Por favor podrías enviar un vídeo tutorial

    ResponderEliminar