algoritmo de encriptacion CAST


La siguiente es una traduccion de la RFC de el algoritmo de encriptacion CAST. Una RFC es un documento tecnico que da origen  o describe un estandar

1. Introducción

   Este documento describe el algoritmo de cifrado CAST-128, un DES-como
   La sustitución-permutación (SPN) criptosistema que parece
   tienen buena resistencia al criptoanálisis diferencial y lineal
   criptoanálisis, y el criptoanálisis de clave relacionada. Esta cifra también
   posee una serie de otras propiedades criptográficas deseable,
   incluyendo avalancha, estricto criterio Avalanche (SAC), el bit
   Criterio de la Independencia (BIC), no hay propiedad complementaria, y un
   ausencia de claves débiles y semi-débiles. Por tanto, parece ser un buen

   candidato para un uso general en toda la comunidad de Internet
   siempre que sea un criptográficamente fuerte, cifrado disponibles gratuitamente
   algoritmo es necesario.

   Adams [Adams] discute el procedimiento de diseño CAST en algunos detalles;
   análisis también se pueden obtener en línea (véase, por ejemplo, [web1] o

2. Descripción del algoritmo

   CAST-128 pertenece a la clase de algoritmos de cifrado se conoce como
   sistemas de cifrado de Feistel; funcionamiento general de aplicación es similar a los Datos
   Encryption Standard (DES). El algoritmo de cifrado completo se da en
   los siguientes cuatro pasos.

   ENTRADA: texto plano … m64 m1; clave K = k1 … k128.
   SALIDA: c1 texto cifrado … C64.

   1. (Cuadro clave) Calcule 16 pares de subclaves (Kmi, Kri) de K
      (Véanse las secciones 2,1 y 2,4).
   2. (L0, R0) <- (m1. .. m64). (Dividir el texto en claro a la izquierda y
      derecho de 32-bit mitades L0 = m1 … m32 y m33 = R0 … m64.)
   3. (16 balas) para i desde 1 hasta 16, calcule Li y Ri sigue como:
      Li = Ri-1;
      Ri = Li-1 ^ f (Ri-1, Kmi, Kri), donde f se define en la sección 2.2
       (F es de Tipo 1, Tipo 2 o Tipo 3, en función de i).
   4. c1 … C64 <- (R16, L16). (Cambio de final bloques L16, R16 y
      concatenar para formar el texto cifrado.)

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

   Véase el Apéndice B de vectores de prueba que se puede utilizar para verificar
   corrección de una aplicación de este algoritmo.

2.1. Los pares de claves de la Ronda

   CAST-128 utiliza un par de subclaves por vuelta: una cantidad de 32-bit Km es
   utilizado como una «ocultación» clave y una cantidad de 5 bits Kr se utiliza como un
   «Rotación» clave.

2.2. Rondas no idénticos

   Tres funciones diferentes redondas se utilizan en CAST-128. Las rondas son
   de la siguiente manera (donde «D» es la entrada de datos a la función f y «I bis» –
   «Id» es el byte más significativo a través de byte menos significativo de
   I, respectivamente). Tenga en cuenta que «» y «-» son la suma y resta
   módulo 2 ** 32, «^» es XOR bit a bit, y es «<<<» la circular de izquierda
   turnos.

       Tipo 1: I = ((Kmi D) <<<Kri)
                f = ((S1 [IA] ^ S2 [Ib]) – S3 [] Ic) S4 [id]

       Tipo 2: I = ((Kmi ^ D) <<<Kri)
                f = ((S1 [] I bis – 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, 16 y utilizar la función f de tipo 1.
   Rondas 2, 5, 8, 11 y 14 f utilización función del tipo 2.
   Rondas 3, 6, 9, 12 y 15 f utilizar la función de tipo 3.

2.3. Sustitución Cajas

   CAST-128 utiliza ocho cajas de sustitución: cajas de s-S1, S2, S3 y S4
   son redondos función s-cajas, S5, S6, S7, S8 y son la clave horario de s-
   cajas. Aunque 8 s-cajas necesitará un total de 8 kilobytes de almacenamiento,
   tenga en cuenta que sólo el 4 KBytes se requieren durante el cifrado real /
   descifrado, ya que la generación de subclave se realiza normalmente antes de cualquier
   datos de entrada.

   Véase el Apéndice A de los contenidos de las cajas s-S1 – S8.

2.4. Fechas clave

   Deje que la clave de 128-bit se x0x1x2x3x4x5x6x7x8x9xAxBxCxDxExF, donde x0
   representa el byte más significativo y representa menos xF
   byte significativo.

   Que z0 .. zF ser intermedias (temporal) bytes.
   Que Si [] representan s i-box y dejar que «^» representa además XOR.

   Las subclaves se forman a partir de la clave x0x1x2x3x4x5x6x7x8x9xAxBxCxDxExF
   de la siguiente manera.

   z0z1z2z3 = ^ x0x1x2x3 S5 [xD] ^ S6 [xF] ^ S7 [xC] ^ S8 [Xe] ^ S7 [x8]
   z4z5z6z7 = ^ x8x9xAxB S5 [z0] ^ S6 [z2] ^ S7 [z1] ^ S8 [z3] ^ S8 [xA]
   z8z9zAzB = ^ xCxDxExF S5 [Z7] ^ S6 [z6] ^ S7 [z5] ^ S8 [z4] ^ S5 [x9]
   zCzDzEzF = ^ x4x5x6x7 S5 [es] ^ S6 [z9] ^ S7 [zB] ^ S8 [Z8] ^ S6 [xB]
   K1 = S5 [Z8] ^ S6 [z9] ^ S7 [Z7] ^ S8 [z6] ^ S5 [z2]
   K2 = zA S5 [] ^ S6 [zB] ^ S7 [z5] ^ S8 [z4] ^ S6 [z6]
   K3 = S5 [ZC] ^ S6 [zd] ^ S7 [z3] ^ S8 [z2] ^ S7 [z9]
   K4 = S5 ze [] ^ S6 [zF] ^ S7 [z1] ^ S8 [z0] ^ S8 [] ZC
   x0x1x2x3 = ^ z8z9zAzB S5 [z5] ^ S6 [Z7] ^ S7 [z4] ^ S8 [z6] ^ S7 [z0]
   x4x5x6x7 = ^ z0z1z2z3 S5 [x0] ^ S6 [x2] ^ S7 [x1] ^ S8 [x3] ^ S8 [z2]
   x8x9xAxB = ^ z4z5z6z7 S5 [x7] ^ S6 [x6] ^ S7 [x5] ^ S8 [x4] ^ S5 [z1]
   xCxDxExF = ^ zCzDzEzF S5 [xA] ^ S6 [x9] ^ S7 [xB] ^ S8 [x8] ^ S6 [z3]
   K5 = S5 [x3] ^ S6 [x2] ^ S7 [] xC ^ S8 [xD] ^ S5 [x8]
   K6 = S5 [x1] ^ S6 [x0] ^ S7 [Xe] ^ S8 [xF] ^ S6 [xD]
   K7 = S5 [x7] ^ S6 [x6] ^ S7 [x8] ^ S8 [x9] ^ S7 [x3]
   K8 = S5 [x5] ^ S6 [x4] ^ S7 [xA] ^ S8 [xB] ^ S8 [x7]
   z0z1z2z3 = ^ x0x1x2x3 S5 [xD] ^ S6 [xF] ^ S7 [xC] ^ S8 [Xe] ^ S7 [x8]
   z4z5z6z7 = ^ x8x9xAxB S5 [z0] ^ S6 [z2] ^ S7 [z1] ^ S8 [z3] ^ S8 [xA]
   z8z9zAzB = ^ xCxDxExF S5 [Z7] ^ S6 [z6] ^ S7 [z5] ^ S8 [z4] ^ S5 [x9]
   zCzDzEzF = ^ x4x5x6x7 S5 [es] ^ S6 [z9] ^ S7 [zB] ^ S8 [Z8] ^ S6 [xB]
   K9 = S5 [z3] ^ S6 [z2] ^ S7 [] ZC ^ S8 [zd] ^ S5 [z9]
   K10 = S5 [z1] ^ S6 [z0] ^ S7 [ZE] ^ S8 [zF] ^ S6 [] ZC
   K11 = S5 [Z7] ^ S6 [z6] ^ S7 [Z8] ^ S8 [z9] ^ S7 [z2]
   K12 = S5 [z5] ^ S6 [z4] ^ S7 [es] ^ S8 [zB] ^ S8 [z6]
   x0x1x2x3 = ^ z8z9zAzB S5 [z5] ^ S6 [Z7] ^ S7 [z4] ^ S8 [z6] ^ S7 [z0]
   x4x5x6x7 = ^ z0z1z2z3 S5 [x0] ^ S6 [x2] ^ S7 [x1] ^ S8 [x3] ^ S8 [z2]
   x8x9xAxB = ^ z4z5z6z7 S5 [x7] ^ S6 [x6] ^ S7 [x5] ^ S8 [x4] ^ S5 [z1]
   xCxDxExF = ^ zCzDzEzF S5 [xA] ^ S6 [x9] ^ S7 [xB] ^ S8 [x8] ^ S6 [z3]
   K13 = S5 [x8] ^ S6 [x9] ^ S7 [x7] ^ S8 [x6] ^ S5 [x3]
   K14 = S5 xA [] ^ S6 [xB] ^ S7 [x5] ^ S8 [x4] ^ S6 [x7]
   K15 = S5 [xC] ^ S6 [xD] ^ S7 [x3] ^ S8 [x2] ^ S7 [x8]
   K16 = S5 xE [] ^ S6 [xF] ^ S7 [x1] ^ S8 [x0] ^ S8 [xD]

   [La otra mitad es idéntica a lo que se da lo anterior, el ejercicio de
   de los últimos creado x0 .. xF para generar claves K17 – K32.]

   z0z1z2z3 = ^ x0x1x2x3 S5 [xD] ^ S6 [xF] ^ S7 [xC] ^ S8 [Xe] ^ S7 [x8]
   z4z5z6z7 = ^ x8x9xAxB S5 [z0] ^ S6 [z2] ^ S7 [z1] ^ S8 [z3] ^ S8 [xA]
   z8z9zAzB = ^ xCxDxExF S5 [Z7] ^ S6 [z6] ^ S7 [z5] ^ S8 [z4] ^ S5 [x9]
   zCzDzEzF = ^ x4x5x6x7 S5 [es] ^ S6 [z9] ^ S7 [zB] ^ S8 [Z8] ^ S6 [xB]
   K17 = S5 [Z8] ^ S6 [z9] ^ S7 [Z7] ^ S8 [z6] ^ S5 [z2]
   K18 = zA S5 [] ^ S6 [zB] ^ S7 [z5] ^ S8 [z4] ^ S6 [z6]
   K19 = S5 [ZC] ^ S6 [zd] ^ S7 [z3] ^ S8 [z2] ^ S7 [z9]
   K20 = S5 ze [] ^ S6 [zF] ^ S7 [z1] ^ S8 [z0] ^ S8 [] ZC
   x0x1x2x3 = ^ z8z9zAzB S5 [z5] ^ S6 [Z7] ^ S7 [z4] ^ S8 [z6] ^ S7 [z0]
   x4x5x6x7 = ^ z0z1z2z3 S5 [x0] ^ S6 [x2] ^ S7 [x1] ^ S8 [x3] ^ S8 [z2]
   x8x9xAxB = ^ z4z5z6z7 S5 [x7] ^ S6 [x6] ^ S7 [x5] ^ S8 [x4] ^ S5 [z1]
   xCxDxExF = ^ zCzDzEzF S5 [xA] ^ S6 [x9] ^ S7 [xB] ^ S8 [x8] ^ S6 [z3]
   K21 = S5 [x3] ^ S6 [x2] ^ S7] [xC ^ S8 [xD] ^ S5 [x8]
   K22 = S5 [x1] ^ S6 [x0] ^ S7 [Xe] ^ S8 [xF] ^ S6 [xD]
   K23 = S5 [x7] ^ S6 [x6] ^ S7 [x8] ^ S8 [x9] ^ S7 [x3]
   K24 = S5 [x5] ^ S6 [x4] ^ S7 [xA] ^ S8 [xB] ^ S8 [x7]
   z0z1z2z3 = ^ x0x1x2x3 S5 [xD] ^ S6 [xF] ^ S7 [xC] ^ S8 [Xe] ^ S7 [x8]
   z4z5z6z7 = ^ x8x9xAxB S5 [z0] ^ S6 [z2] ^ S7 [z1] ^ S8 [z3] ^ S8 [xA]
   z8z9zAzB = ^ xCxDxExF S5 [Z7] ^ S6 [z6] ^ S7 [z5] ^ S8 [z4] ^ S5 [x9]
   zCzDzEzF = ^ x4x5x6x7 S5 [es] ^ S6 [z9] ^ S7 [zB] ^ S8 [Z8] ^ S6 [xB]
   K25 = S5 [z3] ^ S6 [z2] ^ S7 [] ZC ^ S8 [zd] ^ S5 [z9]
   K26 = S5 [z1] ^ S6 [z0] ^ S7 [ZE] ^ S8 [zF] ^ S6 [] ZC
   K27 = S5 [Z7] ^ S6 [z6] ^ S7 [Z8] ^ S8 [z9] ^ S7 [z2]
   K28 = S5 [z5] ^ S6 [z4] ^ S7 [es] ^ S8 [zB] ^ S8 [z6]
   x0x1x2x3 = ^ z8z9zAzB S5 [z5] ^ S6 [Z7] ^ S7 [z4] ^ S8 [z6] ^ S7 [z0]
   x4x5x6x7 = ^ z0z1z2z3 S5 [x0] ^ S6 [x2] ^ S7 [x1] ^ S8 [x3] ^ S8 [Z2]
   x8x9xAxB = ^ z4z5z6z7 S5 [x7] ^ S6 [x6] ^ S7 [x5] ^ S8 [x4] ^ S5 [z1]
   xCxDxExF = ^ zCzDzEzF S5 [xA] ^ S6 [x9] ^ S7 [xB] ^ S8 [x8] ^ S6 [z3]
   K29 = S5 [x8] ^ S6 [x9] ^ S7 [x7] ^ S8 [x6] ^ S5 [x3]
   K30 = xA S5] [^ S6 [xB] ^ S7 [x5] ^ S8 [x4] ^ S6 [x7]
   K31 = S5 [xC] ^ S6 [xD] ^ S7 [x3] ^ S8 [x2] ^ S7 [x8]
   K32 = S5 xE [] ^ S6 [xF] ^ S7 [x1] ^ S8 [x0] ^ S8 [xD]

2.4.1. Subclaves de ocultación y Girar subclaves

   Que KM1, …, Km16 se subclaves enmascaramiento de 32-bit (uno por vuelta).
   Que KR1,, productos KR16 ser de 32-bit girar subclaves (uno por vuelta), y sólo el
   menos significativo 5 bits son utilizados en cada ronda.

   for (i = 1; i <= 16; i) (Kmi = Ki; Kri = K16 i;)

2.5. Variable tamaño de clave

   El algoritmo de cifrado CAST-128 ha sido diseñado para permitir una clave
   tamaño que puede variar de 40 bits a 128 bits, en incrementos de 8-bits
   (Es decir, los tamaños de clave permitidos son de 40, 48, 56, 64, …, 112, 120,
   y 128 bits. Para el funcionamiento tamaño de clave variable, el pliego de condiciones
   de la siguiente manera:

   1) Para los tamaños de clave de hasta e incluyendo 80 bits (es decir, 40, 48, 56, 64,
      72, y los bits 80), el algoritmo es exactamente como se especifica pero utiliza
      12 rondas en lugar de 16;

   2) Para los tamaños de clave superior a 80 bits, el algoritmo utiliza el total de 16
      rondas;

   3) Para los tamaños de clave menos de 128 bits, la clave se rellena con cero
      bytes (en el extremo derecho, o al menos importantes, las posiciones) a
      128 bits (ya que el horario clave CAST-128 supone una clave de entrada de
      128 bits).

   Tenga en cuenta que a pesar de CAST-128 puede soportar los 12 tamaños de clave que figuran
   anterior, 40 bits, 64 bits, los bits de 80, y 128 bits son los tamaños
   encontrar utilidad en ambientes típicos. Por lo tanto, es probable que se
   suficiente para la mayoría de implementaciones para apoyar un subconjunto de sólo
   estos cuatro tamaños.

   Con el fin de evitar la confusión cuando la operación tamaño de clave variable se utiliza,
   el nombre CAST-128 se considera sinónimo de la CAST5 nombre;
   esto permite un tamaño de clave que se adjunta de forma inequívoca. Así, para
   ejemplo, CAST-128 con una clave de 40-bit se denomina CAST5-40;
   Cuando una clave de 128-bit está explícitamente previsto, el nombre CAST5-128 debe
   ser utilizado.

2.6. CAST5 identificadores de objetos

   Para aquellos que puedan estar usando el algoritmo CAST en la negociación dentro de un
   Protocolo, o en cualquier otro contexto que puede requerir el uso del objeto
   Identificadores, la OID han definido las siguientes.

algoritmos OBJECT IDENTIFIER:: =
   (Iso (1) memberBody (2) EE.UU. (840) nt (113.533) nsn (7) algoritmos (66))

cast5CBC OBJECT IDENTIFIER:: = (algoritmos cast5CBC (10))

    Parámetros:: = SEQUENCE (
        iv OCTET STRING DEFAULT 0, – vector de inicialización
        KeyLength ENTERO – Longitud de la clave, en bits
    )

    Nota: El IV es opcional y por defecto a todos de cero. En la codificación
          final, si uno iv todas cero es usado, entonces debería de ausencia del
          los parámetros. En el extremo de decodificación, un iv ausentes deben ser
          interpretarse en el sentido de todos los ceros.

    Este es el cifrado y descifrado en modo CBC con el CAST-128
    bloque de algoritmo de cifrado simétrico.

cast5MAC OBJECT IDENTIFIER:: = (algoritmos cast5MAC (11))

    Parámetros:: = SEQUENCE (
        ENTERO macLength, – longitud del MAC, en bits
        KeyLength ENTERO – Longitud de la clave, en bits
    )

    Esta es la autenticación de mensajes mediante el CAST-128 bloques simétricos
    algoritmo de cifrado.

pbeWithMD5AndCast5CBC OBJECT IDENTIFIER:: =
    (Algoritmos pbeWithMD5AndCAST5-CBC (12))

    Parámetros:: = SEQUENCE (
        sal OCTET STRING,
        ENTERO iterationCount, – número total de iteraciones hash
        KeyLength ENTERO – Longitud de la clave, en bits
    )

    Nota: El IV se deriva del procedimiento de dispersión y por lo tanto
          No es necesario incluir en los parámetros.

Anuncio publicitario

¿Qué estas pensando?

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.