INSTITUTO POLITÉCNICO NACIONAL
ESCUELA SUPERIOR DE INGENIERÍA MECÁNICA Y ELÉCTRICA
SECCIÓN DE ESTUDIOS DE POSGRADO E INVESTIGACIÓN
COMPARATIVA DE SEGURIDAD DE ALGORITMOS PARA
RESÚMENES CRIPTOGRÁFICOS
Trabajo que para obtener el grado de
Especialista en Seguridad Informática y
Tecnologías de la Información
P R E S E N T A
Ing. Alejandro Chacón Zárate
Asesor:
M. en C. Moisés Salinas Rosales
IV
RESUMEN
El objetivo de este trabajo de investigación es realizar un estudio de las funciones hash por medio del análisis de su estructura, las operaciones matemáticas que integran su procesamiento interno. Actualmente existe una gran diversidad de algoritmos criptográficos de las cuales se seleccionaron los que son propuestos por los diferentes organismos de estandarización para proceder a realizar el estudio de las mismos, basados en la información de los documentos técnicos que tienen los mismos organismos así como los reportes y estudios previos que se han hecho en la materia.
V
ABSTRACT
The objective of this research is to conduct a study of hash functions through analysis of its structure and operations that constitute its internal processing. Currently there is a wide range of cryptographic algorithms which are proposed by different standardization organizations, in this case many of them was selected to carry out the study of them, based on information from technical documents that have the same bodies as well as reports and previous studies have been done in this area.
VI
INDICE GENERAL
Pág.
RESUMEN
IV
ABSTRACT
V
INDICE GENERAL
VI
INDICE DE FIGURAS
VIII
INDICE DE TABLAS
VIII
Capítulo I
DESCRIPCIÓN DE LA INVESTIGACIÓN
1.1 ANTECEDENTES
11.1.1 CRIPTOLOGÍA 1
1.1.2 FUNCIONES DE UN SOLO SENTIDO 3
1.2 PLANTEAMIENTO DEL PROBLEMA
31.3 OBJETIVO
41.4 JUSTIFICACIÓN
41.5 ALCANCES
5CAPÍTULO II
FUNCIONES HASH CRIPTOGRÁFICAS
2.1 DEFINICIÓN
62.2 CLASIFICACIÓN
72.3 PROPIEDADES
72.4 CONSTRUCCIONES BÁSICAS
8VII
2.6 ORGANIZACIONES DE NORMALIZACIÓN
11 2.6.1 NIST 11 2.6.2 NESSIE 13 2.6.3 CRYPTEC 14CAPÍTULO III
ALGORITMOS HASH CRIPTOGRÁFICOS
ESTANDARIZADOS
3.1 INTRODUCCIÓN
163.2 MD5
163.2.1 ESPACIO DE MENSAJE 17
3.2.2 ESPACIO DE RESUMEN 17
3.2.3 INICIALIZACIÓN DEL ALGORITMO 17
3.2.4 FUNCIONES AUXILIARES 19
3.2.5 PROCEDIMIENTO DE CARGA DEL BLOQUE 19
3.2.6 ESTRUCTURA DEL NÚCLEO DEL ALGORITMO 20
3.2.7 ENTREGA DEL HASH 21
3.3 SHA-1
223.3.1 ESPACIO DE MENSAJE 22
3.3.2 ESPACIO DE RESUMEN 22
3.3.3 INICIALIZACIÓN DEL ALGORITMO 22
3.3.4 FUNCIONES AUXILIARES 24
3.3.5 PROCEDIMIENTO DE CARGA DEL BLOQUE 25
3.3.6 ESTRUCTURA DEL NÚCLEO DEL ALGORITMO 26
3.3.7 ENTREGA DEL HASH 26
3.4 RIPEMD
273.4.1 ESPACIO DE MENSAJE 27
3.4.2 ESPACIO DE RESUMEN 28
3.4.3 INICIALIZACIÓN DEL ALGORITMO 28
VIII
3.4.5 PROCEDIMIENTO DE CARGA DEL BLOQUE 30
3.4.6 ESTRUCTURA DEL NÚCLEO DEL ALGORITMO 31
3.4.7 ENTREGA DEL HASH 32
3.5 HAVAL
333.5.1 ESPACIO DE MENSAJE 33
3.5.2 ESPACIO DE RESUMEN 33
3.5.3 INICIALIZACIÓN DEL ALGORITMO 33
3.5.4 FUNCIONES AUXILIARES 35
3.5.5 PROCEDIMIENTO DE CARGA DEL BLOQUE 36
3.5.6 ESTRUCTURA DEL NÚCLEO DEL ALGORITMO 37
3.5.7 ENTREGA DEL HASH 38
CAPÍTULO IV
ANÁLISIS
414.1 INTRODUCCIÓN
414.2 METODOLOGÍA DEL ANÁLISIS
414.2.1 MEMORIA 41
4.2.2 LONGITUD DEL HASH 42
4.2.3 ATAQUES EXISTENTES 43
CONCLUSIONES
46REFERENCIAS BIBLIOGRÁFICAS
47INDICE DE FIGURAS
Pág.
Figura 2.1
Esquema Básico de la Función Hash
9
IX
INDICE DE TABLAS
Pág.
No. 3.1
Selección de Palabras de MD5
21
No. 3.2
Funciones por Ronda de RIPEMD
29
No. 3.3
Constantes de RIPEMD
30
No. 3.4
Corrimientos de RIPEMD
30
No. 3.5
Permutación P
30
No. 3.6
Selección de Palabras de RIPEMD
31
No. 3.7
Permutaciones por Ronda
35
No. 3.8
Selección de Palabras de HAVAL
36
No. 4.1
Parámetros de los Algoritmos
42
No. 4.2
Salidas de los Algoritmos
42
1
CAPÍTULO I
DESCRIPCIÓN DE LA INVESTIGACIÓN.
1.1 Antecedentes.
Una organización basa su éxito en una correcta toma de decisiones, la que se verá reforzada o debilitada en relación al nivel de conocimiento que se tenga de todas las variables que componen el ambiente en el cual se encuentra inmersa. Posteriormente estas variables se convertirán en la información sobre la que se determinará el rumbo de la organización.
Debido a la importancia de la información es necesario tener un mecanismo que permita protegerla, para evitar que algún agente ajeno a la organización pueda manipularla o simplemente para tener un respaldo que le permita a la organización continuar trabajando en caso de enfrentarse con algún
incidente inesperado que pueda afectar al funcionamiento normal de la
misma; la criptología puede proveer un conjunto de herramientas que son de gran utilidad para dar solución a esta problemática en particular como es el aseguramiento de la información.
1.1.1 Criptología.
Es la rama de las matemáticas que se encarga del diseño de los esquemas que permitan garantizar la confidencialidad de una
comunicación, así como del estudio de los ataques contra los citados esquemas para poder obtener información de la que no se es
2
La criptografía es el área de la criptología encargada de cumplir con la primera tarea, de tal forma que la información intercambiada en forma de mensajes, entre dos entidades sea solamente visible a las partes involucradas. Asumiendo que una tercera entidad no autorizada tiene acceso al canal de comunicación, el principal objetivo de esta rama, es asegurar que los mensajes capturados no le otorguen ningún tipo de dato a dicha entidad, es decir que los mensajes sufran algún tipo de modificación que impida que la información contenida en ellos pueda ser entendida por alguien que no sea el destinatario; a este meta de la criptografía se le denomina confidencialidad.
Además de proveer confidencialidad, la criptografía también puede ser utilizada para otorgar otros servicios como son
Integridad de la Información. Autenticación.
No repudio.
Como contraparte de la criptografía existe el criptoanálisis, que es la rama de criptología que se encarga de romper los criptosistemas propuestos con el fin de acceder a la información que está siendo intercambiada.
Para alcanzar su objetivo, en el criptoanálisis se realizan un conjunto de tareas, denominadas ataques los cuales pueden realizarse en forma individual o en conjunto de forma tal que sean complementarios para llegar con éxito a la meta propuesta. Estás tareas no solo se basan en el análisis de las bases matemáticas que componen un criptosistema sino en la forma en la cual esta implementado, debiendo tomar en cuenta todos los elementos que lo integran, siendo en
3
ocasiones el componente humano el factor principal para quebrantar la seguridad proporcionada por un criptosistema.
1.1.2 Función de un solo sentido.
Las funciones de un solo sentido es el eje en el cual se centra la criptografía de llave pública, ya que componen un bloque fundamental para los diferentes algoritmos que la componen.
Las funciones de un solo sentido tienen la característica que son relativamente fáciles de calcular pero significativamente difíciles de calcular el valor inverso, es decir, dado x es sencillo obtener f(x), pero dado f(x) es difícil obtener x. En este contexto difícil significa que se requeriría millones de años para obtener dicho valor. [13]
1.2 Planteamiento del Problema.
La comunicación a través de medios electrónicos tiene en la conservación de la integridad de los datos uno de sus mayores desafíos. Para enfrentar este problema existen diferentes mecanismos que lo solucionan de alguna forma variando el nivel de complejidad de su aplicación, éstos pueden ser muy simples como la verificación de la paridad hasta el uso de los polinomios generadores de un código de redundancia cíclica.
En materia criptográfica la herramienta con la que se cuenta son las funciones hash, las cuales son adecuadas para su uso en ambientes donde la información intercambiada sea susceptible de ser modificada, con el uso de estos algoritmos se pretende asegurar que los datos utilizados en una comunicación lleguen a su destino con la certeza que no existe ninguna variación en relación a la original.
4
1.3 Objetivo.
Proponer con base en un análisis cualitativo una selección de algoritmos de funciones hash criptográficas, por medio del estudio de los documentos técnicos de los diferentes estándares, para la integración de un banco de funciones hash en el marco de un esquema de firma digital
1.4 Justificación.
Cada cuerpo de estandarización en materia criptográfica, como el Instituto Nacional de Estándares y Tecnología en Estados Unidos y el Comité para la Investigación y Evaluación Criptográfica en Japón, propone el uso de
diferentes algoritmos criptográficos en las diferentes áreas de aplicación. Cada uno de ellos realiza estudios que avalen la validez de un determinado algoritmo, ya que éstos deben estar en continua revisión para poder
mantener su vigencia, en caso que la eficacia de un algoritmo se vea comprometida, las mismas organizaciones se dan a la tarea de mejorarlo o en caso que no sea posible sustituirlo.
Con el desarrollo de este trabajo de investigación se identificarán los
algoritmos hash definidos por los diferentes cuerpos de estandarización, con el fin de seleccionar los que serán evaluados para su posterior inclusión dentro de una biblioteca de funciones en el marco de un esquema de firma digital.
Las propuestas de los algoritmos que integrarán la biblioteca estará en función de los que tienen la categoría de estándar en los diferentes
organismos y aquellos cuyo uso en la comunidad este arraigado. Una vez que se hayan determinado los algoritmos hash a estudiar se recurrirá a la revisión de los estándares que muestren el funcionamiento de los citados algoritmos, para obtener la información requerida para evaluarlos y de esta
5
forma poder determinar cuáles serán los mejores candidatos para conformar la biblioteca.
1.5 Alcances.
Para el desarrollo de la tesina se plantean los siguientes alcances:
Identificación del esquema de trabajo de estandarización de los principales cuerpos internacionales en lo referente a controles criptográficos.
Identificación de los algoritmos hash criptográficos, contenidos en cada remesa de los cuerpos de estandarización.
Estudio de los artículos técnicos de propuesta de cada algoritmo. Estudios de los ataques y/o revisiones surgidas de la propuesta de
cada algoritmo.
Para cada algoritmo realizar la
o Descripción general de la arquitectura interna del algoritmo.
o Identificación del o los problemas matemáticos que sustentan el algoritmo.
o Identificación de técnicas de tratamiento numérico para la implementación del algoritmo.
o Identificación de métricas de recursos computacionales involucrados en la ejecución del algoritmo.
o Evaluación de viabilidad del algoritmo para su inclusión en una biblioteca criptográfica.
6
CAPÍTULO II
FUNCIONES HASH CRIPTOGRÁFICAS
2.1 Definición.
Una función hash es una transformación de un espacio de mensajes, que puede ser finito, denominados preimágenes, a un espacio finito de
resúmenes de mensajes denominados valores hash, los cuales cumplen con al menos estas características básicas:
Compresión. Para una preimagen de longitud variable el valor hash obtenido siempre será de un tamaño fijo.
Facilidad de Cálculo. Dada la función de transformación de hash y una preimagen es computacionalmente sencillo calcular su valor hash.
Además de tener las siguientes características generales:
Un comportamiento cercano a una función aleatoria, pero quedando determinística.
El resumen no debe dar ninguna información sobre el mensaje.
Puede ser realizada usando un algoritmo de cifrado o con un algoritmo especializado.
7
2.2 Clasificación.
En la visión más general de las funciones hash, podemos clasificarlas como funciones con llave y funciones sin llave. Una función sin llave implica el uso del algoritmo sin ninguna modificación, mientras que la llave utilizada en el otro esquema tendrá que ser previamente acordada entre las partes además de mantenerse secreta de forma segura, con lo que podemos garantizar que el algoritmo hash haya sido fortalecido.
El uso de una llave en una función hash genera una familia hash. La cual queda definida de la siguiente forma. Una familia hash es una tupla (X, Y, K,
H) donde:
o X es el campo de los posibles mensajes.
o Y es el campo finito de los posibles valores de digestión. o K es el campo finito de las posibles llaves.
o H es la función hash a utilizar.
o Para cada k Є K, existe una función hash hk: X Y en H.
o El par (x, y) se denomina par válido bajo la llave k si hk(x) = y.
Una función hash sin llave puede ser modelada como una familia hash con una llave única k que es conocida por cualquier entidad.
2.3 Propiedades.
Las propiedades que deben de tener las funciones hash para ser consideradas como primitivas criptográficas son:
Resistencia a la preimagen: One Way Hash Function.
Significa que dado cualquier valor hash “y”, es computacionalmente imposible encontrar el valor de la preimagen “x” usada tal que h(x)=y.
8
Otra forma como se conoce esta propiedad es que la función hash sea de un solo sentido.
Resistencia a 2° preimagen: OWHF: One Way Hash Function
Significa que dado “x”, es computacionalmente imposible encontrar una x’ tal que h(x)=h(x’). Otra forma de conocer esta propiedad es que “h” sea resistente a una colisión suave.
Resistencia a colisión: CRHF: Collision Resistant Hash Function.
Significa que es computacionalmente imposible encontrar dos
mensajes “x”, x’ tal que h(x)=h(x’). Esta propiedad también se conoce como resistencia a colisión fuerte. [14]
2.4 Construcciones básicas.
A las funciones hash basadas en funciones de compresión, se les llama construcciones iteradas, la cual fue propuesta por Merkle [4], forma la base para el diseño de las funciones hash más comunes. En este tipo de
construcciones, la función hash procesa entradas de longitud fija y pequeña, del orden de cientos de bits, y es entonces iterada en una forma particular para procesar entradas de longitud arbitraria. Tal función de compresión, la cual se denota por “f”, acepta dos entradas, una cadena variable de longitud “l” y un bloque de datos en bits de longitud “b”. Inicialmente la cadena
variable “l” es un grupo de valores conocidos denotados por el vector inicial
9
Figura 2.1. Esquema Básico de la Función Hash
La función hash iterada usa entradas de cualquier longitud aplicando la función de compresión “f” a bloques sucesivos de datos de longitud “b” cada uno. El tamaño del bloque “b” está determinado de acuerdo a la descripción de cada algoritmo, pero en general se utiliza el valor de 512 bits. Para cada bloque nuevo la cadena variable toma el resultado de la iteración previa. La
función hash iterada será denotada por “H” y la entrada por m = m1, m2,…,
mn donde mi, con i=1, 2,…, n, representa los bloques que conforman el
mensaje de longitud “b”, y el resultado hash es la última aplicación de la función de compresión sobre el último bloque de datos y el resultado de la función de compresión anterior. Este procedimiento se muestra en la figura 2.2.
Figura 2.2. Función Hash con Iteraciones.
De la misma manera podemos clasificar los algoritmos hash según el modelo en el que está basada la función central, esta clasificación se muestra a continuación:
10
Funciones hash basadas en cifradores de bloque. Funciones hash basadas en aritmética modular. Funciones hash basadas en autómatas celulares. Funciones hash basadas en el problema de Knapsack. Funciones hash basadas en matrices algebraicas.
2.5 Aplicaciones.
Existe una gran diversidad de aplicaciones de las funciones hash entre las que podemos mencionar las siguientes:
Contraseñas: Las funciones hash son ampliamente usadas para almacenar contraseñas. Por su característica de irreversibilidad, almacenar un valor hash de una contraseña es más seguro que almacenarla en forma criptográfica.
Firmas Digitales: Realizar operaciones de firmas digitales sobre mensajes grandes puede consumir mucho tiempo por los algoritmos de firmas digitales. En su lugar, al mensaje se le aplica la función hash y el algoritmo de firma digital se aplica al valor hash obtenido de menor tamaño.
Integridad: Un mensaje puede ser considerado íntegro si su valor hash ya fue calculado antes de cualquier transmisión. Este valor es comparado con el valor hash del mensaje recibido.
Códigos de Autenticación de Mensaje: Hash de un mensaje que se auxilia de una llave secreta “k” para garantizar el origen del mensaje.
11
Ordenamiento: Esta utilidad de las funciones hash nos permite realizar una indexación de los datos contenidos en repositorios de gran dimensión, asignándole a cada elemento un identificador único lo cual a su vez facilitará su búsqueda.
2.6 Organizaciones de normalización.
Para el desarrollo de un trabajo de investigación, es necesario apoyarse en estudios previos del tema, éstos deben ser dados por válidos y están
basados en la seriedad con la que fueron realizados. Dichos estudios deben sujetarse a las guías establecidas por los diversos organismos que se encargan de normalizar, en las áreas geográficas correspondientes, las acciones de los individuos en materia científica y tecnológica.
Dentro de este esquema la Organización Internacional de Estándares define a la normalización como: “Actividad que intenta aportar soluciones de
aplicación repetitiva a cuestiones relacionadas esencialmente con las esferas de la ciencia, de las técnicas y de la economía a fin de obtener un grado óptimo de orden en un contexto dado”.
En materia de criptología existen diferentes entidades alrededor del mundo que se encargan de investigar, proponer y establecer algoritmos que se convertirán en estándares entre los más relevantes se tienen:
2.6.1 Instituto Nacional De Estándares Y Tecnología (NIST).
Fundado en 1901, es una agencia federal no reguladora que forma parte del Departamento de Comercio de los EE.UU. La misión del NIST consiste en elaborar y promover patrones de la medición, los estándares y la tecnología con el fin de realzar la productividad,
12
facilitar el comercio y mejorar la calidad de vida. NIST lleva a cabo su misión a través de cuatro programas cooperativos:
Los laboratorios del NIST, que realizan investigaciones para mejorar la infraestructura del país en materia de la tecnología que la industria estadounidense necesita para seguir mejorando los productos y los servicios.
El Programa de Calidad Nacional Baldrige, que promueve la
excelencia en el desempeño entre los proveedores de atención de la salud, los centros docentes, las sociedades prestatarias de servicios, las organizaciones sin ánimo de lucro, y los fabricantes
estadounidenses, dirige programas de extensión y administra el Premio de Calidad Nacional de Malcolm Baldrige. Este se concede anualmente para reconocer la excelencia en el desempeño y el progreso en materia de calidad.
La Asociación de Extensión Manufacturera (MEP), que es una red nacional de centros locales que ofrecen asistencia técnica y comercial a los fabricantes más pequeños.
El Programa de la Tecnología e Innovación (TIP), es un programa nuevamente creado y está autorizado por el Congreso de los Estados Unidos que está planeado para proporcionar concesiones de costo compartido a la industria, las universidades, y los consorcios para conducir investigaciones en las tecnologías que son potencialmente revolucionarias que se dirigen a las necesidades nacionales y sociales.
Entre 1990 y 2007, NIST también manejó el Programa de la Tecnología Avanzado (ATP).
13 2.6.2 Nuevos Esquemas Europeos Para Firmas, Integridad y Cifrado
(NESSIE).
Fue creado en el año 2000 y tuvo un período de funcionamiento de 3 años durante los cuales se dedicó a la evaluación de los diferentes diseños de algoritmos que seleccionó después de una convocatoria en Marzo de ese año.
En febrero del año 2003 se hizo pública la selección final de
algoritmos que sobrevivieron de los 42 presentados tres años antes, y con autores provenientes de diez países. En una primera ronda
eliminatoria sólo sobrevivieron 21 algoritmos y en una segunda, y última, la lista se quedó con sólo 12 candidatos. Junto a estos 12 algoritmos nuevos, publicados para la ocasión, el informe NESSIE también recomienda otros 5 algoritmos que, aun no siendo parte de su concurso, los considera dignos de toda confianza.
Aunque esta iniciativa no pretende ser un ejemplo más de los procesos de estandarización al uso, ésta declara abiertamente su vocación de puente entre la comunidad científica y el mundo de los usuarios, y se quiere colocar antes de cualquier proceso de
estandarización de modo que los resultados de este proyecto ya estarían listos para su integración en el ámbito empresarial de la seguridad. Los cuatro cifradores simétricos de bloques elegidos son:
MISTY1. Camellia. SHACAL-2 AES;
14
ACE Encrypt de IBM,
PSEC-KEM de NTT Corp. Japón, RSA-KEM (draft ISO/IEC 18033-2).
Por su parte, los nueve autenticadores simétricos de mensajes son:
Two-Track-MAC, UMAC de Intel Corp.,
CBC-MAC (ISO/IEC 9797-1), HMAC (ISO/IEC 9797-1), Whirlpool, SHA-256, SHA-384, SHA-512.
En cuanto a los algoritmos de firma digital, los elegidos son: ECDSA de Certicom, RSA-PSS de RSA Labs.,
SFLASH de Schlumberger.
Por último, ya sólo queda en la lista un único esquema de
identificación, denominado GPS, que fue propuesto por la Escuela Normal Superior de Francia.
2.6.3 Comité de Investigación y Evaluación Criptográfica (CRYPTEC)
Es el encargado de evaluar y vigilar la seguridad de los cifradores que se utilizan en el Gobierno Electrónico del Estado de Japón. Tiene como meta principal la de convertir a su país en un modelo en materia de seguridad en las Tecnologías de la Información.
15
Incluye a miembros de la academia japonesa, de la industria, y del gobierno Fue comenzado en mayo de 2000 combinando esfuerzos de varias agencias que investigaban métodos y técnicas para el gobierno electrónico. Actualmente, es patrocinado por el ministerio del
Comercio e Industria de la economía, el Ministerio de la Gerencia Pública, Asuntos de Interior y Comunicaciones y la Agencia para la Promoción de las Tecnologías de la Información.
En el concurso organizado para proponer funciones criptográficas por parte de este organismo no hubo se recibió ningún algoritmo en materia de funciones hash por lo que el estándar que se plantea son los aceptados por el NIST
16
CAPÍTULO III
ALGORITMOS HASH CRIPTOGRÁFICOS
ESTANDARIZADOS
3.1 Introducción.
Como se ha mencionado en capítulos anteriores una función hash es aquella en la que se establece la relación entre dos espacios, el primero
correspondiente a los mensajes que son denominados como pre imágenes y el segundo el espacio finito de resúmenes de mensajes denominados valores hash.
En el capitulo anterior se definió la familia hash como una tupla (X, Y, K, H), en este capítulo se hará la descripción de los componentes de esta tupla de cada uno de los algoritmos hash que fueron seleccionados para conformar la biblioteca de funciones, tomando en cuenta que debido a que estas
funciones tiene como fin asegurar la integridad el uso de la llave queda descartada.
3.2 Message Digest 5 (MD5).
Este algoritmo fue diseñado por Ronald Rivest en sustitución del Algoritmo MD4 debido a las debilidades que se encontraron en el mismo.
17 3.2.1 Espacio de Mensaje.
La longitud del resumen que se obtiene a la salida del algoritmo es de El algoritmo toma como entrada un mensaje de longitud arbitraria por lo tanto el espacio de mensajes para este algoritmo es infinito.
3.2.2 Espacio Resumen.
La longitud del resumen que se obtiene a la salida del algoritmo es de 128 bits, lo cual describe el espacio de los resúmenes posibles para la
totalidad de mensajes de entrada, el cual queda definido como 2128.
3.2.3 Inicialización del Algoritmo.
Para proceder a ejecutar la primera ronda del algoritmo se necesita realizar dos procesos principales, el primero de ellos es la adecuación del mensaje de entrada para que pueda ser procesado por el
algoritmo y la otra tarea es definir los valores del vector inicialización con el que trabajar
A continuación se describen los procesos que son necesarios para obtener los valores de inicialización del algoritmo:
Requisitos del Mensaje.
El relleno es la primera tarea que se lleva a cabo para que el mensaje pueda ser procesado, este se realiza de la siguiente manera, se toma el mensaje de longitud determinada se le agrega un “1” al final del mismo y posteriormente se agregan “0” hasta que el tamaño del vector sea congruente con 448 mod 512, es decir que falten 64 bits para hacerlo un múltiplo de 512, el relleno se realiza para todos los mensajes de entrada no importando que el mensaje original sea inicialmente congruente con 448 mod 512, posteriormente se agrega al final, la longitud del mensaje inicial en dos palabras de 32 bits, haciendo un
18
registro de 64 bits; en caso de que la longitud sea mayor a 264
bits solamente se tomarán en cuenta los 64 bits menos significativos de la representación binaria de la longitud. Haciendo este procedimiento se tendrá un vector para ser procesado que será múltiplo de 512 bits.
Una vez que el mensaje original ha sido rellenado la siguiente tarea a realizar es dividir el vector obtenido en tantos bloques de 512 bits como permita la longitud del vector de trabajo, cada uno de estos bloques de 512 bits serán los bloques de trabajo que procesará la función hash.
Inicialización del Vector.
El algoritmo MD5 se auxilia de un vector de 128 bits para el cálculo del resumen del mensaje, este vector se divide en 4 registros de 32 bits que se identifican como A, B, C y D, los
cuales son inicializados con los siguientes valores
hexadecimales donde los valores de menor orden van primero:
Registro A: 01 23 45 67 Registro B: 89 ab cd ef Registro C: fe dc ba 98 Registro D: 76 54 32 10
Posteriormente a la asignación de valores a los registros, se crean unas copias de los mismos que se identificarán como AA, BB, CC y DD, estos nuevos registros no serán operados en la ejecución de las rondas.
19 3.2.4 Funciones Auxiliares.
Para empezar definiremos cuatro funciones auxiliares. Cada una ellas toma tres palabras de 32 bits como entrada y devuelven como salida una palabra de 32 bits.
F(X,Y,Z) = XY v not(X) Z G(X,Y,Z) = XZ v not(Z) H(X,Y,Z) = X xor Y xor Z I(X,Y,Z) = Y xor (X v not(Z))
La función F actúa como un condicional en la posición de cada bit: si X entonces Y en otro caso Z. La función F podría haberse definido
utilizando + en lugar de v ya que XY y not (X)Z nunca tendrán bits a uno en la misma posición. Es interesante resaltar que si los bits de X, Y, y Z son independientes, los bits de F(X,Y,Z) también lo serán. Las funciones G,H, e I son parecidas a la función F, ya que actúan de forma independiente a nivel de bit al hallar la salida a partir de los bits de X, Y, y Z, de forma que si los correspondientes bits de X, Y y Z son independientes entre sí, cada uno de los bits de G(X,Y,Z), H(X,Y,Z), e I(X,Y,Z) serán independientes entre sí también. Nótese que la función H produce el xor a nivel de bit, o función de igualdad, de su entrada.
El algoritmo también utiliza una tabla de 64 elementos que son las constantes que se requerirán en una ronda determinada, se identifica como T[i], con i= 1…64, la cual es construida a partir de la función seno, donde la constante T[i] es el elemento i-ésimo de la tabla, que es igual a la parte entera del cálculo del seno (i), estando i expresado en radianes.
3.2.5 Procedimiento de Carga del Bloque
Como se mencionó en el primer punto, el bloque de trabajo de MD5 es de 512 bits, para poder procesarlo, se divide el bloque en 16 palabras
20
de 32 bits que tienen la misma magnitud que los registros del vector inicial con los que serán operados.
El algoritmo tiene un total de 64 rondas dividas en 4 vueltas de 16 rondas cada una. En cada uno de las vueltas se utiliza una de las cuatro funciones definidas en el punto anterior, con lo que se actualiza uno de los registros del vector inicial por ronda. La función principal de la vuelta es alimentada por una de las 16 palabras que conforman el bloque del mensaje que está siendo procesado. La selección de la
palabra wi para cada una de las vueltas se realiza conforme a la tabla
3.1
Tabla 3.1 Selección de Palabra de MD5.
3.2.6 Estructura del Núcleo del Algoritmo.
El algoritmo se basa en la ejecución de la función principal: a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s)
Donde:
[abcd] representan los registros del Vector Inicial,
F(b,c,d) es la función de la vuelta que opera los registros b,c y d;
X[k] representa la palabra del bloque a utilizar, con k= 0 … 15; T[i] representa la constante de la ronda, con i= 1… 64.
[s] es el valor del corrimiento circular izquierdo. Wk (k: 2-15) W0 Vuelta 1 (Wk-1 + 1) mod 16 0 Vuelta 2 (Wk-1 + 5) mod 16 1 Vuelta 3 (Wk-1 + 3) mod 16 5 Vuelta 4 (Wk-1 + 7) mod 16 0
21
En cada ronda el valor obtenido de la función principal se actualiza el segundo registro que la alimentó; para actualizar los tres registros restantes se hace un encadenamiento entre ellos, es decir, que el valor del segundo registro actualiza al tercero, el tercero al cuarto y finalmente para concluir una ronda el valor del cuarto registro será el nuevo valor del primero, de esta manera se actualiza la totalidad del vector, el cual se convierte en el vector de entrada de la siguiente ronda, este proceso se realiza hasta completar las 4 vueltas con sus 16 rondas, lo que da el total de las 64 rondas del algoritmo.
3.2.7 Entrega del Hash.
Al finalizar la ejecución de las 64 rondas se tiene un vector de los registros A|B|C|D con valores actualizados, para obtener el resumen del bloque con que se proceso, se requiere hacer una “or” exclusiva del vector de 4 registros actualizados con cada una de las copias que se tienen almacenadas en los registros AA, BB, CC y DD que se crearon en la fase de inicialización. El resultado de esta operación se almacena de igual forma en los registros A, B, C y D, de la siguiente forma: A = A + AA; B = B + BB; C = C + CC; D = D + DD.
Si el mensaje inicial después de haber sido rellenado solamente generó un bloque de 512 bits, se tendría el resumen del citado
mensaje en el vector A|B|C|D empezando por el byte de menor orden de A y finalizando con el byte de mayor orden de D. Si nuestro
22
serían los iniciales del vector inicial del siguiente bloque. El hash del mensaje se obtendría de la actualización de los registros A, B, C, y D del último bloque generado.
3.3 Secure Hash Algorithm 1 (SHA-1).
La especificación original del algoritmo fue presentada en 1993, ahora es conocida como SHA-0, fue definida en el FIPS PUB 180, tuvo una revisión en 1995 que dió paso a la versión SHA-1. Ambos algoritmos fueron diseñados tomando como base los algoritmos creados por el Profesor Ronald Rivest. (MD4 y MD5).
3.3.1 Espacio de Mensaje.
El espacio de mensajes para este algoritmo se encuentra limitado a
entradas con dimensiones de hasta 264 bits.
3.3.2 Espacio Resumen.
La magnitud del resumen que entrega este algoritmo es de 160 bits
por lo que es espacio de resúmenes queda limitado a 2160 posibles
imágenes para una entrada determinada.
3.3.3 Inicialización del Algoritmo.
Requisitos del Mensaje.
El espacio de resumen de este algoritmo es finito, en este caso la longitud de los mensajes que pueden ser procesados deben
23
Debido a que este algoritmo está basado en los algoritmos MD4 y MD5, el procedimiento para rellenar un mensaje de entrada es idéntico quedando de la siguiente forma, se agrega un “1” como separador e inicio del relleno, posteriormente se anexan los “0” que sean necesarios para hacer el vector congruente con 448 mod 512, una vez logrado esto se le agregan 2 registros de 32 bits que representa la longitud
original del mensaje. Por último se divide el vector rellenado en bloques de 512 bits para que puedan ser procesados.
Inicialización del Vector.
SHA – 1 utiliza un vector de inicialización de 5 palabras de 32
bits que se identifican como H0, H1, H2, H3, y H4, cuyo valor
actualizado dará una salida con una magnitud de 160 bits.
Los valores asignados a las palabras son:
H0 = 67452301
H1 = EFCDAB89
H2 = 98BADCFE
H3 = 10325476
H4 = C3D2E1F0.
A su vez se crean copias de estos valores iniciales y se
almacenan en las variables A, B, C, D y E, el procesamiento de los rondas se realiza con las copias que fueron generadas. La relación entre las variables y el vector de inicialización queda de la siguiente manera: A = H0 B = H1 C = H2 D = H3 E = H4
24 3.3.4 Funciones Auxiliares.
Este algoritmo utiliza 4 funciones que son auxiliares para el cálculo de del resumen del hash, el uso de estas funciones depende de la
ejecución de las rondas ya que cada una de ellas se emplean en el procesamiento de un conjunto de 20 de ellas. A continuación se describen las funciones que son necesarias para la obtención del hash, las entradas que operan y salida que arrojan son palabras de 32 bits.
f(t;B,C,D) = (B AND C) OR ((NOT B) AND D) ( 0 <= t <=
19)
f(t;B,C,D) = B XOR C XOR D (20 <= t <= 39)
f(t;B,C,D) = (B AND C) OR (B AND D) OR (C AND D) (40 <= t <=
59)
f(t;B,C,D) = B XOR C XOR D (60 <= t <= 79)
Donde t representa la ronda.
Este algoritmo también requiere del uso de valores constantes, los cuales no están definidos a partir de una función sino que son valores específicos que varían con la misma relación de 20 rondas de las funciones anteriores.
K(t) = 5A827999 ( 0 <= t <= 19)
K(t) = 6ED9EBA1 (20 <= t <= 39)
K(t) = 8F1BBCDC (40 <= t <= 59)
25 3.3.5 Procedimiento de Carga del Bloque.
Después de realizar el relleno al mensaje original, se procede a dividir en bloques de 512 bits, estos bloques conformarán la unidad de trabajo del algoritmo, pero a su vez cada uno de estos bloques se dividirán en 16 palabras de 32 bits que permitirán realizar las
operaciones con las variables A, B, C, D y E definidas anteriormente.
Para entregar el hash, el algoritmo necesita ejecutar 80 rondas, en cada una de las rondas se debe procesar una palabra diferente del bloque con el que se está trabajando, para realizar esta tarea, se debe realizar una expansión de las 16 palabras iníciales utilizando el
siguiente algoritmo.
Dividir M(i) en 16 palabras W0…W15 donde W0 es la palabra
más a la izquierda. Para t: 0 a 15.
Wt = Wt donde t representa la ronda.
Para t: 16 a 79.
Wt = S1(W(t-3) XOR W(t-8) XOR W(t-14) XOR W(t-16))
Donde:
S1 representa el corrimiento circular a la izquierda en un bit.
De esta manera se tienen 80 palabras de 32 bits que serán procesadas en cada una de las rondas del algoritmo, este
procedimiento puede realizarse antes de iniciar la primera ronda por medio de un arreglo de 80 palabras o ir generando la palabra que se requiere en una determinada ronda a partir de las 16 de base.
26 3.3.6 Estructura del Núcleo del Algoritmo.
El núcleo del algoritmo radica en la ejecución de la siguiente función:
TEMP = S5(A) + ft(B,C,D) + E + Wt + Kt
Donde:
A, B, C, D, E son las variables del vector de trabajo.
TEMP es un registro de temporal de 32 bits donde se almacena el resultado de la operación.
S5 representa el corrimiento circular a la izquierda en un cinco
bits.
ft es la función correspondiente a la ronda.
Wt es la palabra correspondiente a la ronda.
Kt es la constante correspondiente a la ronda.
Una vez calculado en valor TEMP se procede a la actualización de los registros A, B, C, D y E de la siguiente manera.
E = D; D = C; C = S30 (B); B = A; A = TEMP;
La función se ejecuta hasta completar la totalidad de las rondas de tal forma que al final de la ronda 80 se tienen actualizados los 5 registros.
3.3.7 Entrega del Hash.
Para obtener el hash del mensaje se debe operar la última
actualización de los registros de trabajo con el vector de inicialización por medio de una XOR de la siguiente manera:
H0 = H0 + A
H1 = H1 + B
27
H3 = H3 + D
H4 = H4 + E
Al finalizar este procesamiento se tendrá el hash del bloque Mn en
H0|H1|H2|H3|H4; si se tiene más de un bloque Mn el hash del bloque
Mn-1 es el valor que se le dará al vector de inicialización del bloque en
cuestión, esta operación se realiza hasta barrer todos los bloques Mx
3.4 RACE Integrity Primitives Evaluation Message Digest 160
(RIPEMD160).
Las funciones hash criptográficas son herramientas importantes para el desarrollo de aplicaciones criptográficas como: obtener un identificador único de los mensajes digitales, verificación de integridad de mensaje y derivación de llaves. Durante la primera mitad de la década de los 90 fueron propuestas varias funciones hash basadas en software, la mayoría de ellas basadas en los principios de diseño del algoritmo MD4 de Ron Rivest. Una de esas propuestas fue RIPEMD, el cual fue desarrollado en el marco del proyecto de la Unión Europea RIPE (RACE Evaluación de Primitivas de
Integridad). Debido a los diferentes progresos en materia de criptoanálisis de
las funciones hash, fue propuesta una nueva versión de RIPEMD con una salida de 160 bits, como sustituto de la salida de 128 bits del RIPEMD original.
3.4.1 Espacio de Mensaje.
Este algoritmo está basado en MD4, cuyo espacio de mensajes es infinito, y en esta mejora no se limita tampoco la longitud de los mensajes de entrada.
28 3.4.2 Espacio Resumen.
La salida que nos proporciona este algoritmo mejorado es de 160 bits
lo que define la magnitud de su espacio de posibles salidas a 2160
3.4.3 Inicialización del Algoritmo.
En esta parte se realiza la descripción de las 2 tareas que se identificaron como las principales para realizar la inicialización del algoritmo.
Requisitos del Mensaje.
El mensaje no tiene limitantes en cuanto a lo longitud de la entrada y puesto que comparte las características de las técnicas de relleno del mensaje con MD4 el proceso que fue descrito anteriormente también se aplica para este algoritmo.
Inicialización del Vector.
Este algoritmo utiliza un vector de 160 bits organizado en 5 registros de 32 bits identificados como h0, h1, h2, h3, y h4, a los
que se les asigna los siguientes valores hexadecimales:
h0 = 67452301
h1 = EFCDAB89
h2 = 98BADCFE
h3 = 10325476
h4 = C3D2E1F0
El siguiente paso es realizar la copia de estos registros, para este algoritmo se hacen dos copias donde las variables X serán utilizadas para el procesamiento del lado izquierdo y las
variables X’ serán utilizadas para el procesamiento del lado derecho, quedando de la siguiente manera:
29
Lado Izquierdo Lado Derecho
h0 = A h0 = A’ h1 = B h1 = B’ h2 = C h2 = C’ h3 = D h3 = D’ h4 = E h4 = E’ 3.4.4 Funciones Auxiliares.
Para el procesamiento del algoritmo se requieren 5 funciones las cuales serán utilizadas en forma paralela, de manera que en una ronda se utilizarán 2 funciones a la vez.
Las funciones quedan definidas de la forma: F1(X; Y; Z) = X XOR Y XOR Z;
F2(X; Y; Z) = (X AND Y) OR (NOT X AND Z); F3(X; Y; Z) = (X OR NOT Y) XOR Z;
F4(X; Y; Z) = (X AND Z) OR (Y AND NOT Z); F5(X; Y; Z) = X XOR (Y OR NOT Z):
Estas funciones son aplicadas dentro del algoritmo de la forma que indica la siguiente tabla.
Tabla 3.2 Funciones por Ronda de RIPEMD.
Al igual que todas las funciones se requiere de constantes que serán utilizadas en una determinada ronda. En la siguiente tabla se
Línea Ronda 1 Ronda 2 Ronda 3 Ronda 4 Ronda 5
Izquierda F1 F2 F3 F4 F5
30
muestran la función de la que se derivan las constantes así como el uso que se les va a dar dentro del funcionamiento del algoritmo.
Línea Ronda 1 Ronda 2 Ronda 3 Ronda 4 Ronda 5
Izquierda 0
Derecha 0
Tabla 3.3 Constantes de RIPEMD.
A su vez se necesita establecer el valor de los corrimientos que se tendrán por ronda, éstos tienen un rango de 5 a 15 ya que tener corrimientos mayores se considera inseguro. En la siguiente tabla se muestran los valores de los corrimientos para cada ronda.
T a b l T
Tabla 3.4 Corrimientos de RIPEMD.
3.4.5 Procedimiento de Carga del Bloque.
El algoritmo utiliza una tabla de permutación y una función que definen la palabra que es seleccionada para ser procesada. A continuación se muestra la tabla de permutación del algoritmo.
Tabla 3.5 Permutación . Ronda X0 X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 1 11 14 15 12 5 8 7 9 11 13 14 15 6 7 9 8 2 12 13 11 15 6 9 9 7 12 15 11 13 7 8 7 7 3 13 15 14 11 7 7 6 8 13 14 13 12 5 5 6 9 4 14 11 12 14 8 6 5 5 15 12 15 14 9 9 8 6 5 15 12 13 13 9 5 8 6 14 11 12 11 8 6 5 5 i 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 (i) 7 4 13 1 10 6 15 3 12 0 9 5 2 14 11 8
31
La función se define como (i) = 9i + 5 (mod 16). La orden de
selección de la palabra está dada por la siguiente tabla.
Línea Ronda 1 Ronda 2 Ronda 3 Ronda 4 Ronda 5
Izquierda 0
Derecha 0
Tabla 3.6 Selección de Palabra de RIPEMD.
3.4.6 Estructura del Núcleo del Algoritmo.
El núcleo del algoritmo radica en la ejecución de la siguiente función: T = (A + f(B,C,D) + X + K)<<s+ E
Donde:
T es un registro de temporal de 32 bits donde se almacena el resultado de la operación.
A, B, C, D, E son las variables del vector de trabajo.
f es la función correspondiente a la ronda.
X es la palabra correspondiente a la ronda.
K es la constante correspondiente a la ronda.
<< s representa el corrimiento circular a la izquierda en s bits.
Esta función se opera para ambos lados del algoritmo, realizándose las operaciones de manera simultánea. Para operar el lado derecho se utilizan los registros A’, B’, C’, D’ y E’, de igual manera se toman las funciones, palabras, constantes y corrimientos correspondientes a este lado del procesamiento paralelo.
Una vez calculado en valor T se procede a la actualización de los registros en ambos lados de la ejecución de una ronda A, B, C, D y E de la siguiente manera.
32
A = E E = D D = (C) <<10 C = B B = T Lado Derecho
A’ = E’ E’ = D’ D’ = (C’) <<10 C’ = B’ B’ = T’ Lado Izquierdo
La función se ejecuta hasta completar la totalidad de las rondas de tal forma que al completar la última se tienen actualizados los 5 registros en los dos lados del algoritmo.
3.4.7 Entrega del Hash.
Después de tener la última actualización del vector de 5 registros en ambos lados de la ejecución del algoritmo se procede a operarlos con
el vector de inicialización h0|h1|h2|h3|h4 de la siguiente manera:
T = h1 + C + D’; h1 = h2 + D + E’; h2 = h3 + E + A’; h3 = h4 + A + B’; h4 = h0 + B + C’; h0 = T;
Donde T es una variable temporal que actualiza el valor de h0 al final
de la operación de todas las variables involucradas, en este caso no
se realiza el efecto de avalancha ya que las variables hX , que se
operan con los registros de los vectores de trabajo producto de las rondas, corresponden a los valores que se establecieron como Vector Inicial.
33
3.5 One Way Hashing Algorithm with Variable Length of Output
(HAVAL).
A pesar del progreso que se ha tenido en el diseño de funciones hash, poco se ha hecho en el desarrollo de aquellas cuya longitud de resumen
entregado sea variable. Esta clase de algoritmos serían más flexibles y sería más adecuado para aplicaciones donde los hash de longitud variable son requeridos.
3.5.1 Espacio de Mensaje.
La longitud de los mensajes de entrada no se encuentra limitada por lo que el espacio de mensajes de este algoritmo es infinito.
3.5.2 Espacio Resumen.
En este algoritmo la longitud de los resúmenes varía en el rango de 128 bits a 256 bits, con saltos de 32 bits, por lo que el espacio de
resumen para este algoritmo es de 2160 posibilidades para un solo
mensaje de entrada.
3.5.3 Inicialización del Algoritmo.
Los procesos de inicialización de HAVAL son similares a los anteriormente descritos pero en el proceso de relleno tiene
características específicas. Los procesos se describen a continuación.
Requisitos del Mensaje.
Para realizar el relleno del mensaje se coloca un “1” al final del mismo y tantos “0” necesarios para hacer el vector congruente con 944 mod 1024, posteriormente se agrega los campos de 3 bits VERSION seguido del campo de 3 bits PASS
34
posteriormente el campo de 10 bits DGSTLENG y por último el campo MSGLENG de 64 bits. A continuación se indican los valores de los campos del relleno:
o VERSION. Indica la versión del algoritmo, actualmente
es la versión 1.
o PASS. Indica el número de rondas que se ejecutarán, los
valores pueden ser 3, 4 o 5;
o DGSTLENG. Indica la longitud del mensaje de salida, los
valores que recibe son 128, 160, 192, 224 y 256.
o MSGLENG. Indica la longitud original del mensaje,
cuando el mensaje antes del relleno supera los 264 –
1bits, solo se colocan los 64 bits menos significativos de la longitud del mensaje en su representación binaria.
Inicialización del Vector.
Este algoritmo utiliza un vector de 256 bits denominado Din,
este vector se divide en 8 palabras de 32 bits que se inicializan de la siguiente manera: D7 = 243F6A88 D6 = 85A308D3 D5 = 13198A2E D4 = 03707344 D3 = A4093822 D2 = 299F31D0 D1 = 082EFA98 D0 = EC4E6C89
35 3.5.4 Funciones Auxiliares.
Para el procesamiento de las rondas se requiere de 5 funciones que procesan bit a bit las palabras que toman como operandos, se definen a continuación las funciones:
f1(X6, X5, X4, X3, X2, X1, X0) = X1X4 xor X2X5 xor X3X6 xor X0X1 xor X0
f2(X6, X5, X4, X3, X2, X1, X0) = X1X2X3 xor X2X4X5 xor X1X2 xor X1X4 xor X2X6 xor X3X5 xor X4X5 xor X0X2 xor X0
f3(X6, X5, X4, X3, X2, X1, X0) = X1X2X3 xor X1X4 xor X2X5 xor X3X6 xor X0X3 xor X0
f4(X6, X5, X4, X3, X2, X1, X0) = X1X2X3 xor X2X4X5 xor X3X4X6 xor X1X4 xor X2X6 xor X3X4 xor X3X5 xor X3X6 xor X4X5 xor X4X6 xor X0X4 xor X0
f5(X6, X5, X4, X3, X2, X1, X0) = X1X4 xor X2X5 xor X3X6 xor X0X1X2X3 xor
X0X5 xor X0
Las funciones toman como entrada un vector de 8 palabras de las cuales solo realizan en procesamiento con las 7 últimas almacenado el resultado en palabra restante.
Asimismo se utiliza un permutación dependiente del número de rondas que se hayan elegido, la relación de permutación se describe en la siguiente tabla. Permutación X6 X5 X4 X3 X2 X1 X0 3,1 X1 X0 X3 X5 X6 X2 X4 3,2 X4 X2 X1 X0 X5 X3 X6 3,3 X6 X1 X2 X3 X4 X5 X0 4,1 X2 X6 X1 X4 X5 X3 X0 4,2 X3 X5 X2 X0 X1 X6 X4 4,3 X1 X4 X3 X6 X0 X2 X5 4,4 X6 X4 X0 X5 X2 X1 X3
36 5,1 X3 X4 X1 X0 X5 X2 X6 5,2 X6 X2 X1 X0 X3 X4 X5 5,3 X2 X6 X0 X4 X3 X1 X5 5,4 X1 X5 X3 X2 X0 X4 X6 5,5 X2 X5 X0 X6 X4 X3 X1
Tabla 3.7 Permuataciónes por Ronda.
HAVAL utiliza 136 constantes en un formato de palabras de 32 bits, para obtener dichas constantes se evalúa la parte fraccionaria de
multiplicado por una constante k = 232, y se toma la parte entera del
resultado como constante, posteriormente la parte fraccionaria será el
nuevo valor de para el cálculo de la siguiente constante. Las
primeras 8 constantes generadas son utilizadas en el vector inicial Din
las restantes son utilizadas conforme vayan siendo requeridas por las rondas del algoritmo en forma secuencial.
3.5.5 Procedimiento de Carga del Bloque.
La selección de la palabra a procesar depende de la ronda que se esté procesando conforme a la siguiente tabla.
Tabla 3.8 Selección de Palabra en HAVAL
Original 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 (H1) 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ord2 5 14 26 18 11 28 7 16 0 23 20 22 1 10 4 8 (H2) 30 3 21 9 17 24 29 6 19 12 15 13 2 25 31 27 ord3 19 9 4 20 28 17 8 22 29 14 25 12 24 30 16 26 (H3) 31 15 7 3 1 0 18 27 13 6 21 10 23 11 5 2 ord4 24 4 0 14 2 7 28 23 26 6 30 20 18 25 19 3 (H4) 22 11 31 21 8 27 12 9 1 29 5 15 17 10 16 13 ord5 27 3 21 26 17 11 20 29 19 0 12 7 13 8 31 10 (H5) 5 9 14 30 18 6 28 24 2 23 16 22 4 1 25 15
37 3.5.6 Estructura del Núcleo del Algoritmo.
El algoritmo procesa un bloque de 1024 bits denominado B contra el
vector Din actualizando el valor de salida en el registro Dout en la
siguiente forma: E0 = Din; E1 = H1(E0,B); E2 = H2(E1,B); E3 = H3(E2,B); E4 = H4(E3,B); Si el campo PASS=4, 5 E5 = H5(E4,B); Si el campo PASS=5
El núcleo del algoritmo radica en la ejecución de la siguiente función: Tx, j = Ex con j: 0-7; P = F (T6 T5 T4 T3 T2 T1 T0) R = (P) <<7+ (T7) <<7 + W,+ K Donde:
P y R es son registros de temporales de 32 bits donde se almacena el resultado de la operación.
Tx es la copia de la entrada Ex correspondiente.
F es la función correspondiente a la ronda.
X es la palabra correspondiente a la ronda.
K es la constante correspondiente a la ronda.
<< 7 representa el corrimiento circular a la izquierda en 7 bits.
La función se ejecuta 32 veces hasta actualizar el vector de salida Ex+1, la actualización se realiza de la siguiente manera.
T7 = T6 T6 = T5 T5 = T4 T4 = T3 T3 = T2 T2 = T1 T1= T0 T0 = R
38 3.5.7 Entrega del Hash.
La actualización de vector Dout se realiza dependiendo del número de
rondas en la forma siguiente
Dout = E3 +E0 para PASS=3
Dout = E4 +E0 para PASS=4
Dout = E5 +E0 para PASS=5
Teniendo el valor Dout actualizado se divide en palabras de longitud
determinada para posteriormente obtener la salida de longitud deseada.
Para 256 bits se toma Dout como tal para el hash.
Para 128 se divide en :
Se opera como
39
Para 160 se divide en:
Se opera como
El hash estará en Y4 Y3 Y2 Y1 Y0
Para 192 se divide en:
40
El hash estará en Y5 Y4 Y3 Y2 Y1 Y0
Para 224 se divide en:
Se opera como
El hash estará en Y6 Y5 Y4 Y3 Y2 Y1 Y0
Con lo cual se ilustra la posibilidad de obtener diferentes hash para un mensaje de entrada idéntico pero con variaciones en su longitud.
41
CAPÍTULO IV
FUNCIONES HASH CRIPTOGRÁFICAS
4.1 Introducción.
A lo largo del documento se ha descrito la estructura de una función hash empezando por el esquema general hasta llegar a los diseños específicos de de cada algoritmo propuesto.
En este capítulo se plasmará el resultado del proceso de la comparación de los algoritmos en función de los parámetros que fueron considerados en la evaluación de las diferentes funciones hash
4.2 Metodología del Análisis
Para llevar a cabo la evaluación de los algoritmos que fueron seleccionados se tomó en cuenta el uso de la memoria, la magnitud del campo de
imágenes. Los ataques existentes, así como los costos computacionales.
4.2.1 Memoria
La memoria utilizada en los diferentes algoritmos Las longitudes de los parámetros para los diferentes algoritmos se presentan en la tabla. 4.2. en donde se puede ver que el algoritmo HAVAL requiere el mayor consumo de memoria pare el procesamiento interno, además de requerir un proceso extra para la entrega del hash con la longitud especifica.
42
Tabla 4.1. Parámetros de los Algoritmos.
4.2.2 Longitud del Hash
La longitud de los hash para los diferentes algoritmos se muestra en la tabla 4.2
Algoritmo Bloque de Salida
HAVAL 256/224/192/160/128 MD2 128 MD4 128 MD5 128 RIPEMD 128 RIPEMD-128/256 128/256 RIPEMD-160/320 160/320 SHA-0 128 SHA-1 160 SHA-256/224 256/224 SHA-512/384 512/384
Tabla 4.2 Salida de los Algoritmos.
Algoritmo Estado Interno Bloque Campo Longitud Palabra
HAVAL 256 1024 64 32 MD2 384 128 No 8 MD4 128 512 64 32 MD5 128 512 64 32 RIPEMD 128 512 64 32 RIPEMD-128/256 128/256 512 64 32 RIPEMD-160/320 160/320 512 64 32 SHA-0 160 512 64 32 SHA-1 160 512 64 32 SHA-256/224 256 512 64 32 SHA-512/384 512 1024 128 64
43 4.2.3 Ataques Existentes
Supongamos que tenemos un mensaje a, al que aplicamos una función resumen a la que llamaremos h. Decimos entonces que el resultado de esta operación, al que llamaremos b es el HASH de a. Es decir: h(a)=b
Esta función debe ser sencilla de realizar para un computador, pero debe ser computacionalmente imposible realizar la operación inversa, al menos para usuarios normales.
Además, esta función tiene otra característica: el tamaño de la entrada no es de longitud fija, puede ser de longitud variable. Esto tiene la
siguiente consecuencia, que no demostraremos matemáticamente, pero que asumiremos por estar razonado en otros artículos publicados en Internet (al final se indican): es posible que dos mensajes de entrada a produzcan el mismo mensaje de salida b. Es decir, es posible encontrar un mensaje c, tal que: h(c)=b
Sin embargo, encontrar ese mensaje debe ser, al igual que la
particularidad antes mencionada, muy complejo desde el punto de vista computacional. Para los algoritmos de HASH esto es lo que se conoce como colisión: que dos mensajes de entrada produzcan el mismo mensaje de salida.
Así, a priori, podemos establecer dos posibles vulnerabilidades de las funciones HASH: Que sea posible realizar la operación
h-1(b)=a
Habitualmente, a la operación de invertir la función HASH comprobando todas las posibilidades para los bits de salida se le llama ataque de
fuerza bruta. Esto es lo que debe ser computacionalmente
44
encontrar la coincidencia (n es el número de bits de salida de la función).
Que se hallen colisiones:
h(a)=b y h(c)=b, a distinto de c Lo que antes hemos denominado
colisión.
Estas dos posibles debilidades dan lugar a cuatro tipos de ataques:
Ataque Tipo 1: El atacante es capaz de encontrar dos mensajes al azar
que colisionan pero es incapaz de hacerlo de forma sistemática. Si es capaz de dar sólo con dos mensajes que provocan colisión, esta no es razón suficiente para tildar el algoritmo de ineficiente. Índice de
peligrosidad: Minimo
Ataque Tipo 2: El atacante es capaz de generar dos mensajes distintos
de forma que sus HASH colisionen, pero sin saber a priori qué hash resultará. Es decir, el atacante no podría generar a voluntad el HASH que necesite para fines maliciosos. Índice de peligrosidad: Bajo
Ataque Tipo 3: El atacante es capaz de construir un mensaje sin
sentido de forma que su HASH colisione con el de un mensaje con sentido. Si éste es el caso, el agente malicioso puede atacar algoritmos de encriptación asimétricos con firma digital, haciendo que se firmen mensajes sin sentido, y que el destinatario los acepte como fidedignos. Índice de peligrosidad: Medio
Ataque Tipo 4: El atacante es capaz de crear un segundo mensaje
falso que tiene sentido y cuyo hash colisiona con el del mensaje
verdadero. En este caso, el atacante puede actuar con total impunidad, puede falsificar certificados, firmar mensajes…El resultado sería
45
Los diferentes ataques se muestran en la tabla 4.2.
Tabla 4.3. Ataques contra los Algoritmos.
Algoritmo Colisión Preimagen
MD5 Si Si SHA-0 Si Si SHA-1 Si No SHA-256/224 No No SHA-512/384 No No RIPEMD128 Si No RIPEMD160 No No HAVAL128 Si No HAVAL160 No No
Algoritmo Rondas Operaciones por Ronda Total
MD5 4 16 64 SHA-1 5 16 80 RIPEMD160 5 32 160 HAVAL 3 32 96 HAVAL 4 32 128 HAVAL 5 32 160
46
CONCLUSIONES
Las diferentes funciones evaluadas fueron en general basadas en el modelo de Merkle Damgard por el que se puede inferir que puede ser una base adecuada para los algoritmos hash que se utilicen con fines criptográficos, a pesar de la existencia de otros modelos.
Los algoritmos analizados están basados en su mayoría basados en el Algoritmo MD4 cada uno de ellos le agrega mejoras unos en lo referente a estado internos otros a los registros de procesamiento, mayor cantidad de rondas o el procesamiento que se le da al estado final. Las diferentes mejoras propuestas solucionan en buena manera la problemática que las originó, tres de las funciones hash son producto de una revisión de los algoritmos previos surgida por los ataques exitosos que fueron reportados en su momento.
De las revisiones realizadas en este trabajo se propone el uso en el corto plazo de la función SHA -1 para poder trabajar con los estándares de firma digital actual, en el mediano plazo las extensiones de SHA en sus formatos de salida 256 y 512 bits y en el largo plazo utilizar HAVAL debido a la seguridad que nos puede proporcionar en función de la variabilidad de la longitud de salida.
47
REFERENCIAS BIBLIOGRÁFICAS.
[1] Thomas A. Berson. Differential cryptanalysis mod 232 with applications to MD5. Avances en Criptología – Notas de Lectura en Ciencias Computacionales. Springer-Verlag, 1992.
[2] Bach, E y Jeffrey, S. Algorithmic Number Theory. Volume I: Efficient Algorithms, MIT Press, 1996.
[3] Damgard. Collision free hash functions and public key signature schemes.In Avances en Criptología – Notas de Lectura en Ciencias Computacionales. Springer-Verlag,1987.
[4] Damgard. A design principle for hash functions. In G. Brassard, editor, Avances en Criptología – Notas de Lectura en Ciencias Computacionales. Vol.435, pages 416– 427. Springer-Verlag, 1990.
[5] Diffie, W. and Hellman, M.. New directions in cryptography. IEEE Transactions on Information Theory, IT-22(6):472–492, 1976.
[6] Kaliski, B. The MD2 message digest algorithm, April 1992. Request for Comments (RFC) 1319.
[7] Donald E. Knuth. The Art of Computer Programming, Sorting and Searching, volume 3. Addison-Wesley, 1973.
[8] R. Merkle. Secure communication over insecure channels. Communications of the ACM, 21:294–299, 1978.
[9] NIST. A proposed federal information processing standard for digital signature standard (DSS), August 1991.
[10] NIST. A proposed federal information processing standard for secure hash (SHS), January 1992.
48
[11] Naor, M. and M. Yung. Universal one-way hash functions and their cryptographic applications. 21° Simposio de Teoría de la Computación de ACM ,pp 33–43, 1989.
[12] Rivest, R. The MD4 message digest algorithm, Abril 1992. Request for Comments (RFC) 1320.
[13] Schneier, Bruce. “Applied Cryptography: Protocols, Algorithms, and Source Code in C”, 2nd Edition Wiley, ISBN: 0471117099, 1996.
[14] Menezes A, Oorschot V y Vanstone, “Handbook Applied Cryptography”, CRC Press 1996,
[15] Rivest, R. The MD5 message digest algorithm, Abril 1992. Request for Comments (RFC) 1321.
[16] Stinson, Douglas R. “Cryptography - Theory and Practice”, Discrete Mathematics and its Applications. Chapman & Hall / CRC Press, Boca Raton~FL, 3rd edition.
[17] Wade Trappe y Lawrence C. Washington, “Introduction to Cryptography with Coding Theory”. Prentice Hall, Upper Saddle River, New Jersey, 2002.
[18] NIST. Secure hash standard. FIPS PUB 180, National Institute of Standards and Technology, May 1993.
[19] NIST. Secure hash standard. FIPS PUB 180-1, National Institute of Standards and Technology, April 1995.