martes, 9 de julio de 2013

Cifrados por Bloque - Blowfish

Blowfish es un algoritmo de cifrado por bloques simétrico libre de patente creado por Bruce Schneier en 1993 como una alternativa para reemplazar a DES como estándar de cifrado. Este algoritmo esta compuesto por 18 semiclaves (K) y 4 cajas (subtitution boxes S). Es un proceso relativamente simple y altamente seguro ya que a la fecha no se conoce ningún tipo de criptoanalisis efectivo contra este algoritmo de cifrado.

Algoritmo de cifrado



Para poder entender el algoritmo primero tendremos que describir la funcion F, la cual se encarga de sustituir los valores resultantes de las operaciones XOR utilizando las cajas de sustitución(subtitution boxes).

La función F divide el grupo de 32bits en 4 grupos de 8bits el bloque a y bloque b se buscan en las cajas sustitución(representadas con la letra "S" en el diagrama), el valor representado por el primer octeto de la primer caja se suma al valor representado de el segundo octeto de la segunda caja y al resultado se saca el modulo de 2³², posteriormente a este resultado se aplica una operación XOR con el valor representado por el tercer bloque en la tercer caja y al resultado de esto se le suma el valor representado por el cuarto octeto en la cuarta caja y al final se vuelve a aplicar el modulo 2³².



Scheier describe la funcion F como:
$$f(L_{i} \oplus K_{i})= ((((S_{1}[A] + S_{2}[B])\mod{2^{32}})\oplus S_{3}[C]) + S_{4}[D]) \mod{2^{32}}$$

Una vez entendido que es la función F del Blowfish paso a describir el algoritmo de cifrado:
  • Un bloque de 64bits se divide en dos bloques de 32bits (L y R)
  • Se realiza una operación XOR a los primeros 32bits(L)  con la primera subclave(K) y se realiza la función F con el resultado de la operación.
  • Se realiza una operación XOR con la segunda parte de los 32 bits(R)  con el resultado de la función F(L).
  • Se intercambian posiciones (R pasa a ser L y L pasa a ser R) y se repite el proceso anterior por 16 iteraciones.
  • Al terminar la ultima iteracion no se realizara el intercambio.
  • Se realiza la operacion XOR entre el valor alojado en L y la subclave 18.
  • Se realiza la operacion XOR entre el valor alojado en R y la subclave 17.
  • Se unen los dos fragmentos del bloque para generar nuevamente un bloque de 64bits ya cifrado.
Las subclaves y las cajas de substitución no corresponden a valores arbitrarios, estos valores son el resultado de un proceso previo a la encriptacion o desencriptacion con Blowfish.

Planificación de claves

La planificación es la inicialización del arreglo de las subclaves haciéndolas dependiente de la clave de usuario. Estos valores serán las subclaves para el proceso de encriptacion y desencriptacion con Blowfish por lo tanto deben calcularse antes de comenzar a cifrar o descifrar mensajes propios.

Proceso:

  • Se define un arreglo de 18 secciones las cuales deben de poder almacenar 32bits cada una ya que estas alojaran las subclaves, ademas se generan 4 arreglos de 256 posiciones tambien de 32bits cada una, estas ultimas son las cajas de substitución.
  • Cada sección de los arreglos (subclaves y cajas) son inicializados con una cadena fija, esta cadena son los digitos en hexadecimal de $\pi$ a excepción de su parte entera. El orden de inicialización es $P_{1}, P_{2}, P_{3}, \dots, P_{18}, S_{1}, S_{2}, S_{3}, S_{4}$
  • A cada una de las subclaves se le aplica un XOR con 32bits de la clave de usuario. 
  • Una vez inicializadas las cajas y las subclaves, se cifra un mensaje nulo (lleno de ceros)
  • El paso anterior tiene 2 funciones, primero sustituye las primeras dos subclaves y segundo entra a Blowfish para ser cifrada(con las subclaves sustituidas).
  • Se repite el paso anterior pero esta vez se sustituyen las siguientes dos subclaves. Este paso se repite hasta que las 18 subclaves y el contenido de las 4 cajas hayan sido sustituidas por las salidas corresondientes del cifrado de la palabra nula.
En total se realizaran 521 iteraciones para obtener los valores que se utilizaran en el cifrado de información.

Librerías para cifrado Blowfish



Ejemplo de cifrado Blowfish con PyCrypto






Salida por consola





Bibliografia




5 comentarios:

  1. Muy bien explicado, lo entendi a la primera :), (naaa la neta lo lei 2 veces XD)

    ResponderEliminar
  2. Ojo con la ortografía (acentos, espacios). En LaTeX (ecuaciones), usa \mod para que salga bien (poner texto en modo matemático hace que parezca el producto de tres variables, m x o x d, y se ve feo).

    En las referencias, pon primero el autor de la obra citada, luego su título, luego información sobre cómo y cuándo fue publicado y al final la URL en el caso que sea un website. Está bien que sea en sí una liga toda la entrada, pero incluye la URL visible para referencias que son websites.

    Hubiera sido bueno incluir quién lo usa en la práctica y para qué.

    6 pts.

    ResponderEliminar
  3. HOla disculpa tu bibliografia tiene un pequeño error, la segunda es Aldo, mientras que tu tienes Alda.

    ResponderEliminar
    Respuestas
    1. Muchas gracias por tu comentario y ser observador ;) ya esta actualizado.

      Eliminar
  4. Muchas felicidades amigo, llevaba como diez vídeos y visto como mil paginas y no lograba entender como funcionada hasta ahorita. Gracias :T

    ResponderEliminar