miércoles, 21 de octubre de 2015


Algoritmo de Encriptacion SHA1



La familia SHA (Secure Hash Algorithm, Algoritmo de Hash Seguro) es un sistema de funciones hash criptográficas relacionadas de laAgencia de Seguridad Nacional de los Estados Unidos y publicadas por el National Institute of Standards and Technology (NIST). El primer miembro de la familia fue publicado en 1993 es oficialmente llamado SHA. Sin embargo, hoy día, no oficialmente se le llamaSHA-0 para evitar confusiones con sus sucesores. Dos años más tarde el primer sucesor de SHA fue publicado con el nombre de SHA1.


Existen cuatro variantes más que se han publicado desde entonces cuyas
diferencias se basan en un diseño algo modificado y rangos de salida
incrementados: SHA-224, SHA-256, SHA-384, y SHA-512 (todos ellos son referidos como SHA-2).


En 1998, un ataque a SHA-0 fue encontrado pero no fue reconocido para SHA-1, se
desconoce si fue la NSA quien lo descubrió pero aumentó la seguridad
del SHA-1.SHA-1 ha sido examinado muy de cerca por la comunidad
criptográfica pública, y no se ha encontrado ningún ataque efectivo. No
obstante, en el año 2004, un número de ataques significativos fueron divulgados sobre funciones criptográficas de hash con una estructura similar a SHA-1; esto ha planteado dudas sobre la seguridad a largo plazo de SHA-1.


SHA-0 y SHA-1 producen una salida resumen de 160 bits de un mensaje que puede tener un tamaño máximo de 2<sup>64</sup> bits, y se basa en principios similares a los usados por el profesor Ronald L. Rivest del MIT en el diseño de los algoritmos de resumen    del      mensaje MD4 y MD5.

La      codificación hash vacía       para   SHA-1 corresponde  a:

SHA1("") = da39a3ee5e6b4b0d3255bfef95601890afd80709


Algoritmo desarrollado por el NIST y publicado como estándar federal para el procesamiento de la información (FIBS PUB 180); en 1995 se publicó una versión revisada como FIBS PUB 180-1 conocida como SHA-1.

El algoritmo toma como entrada mensajes de longitud máxima de 264 bits que son procesados en bloques de 512 bits; el resultado que produce es de 160 bits. La imagen muestra de manera general el algoritmo.




Algoritmo de encriptación MD5

En criptografía, MD5 (Algoritmo de Resumen del Mensaje 5) es un algoritmo de reducción criptográfico de 128 bits ampliamente usado. El código MD5 fue diseñado por Ronald Rivest en 1991.

El algoritmo MD5 es una función de cifrado tipo hash que acepta una cadena de texto como entrada, y devuelve un número de 128 bits. Las ventajas de este tipo de algoritmos son la imposibilidad (computacional) de reconstruir la cadena original a partir del resultado, y también la imposibilidad de encontrar dos cadenas de texto que generen el mismo resultado.

Esto nos permite usar el algoritmo para transmitir contraseñas a través de un medio inseguro. Simplemente se cifra la contraseña, y se envía de forma cifrada. En el punto de destino, para comprobar si el password es correcto, se cifra de la misma manera y se comparan las formas cifradas

CODIFICACION Y ALGORITMO DE MD5


La codificación del MD5 funciona de la siguiente manera; su codificación de 128 bits es representada típicamente como un número de 32 dígitos hexadecimal.

Un ejemplo a continuación de una codificación de MD5:

En MD5 ("esto si es una prueba de MD5")

Ahora vemos su Hash de salida=e99008846853ff3b725c27315e469fbc

Pero veamos lo complejo que puede llegar a ser, con tan solo cambiar una letra del mensaje original arroja un Hash de salida muy diferente;

En MD5 ("esto no es una prueba de MD5")

Ahora vemos su Hash de salida=dd21d99a468f3bb52a136ef5beef5034

El simple hecho de codificar un espacio vacío también os da como resultado un Hash de salida complejo al igual que los antes vistos;

En MD5 (" ")

Ahora vemos su Hash de salida=d41d8cd98f00b204e9800998ecf8427e


ALGORITMO MD5


Se comienza suponiendo que se tiene un mensaje de b bits de longitud, escritos m0, m1,...m(b-1).

El algoritmo tiene cinco pasos.

1. Adición de bits de relleno.

El mensaje es rellenado con n bits, de tal manera que le falte a su longitud 64 bits para ser múltiplo de 512. El primer de los nbits es 1 y el resto son 0.

2. Adición de la longitud.

La nueva longitud es una representación de 64 bits y es añadida en forma de dos palabras de 32 bits, en primer lugar se muestran los bits menos significativos. Si la longitud del mensaje es mayor que 264, se usan los 64 bits menos significativos.

3. Inicializar cuatro bufferes, A,B,C y D, que son registros de 32 bits.

Inicializados con los sigs. Valores
A: 01 23 45 67
B: 89 ab cd ef
C: fe dc ba 98
D: 76 54 32 10

4. Procesar el mensaje en bloques de 16 bits (se tendrá una entrada y salida de 32 bits).

F(X,Y,Z) = (X AND Y) OR ((NOT(X)) AND Z)
G(X,Y,Z) = (X AND Z) OR (Y AND (NOT(Z))
H(X,Y,Z) = X XOR Y XOR Z
I(X,Y,Z) = Y XOR (X OR (NOT(Z)))

Se usa una tabla de 64 elementos T[1 ... 64] construida con la función seno, siendo Ti la parte entera de 294967296 * abs(sen(i)) (i en radianes).

5. Salida.

Mensaje producido por A, B, C, D, empezando con los bits menos significativos de A y terminando con los más significativos de D. Independientemente de la longitud del mensaje, su tamaño será de 128 bits.




Algoritmo de encriptación RSA



Interesado en conocer cómo funcionaban a bajo nivel los sistemas de cifrado con juegos de clave pública/privada, y al no encontrar un lugar donde se explique de manera terrenal (y no como para doctores en matemáticas) voy a tratar de escribir este artículo lo más humanamente posible, empezando desde cero y detallando cada uno de los pasos.

La wiki dice que lo primero que tenemos hacer es buscar (de manera aleatoria) dos números primos distintos, llamados a partir de acá p y q, y multiplicarlos entre sí para obtener un nuevo número que llamaremos n.
Para continuar a partir de acá debemos refrescar unos conceptos de aritmética modular, y la mejor forma que encontré fueron unos ejemplos que detallo a continuación:

Supongamos que tenemos que sumar o restar algunas horas apoyándonos en un reloj de agujas, por ejemplo 6 horas más después de las 8. El reloj claramente marcaría las 2 ya que al pasarnos de las 12, empezamos a contar de nuevo. Bueno, esto, en principio, sería  aritmética modular en base 12. Y podríamos definir el caso anterior como 8 + 6 mod 12 = 2.

La única diferencia con la aritmética modular es que se incluye al cero en nuestro universo de números, es por eso que si trabajamos con base 7, los números representados son {0, 1, 2, 3, 4, 5, 6}.

Con un ejemplo un poco más complicado, si multiplicamos 3 * 5, con base 7 el resultado sería 1 (dos vueltas de reloj más una hora), o sea 3 * 5 mod 7 = 1.
A estas operaciones también las podemos relacionar con el resto de una división, pudiendo representar esto de la siguiente manera: 15 / 7 = 2 resto 1.
Algo para resaltar es que, al igual que con los números reales, si dos números se multiplican entre sí y como resultado dan 1, es que son inversos. Así como 5 y 1/5 son inversos porque 5 * (1/5) = 13 y 5son inversos en módulo 7 ya que 3 * 5 mod 7 = 1.

Debemos mencionar una propiedad que dice que un número x tiene inversa módulo y  si no existe ningún número mayor a 1 y menor que x e y  que los divida en forma exacta. Y a estos números se los llama primos relativos ya que no existe un divisor común mayor a 1. Por ejemplo 8  y 5 son primos relativos (aunque 8 no sea primo) ya su máximo común divisor es 1.

Seguimos un poco más. Se conoce al número phi como a la cantidad de  números que tienen inversa para un módulo. Si continuamos con el ejemplo de módulo 7, tenemos que existen 6 números que tienen inversa (del 1 al 6) y de forma genérica se puede decir que si n es número primo, phi(n) es igual a n – 1.

Entonces, si decimos que n está formado por dos números primos, phi(n) es igual a (p – 1) * (q – 1)

Vamos a completar este caso con un ejemplo:

p = 3
q = 11
n = p * q = 3 * 11 = 33
phi(n) = 2 * 10 = 20

Generación de las claves

La clave pública será un número aleatorio que sea primo relativo entre 1 y phi(n) al cual llamaremos e, y para nuestro caso podemos usar el 7.
A la inversa la llamaremos d y surge, como ya dijimos, de obtener el número que multiplicado por e nos de1 mod (phi(n)). Mucho me costó entender esta última parte y me quedo más que claro después de leer varios ejemplos, así que vamos con uno:

Dijimos que:

e = 7 (exponente público)

Entonces, para encontrar d tenemos que iterar desde 1 hasta 20  (o sea phi(n)) tratando de ubicar un número tal que multiplicado por 7 nos de 1 en módulo 20 (o sea phi(n)).

7 * d = 1 mod (20)
7 * 3 = 21
21 mod 20 = 1
d = 3 (exponente privado)

Ahora si tenemos todo como para armar la clave pública y la clave privada, y ambas se definen de la siguiente manera:

Clave Pública: (n, e) o (33, 7)
Clave Privada: (n,d) o (33, 3)

Cifrar y descifrar:

Para cifrar un mensaje, lo único que debemos hacer es elevar el dato a e(que dijimos, es el número de  la clave pública). El procedimiento para descifrar un mensaje  se apoya en una nueva propiedad que dice que si multiplicamos un número x  por sí mismo phi(n) veces, el resultado es 1 en módulo n, y en esta propiedad es donde se apoya el algoritmo RSA.

Con los datos que venimos manejando, supongamos que queremos cifrar el número 2.

dato = 2
Cifrar:
dato^e mod (n)
2 ^ 7 mod(33) = 128 mod (33) = 29 = datoCifrado

Descifrar:

datoCifrado^d mod(n)
29^3 mod(33) = 24389 mod(33) =  2 = dato








Whitfield Diffie

Es un erudito de consultoría en la CISAC. Fue profesor visitante en el período 2009-2010 y un afiliado 2.010 a 2.012. Él es mejor conocido por el descubrimiento del concepto de criptografía de clave pública, en 1975, que desarrolló junto con la Universidad de Stanford Ingeniería Eléctrica profesor Martin Hellman. Criptografía de clave pública, que revolucionó no sólo la criptografía, sino también la comunidad criptográfica, ahora subyace la seguridad del comercio por Internet.



Durante la década de 1980, Diffie se desempeñó como gerente de investigación de sistemas seguros de Northern Telecom. En 1991, se unió a Sun Microsystems como distinguido ingeniero y se mantuvo como Sun compañero y jefe de seguridad hasta la primavera de 2009.

Diffie pasó la década de 1990 que trabaja para proteger el derecho individual y empresarial para utilizar el cifrado, por el que argumenta en el libro de privacidad en la línea, la política de escuchas telefónicas y encriptación, que escribió en colaboración con Susan Landau. Diffie es un compañero de Marconi y el destinatario de numerosos premios incluyendo el Premio Nacional de Informática de Sistemas de Seguridad (dada conjuntamente por el NIST y la NSA) y el Premio Levy del Instituto Franklin.



Martin E. Hellman 
Profesor Emérito de Ingeniería Eléctrica



Martin E. Hellman nació en Nueva York, Nueva York en octubre de 1945. Recibió su SER de la Universidad de Nueva York en 1966, y su MS y Ph.D. de la Universidad de Stanford en 1967 y 1969, todos ellos en Ingeniería Eléctrica.

Prof. Hellman fue en el Centro de Investigación Watson de IBM 1.968-69 y profesor adjunto de EE en el MIT 1969-71. Volviendo a Stanford en 1971, sirvió en la facultad de regular hasta convertirse en profesor emérito en 1996. Es autor de más de setenta trabajos técnicos diez patentes de Estados Unidos y un número de equivalentes extranjeros.

Hellman es más conocido por su invención, con Diffie y Merkle, de la criptografía de clave pública. Además de muchas otras aplicaciones, esta tecnología es la base para transacciones seguras en Internet. También ha sido colaborador desde hace mucho tiempo al debate de la seguridad informática, empezando por la cuestión de tamaño de la clave de DES en 1975, sirviendo (1994-96) en el Comité del Consejo de Investigación Nacional para el Estudio de la Política Nacional de cifrado, y se encuentra actualmente en Verified Voting de Junta de Asesores.


Información más detallada está disponible en sus honores y premios, el servicio universitario, y su servicio profesional y cívico.

Prof. Hellman también tiene un profundo interés en la ética del desarrollo tecnológico. Con el profesor Anatoli Gromiko de Moscú, fue co-editado penetración: Emergentes Nuevo Pensamiento, un libro publicado simultáneamente en ruso y en inglés en 1987 durante el rápido cambio en las relaciones soviético-estadounidenses. Su proyecto actual en esta área, Desactivar la Amenaza Nuclear, ha sido respaldado por una serie de personalidades entre ellos un ex director de la Agencia de Seguridad Nacional, de Stanford Presidente Emérito, y dos premios Nobel.

También trabajó para desarrollar un ambiente dentro de la universidad en la que los estudiantes de diversos orígenes podrían funcionar al máximo de su capacidad. Este trabajo fue reconocido por cuatro premios de enseñanza, incluyendo tres de las organizaciones de estudiantes de minorías.


Hellman ha estado involucrado en una serie de nuevas empresas de alta tecnología, que sirve indistintamente como uno de los fundadores, asesor, y de los inversores. En su tiempo libre, le gusta la gente, alza, el patinaje de velocidad y el senderismo.