Mecanismos de seguridad en el desarrollo de aplicaciones

11
Tecnologías de la Información y Comunicación. Área Sistemas Informáticos Trabajo: “Investigación de mecanismos de seguridadMateria: Desarrollo de Aplicaciones III Docente: Lic. Luis Octavio Alpizar Garrido PRESENTA: Abraham Gerardo Flores Guevara Fecha de entrega: 17/03/2012

description

A continuación se muestra una investigación de clase sobre los "Mecanismos de seguridad en el desarrollo de aplicaciones"

Transcript of Mecanismos de seguridad en el desarrollo de aplicaciones

Page 1: Mecanismos de seguridad en el desarrollo de aplicaciones

Tecnologías de la Información y Comunicación. Área Sistemas Informáticos

Trabajo: “Investigación de mecanismos de seguridad”

Materia: Desarrollo de Aplicaciones III

Docente: Lic. Luis Octavio Alpizar Garrido

PRESENTA:

Abraham Gerardo Flores Guevara

Fecha de entrega: 17/03/2012

Page 2: Mecanismos de seguridad en el desarrollo de aplicaciones

MECANISMOS DE SEGURIDAD EN EL DESARROLLO

DE APLICACIONES MÓVILES.

RSA (Rivest, Shamir y Adleman) es un sistema criptográfico de clave pública

desarrollado en 1977. Es el primer y más utilizado algoritmo de este tipo y es válido

tanto para cifrar como para firmar digitalmente.

La seguridad de este algoritmo radica en el problema de la factorización de

números enteros. Los mensajes enviados se representan mediante números, y el

funcionamiento se basa en el producto, conocido, de dos números primos grandes

elegidos al azar y mantenidos en secreto. Actualmente estos primos son del orden

de , y se prevé que su tamaño aumente con el aumento de la capacidad de

cálculo de los ordenadores.

Como en todo sistema de clave pública, cada usuario posee dos claves de cifrado:

una pública y otra privada. Cuando se quiere enviar un mensaje, el emisor busca la

clave pública del receptor, cifra su mensaje con esa clave, y una vez que el mensaje

cifrado llega al receptor, este se ocupa de descifrarlo usando su clave privada.

Se cree que RSA será seguro mientras no se conozcan formas rápidas de

descomponer un número grande en producto de primos. La computación cuántica

podría proveer de una solución a este problema de factorización.

El algoritmo consta de tres pasos: generación de claves, cifrado y descifrado.

Idea del algoritmo.

Supongamos que Bob quiere enviar a Alicia un mensaje secreto que solo ella

pueda leer.

Alicia envía a Bob una caja con una cerradura abierta, de la que solo Alicia tiene la

llave. Bob recibe la caja, escribe el mensaje, lo pone en la caja y la cierra con su

cerradura (ahora Bob no puede leer el mensaje). Bob envía la caja a Alicia y ella la

abre con su llave. En este ejemplo, la caja con la cerradura es la «clave pública» de

Alicia, y la llave de la cerradura es su «clave privada».

Page 3: Mecanismos de seguridad en el desarrollo de aplicaciones

Técnicamente, Bob envía a Alicia un «mensaje llano» en forma de un número

menor que otro número , mediante un protocolo reversible conocido como

padding scheme («patrón de relleno»). A continuación genera el «mensaje cifrado»

mediante la siguiente operación:

,

donde es la clave pública de Alicia.

Ahora Alicia descifra el mensaje en clave mediante la operación inversa dada por

,

donde es la clave privada que solo Alicia conoce.

Generación de claves

1. Cada usuario elige dos números primos distintos y .

o Por motivos de seguridad, estos números deben escogerse de forma

aleatoria y deben tener una longitud en bits parecida. Se pueden hallar

primos fácilmente mediante test de primalidad.

2. Se calcula .

o se usa como el módulo para ambas claves, pública y privada.

3. Se calcula , donde es la función φ de Euler.

4. Se escoge un entero positivo menor que , que sea coprimo con .

o se da a conocer como el exponente de la clave pública.

o Si se escoge un con una suma encadenada corta, el cifrado será más

efectivo. Un exponente muy pequeño (p. ej. ) podría suponer un

riesgo para la seguridad.1

5. Se determina un (mediante aritmética modular) que satisfaga la congruencia

, es decir, que sea el multiplicador modular inverso de

o Expresado de otra manera, es dividido exactamente por

.

o Esto suele calcularse mediante el algoritmo de Euclides extendido.

o se guarda como el exponente de la clave privada.

La clave pública es , esto es, el módulo y el exponente de cifrado. La clave

privada es , esto es, el módulo y el exponente de descifrado, que debe

mantenerse en secreto.

Page 4: Mecanismos de seguridad en el desarrollo de aplicaciones

Nota:

PKCS#1 v2.0 y PKCS#1 v2.1 se especifican mediante la función de Carmichael

en vez de la función de Euler, donde

indica el mínimo común múltiplo.

Para una mayor eficiencia los siguientes valores se calculan de antemano y se

almacenan como parte de la clave privada:

o y : los primos para la generación de las claves,

o y ,

o .

Cifrado

Alicia comunica su clave pública a Bob y guarda la clave privada en secreto.

Ahora Bob desea enviar un mensaje a Alicia.

Primero, Bob convierte en un número entero menor que mediante un

protocolo reversible acordado de antemano. Luego calcula el texto cifrado

mediante la operación

.

Esto puede hacerse rápido mediante el método de exponenciación binaria. Ahora

Bob transmite a Alicia.

Descifrado

Alicia puede recuperar a partir de usando su exponente de la clave privada

mediante el siguiente cálculo:

.

Ahora que tiene en su poder, puede recuperar el mensaje original invirtiendo

el padding scheme.

El procedimiento anterior funciona porque

.

Page 5: Mecanismos de seguridad en el desarrollo de aplicaciones

Esto es así porque, como hemos elegido y de forma que , se

cumple

.

La última congruencia se sigue directamente del teorema de Euler cuando es

coprimo con . Puede demostrarse que las ecuaciones se cumplen para todo

usando congruencias y el teorema chino del resto.

Esto muestra que se obtiene el mensaje original:

.

Ejemplo

Aquí tenemos un ejemplo de cifrado/descifrado con RSA. Los parámetros usados

aquí son pequeños y orientativos con respecto a los que maneja el algoritmo, pero

podemos usar también OpenSSL para generar y examinar un par de claves reales.

p=61 1º nº primo Privado

q=53 2º nº primo Privado

n=pq=3233 producto p*q

e=17 exponente Público

d=2753 exponente Privado

La clave pública (e, n). La clave privada es (d, n). La función de cifrado es:

Donde m es el texto sin cifrar. La función de descifrado es:

Donde c es el texto cifrado. Para cifrar el valor del texto sin cifrar 123, nosotros

calculamos:

Page 6: Mecanismos de seguridad en el desarrollo de aplicaciones

Para descifrar el valor del texto cifrado, nosotros calculamos:

Ambos de estos cálculos pueden ser eficientemente usados por el algoritmo de

multiplicación cuadrática para exponenciación modular.

MD5 (abreviatura de Message-Digest Algorithm 5, Algoritmo de Resumen

del Mensaje 5) es uno de los algoritmos de reducción criptográficos diseñados por

el profesor Ronald Rivest del MIT (Massachusetts Institute of Technology, Instituto

Tecnológico de Massachusetts). Fue desarrollado en 1991 como reemplazo del

algoritmo MD4 después de que Hans Dobbertin descubriese su debilidad.

La codificación del MD5 de 128 bits es representada típicamente como un número

de 32 dígitos hexadecimal. El siguiente código de 28 bytes ASCII será tratado con

MD5 y veremos su correspondiente hash de salida:

MD5("Esto sí es una prueba de MD5") = 02306f485f385f6ed9ab6626052a633d

Un simple cambio en el mensaje nos da un cambio total en la codificación hash, en

este caso cambiamos dos letras, el «sí» por un «no».

MD5("Esto no es una prueba de MD5") = dd21d99a468f3bb52a136ef5beef5034

Otro ejemplo sería la codificación de un campo vacío:

MD5("") = d41d8cd98f00b204e9800998ecf8427e

Algoritmo

En este documento "palabra" es una entidad de 4 bytes y un byte es una entidad

de 8 bits. Una secuencia de bytes puede ser interpretada de manera natural como

una secuencia de bits, donde cada grupo consecutivo de ocho bits se interpreta

como un byte con el bit más significativo al principio. Similarmente, una secuencia

de bytes puede ser interpretada como una secuencia de 32 bits (palabra), donde

Page 7: Mecanismos de seguridad en el desarrollo de aplicaciones

cada grupo consecutivo de cuatro bytes se interpreta como una palabra en la que

el byte menos significativo está al principio.

El símbolo "+" significa suma de palabras.

X <<< s se interpreta por un desplazamiento a la izquierda 's'

posiciones

not(x) se entiende como el complemento de x

Feistel es un método de cifrado en bloque con una estructura particular.

Debe su nombre al criptógrafo de IBM Horst Feistel. También es conocida

comúnmente como Red de Feistel. Un gran número de algoritmos de cifrado por

bloques lo utilizan, siendo el más conocido el algoritmo Data Encryption Standard

(DES). Las redes de Feistel presentan la ventaja de ser reversibles por lo que las

operaciones de cifrado y descifrado son idénticas, requiriendo únicamente invertir

el orden de las subclaves utilizadas.

Este algoritmo se denomina simétrico por rondas, es decir, realiza siempre las

mismas operaciones un número determinado de veces (denominadas rondas). Los

pasos de la red de Feistel son entre algunos mas:

1. Se selecciona una cadena, N, normalmente de 64 o 128 bits, y se la divide en

dos subcadenas, L y R, de igual longitud (N/2)

2. Se toma una función, F, y una clave Ki

3. Se realizan una serie de operaciones complejas con F y Ki y con L o R (solo

uno de ellas)

4. La cadena obtenida se cambia por la cadena con la que no se han realizado

operaciones, y se siguen haciendo las rondas.

Las operaciones básicas de una red de Feistel son las siguientes: se descompone el

texto plano en dos piezas iguales, ( , ). Para realizar el cifrado en cada ronda

, se calcula

Donde es una función y son cada una de las subclaves aplicadas a cada

iteración. El texto cifrado viene dado por la concatenación de y .

Page 8: Mecanismos de seguridad en el desarrollo de aplicaciones

Para el descifrado las operaciones que hay que realizar son:

Una ventaja de este modelo es que la función usada no tiene por qué ser

reversible, pudiendo ser todo lo complicada que se desee, esta cualidad permite a

los criptógrafos concentrarse en la seguridad de dicha función sabiendo que el

proceso de descifrado está garantizado ya que la propia estructura de la red de

Feistel es reversible. Para ello únicamente requiere que se invierta el orden de las

subclaves utilizadas.

Una variación del esquema de Feistel son las redes de Feistel no balanceadas en

las que las mitades del texto en plano L0 y R0 son de diferente longitud. Un

algoritmo de cifrado que utiliza esta variación es el algoritmo Skipjack.

KASUMI, también llamado A5/3, es una unidad de cifrado por bloques

utilizada en algoritmos de confidencialidad (f8) e integridad (f9) para Telefonía

móvil 3GPP. KASUMI fue diseñado por el grupo SAGE (Security Algorithms Group

of Experts en inglés), que forma parte del organismo de estándares europeos ETSI.

En lugar de inventar un cifrado desce cero, SAGE seleccionó un algoritmo existente

llamado MISTY1. Para su implementación en hardware, se le realizaron algunas

optimizaciones. De allí que MISTY1 y KASUMI sean muy similares, de manera que

los análisis disponibles sobre uno se adaptan fácilmente al otro (kasumi en japonés

es neblina, "misty" en inglés).

KASUMI tiene un tamaño de bloque de 64 bits y un tamaño de clave de 128 bits. Es

una unidad de cifrado por bloque de tipo Cifrado Feistel con ocho vueltas y, al

igual que MISTY1 y MISTY2, tiene una estructura recursiva, con subcomponentes

de tipo similar a Feistel.

En 2001, Kühn presentó un ataque diferencial imposible en seis vueltas de KASUMI.

Page 9: Mecanismos de seguridad en el desarrollo de aplicaciones

MECANISMOS DE SEGURIDAD EN EL DESARROLLO

DE APLICACIONES WEB.

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; lo que ha planteado

dudas sobre la seguridad a largo plazo de SHA-1.

SHA-0 y SHA-1 producen una salida resumen de 160 bits (20 bytes) de un mensaje

que puede tener un tamaño máximo de 264 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 de mensaje MD4 y MD5.

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

SHA1("") = da39a3ee5e6b4b0d3255bfef95601890afd80709

WHIRLPOOL es una función de hash diseñada por Vincent

Rijmen y Paulo S. L. M. Barreto. WHIRLPOOL fue desarrollado después del

algoritmo de cifrado por bloques Square. WHIRLPOOL es una construcción

Miyaguchi-Preneel basada en una modificación del Advanced Encryption Standard.

Dado un mensaje de un tamaño menor de 2256 bits, devuelve un hash de 512 bits.

Los autores han declarado que WHIRLPOOL no está patentado (ni lo estará). Puede

ser usado libremente para cualquier propósito y las implementaciones de

referencia son de dominio público.

El nombre del algoritmo es en referencia a la Galaxia Whirlpool en la constelación

Canes Venatici.

En lo siguientes ejemplos, versión original de WHIRLPOOL será llamada

WHIRLPOOL-0 y la primera revision WHIRLPOOL-1.

Page 10: Mecanismos de seguridad en el desarrollo de aplicaciones

Los hashes de 512 bits (64 bytes) se representan como 128 caracteres

hexadecimales. En estos ejemplos se muestran entradas de 43 bytes ASCII y su

correpondiente hash de WHIRLPOOL:

WHIRLPOOL-0("The quick brown fox jumps over the lazy dog") =

4F8F5CB531E3D49A61CF417CD133792CCFA501FD8DA53EE368FED20E5FE0248C

3A0B64F98A6533CEE1DA614C3A8DDEC791FF05FEE6D971D57C1348320F4EB42D

WHIRLPOOL-1("The quick brown fox jumps over the lazy dog") =

3CCF8252D8BBB258460D9AA999C06EE38E67CB546CFFCF48E91F700F6FC7C183

AC8CC3D3096DD30A35B01F4620A1E3A20D79CD5168544D9E1B7CDF49970E87F1

WHIRLPOOL("The quick brown fox jumps over the lazy dog") =

B97DE512E91E3828B40D2B0FDCE9CEB3C4A71F9BEA8D88E75C4FA854DF36725F

D2B52EB6544EDCACD6F8BEDDFEA403CB55AE31F03AD62A5EF54E42EE82C3FB35

Incluso un pequeño cambio hará que (con una probabilidad de 1-10-154) el

resultado de la función sea completamente distinto, por ejemplo, cambiando d por

c:

WHIRLPOOL-0("The quick brown fox jumps over the lazy cog") =

CB2CB5F1697A6D8C6609998965F97C243B53A29EB973AEC8D388E893C0E7DD9B

6CCA934FE67151300120D409C6F0982923B9D15AA5CA8356BDAF2F97F50351BC

WHIRLPOOL-1("The quick brown fox jumps over the lazy cog") =

64D675832795AED30DCD926DBA32F4E0ED95B067D1C563400C4B600721EA100F

5BC5EBFB9DAB55AA159CB5C52DFF57CF54443D031EF7F38268E0A059450BB9D1

WHIRLPOOL("The quick brown fox jumps over the lazy cog") =

DCE81FC695CFEA3D7E1446509238DAF89F24CC61896F2D265927DAA70F2108F8

902F0DFD68BE085D5ABB9FCD2E482C1DC24F2FABF81F40B73495CAD44D7360D3

El hash de la cadena vacía es:

WHIRLPOOL-0("") =

B3E1AB6EAF640A34F784593F2074416ACCD3B8E62C620175FCA0997B1BA23473

39AA0D79E754C308209EA36811DFA40C1C32F1A2B9004725D987D3635165D3C8

WHIRLPOOL-1("") =

470F0409ABAA446E49667D4EBE12A14387CEDBD10DD17B8243CAD550A089DC0F

EEA7AA40F6C2AAAB71C6EBD076E43C7CFCA0AD32567897DCB5969861049A0F5A

WHIRLPOOL("") =

19FA61D75522A4669B44E39C1D2E1726C530232130D407F89AFEE0964997F7A7

3E83BE698B288FEBCF88E3E03C4F0757EA8964E59B63D93708B138CC42A66EB3

RIPEMD-160 (RACE Integrity Primitives Evaluation Message

Digest, primitivas de integridad del resumen del mensaje) es un algoritmo del

resumen del mensaje de 160 bits (y función criptográfica de hash) desarrollado en

Europa por Hans Dobbertin, Antoon Bosselaers y Bart Preneel. Es una versión

Page 11: Mecanismos de seguridad en el desarrollo de aplicaciones

mejorada de RIPEMD, que estaba basado sobre los principios del diseño del

algoritmo MD4, y es similar en seguridad y funcionamiento al más popular SHA-1.

También existen versiones de 128, 256 y 320 bits de este algoritmo, llamadas

RIPEMD-128, RIPEMD-256 y RIPEMD-320 respectivamente. La versión 128 bits

fue pensada solamente como un remplazo para el RIPEMD original, que eran

también de 128 bits, y en la que habían sido encontradas razones para cuestionar

su seguridad. Las versiones de 256 y 320 bits solamente disminuyen la posibilidad

de colisiones hash accidentales, y no tienen niveles más altos de seguridad con

respecto a RIPEMD-128 y RIPEMD-160.

RIPEMD-160 fue diseñado en la comunidad académica abierta, en contraste con el

algoritmo SHA-1, diseñado por la Agencia de Seguridad Nacional estadounidense

(NSA). Por otra parte, RIPEMD-160 es un diseño menos popular y

correspondientemente está peor estudiado.

Ninguna patente está asociada al RIPEMD-160.

En agosto del año 2004, una colisión hash fue divulgada para el algoritmo RIPEMD

original que no afecta al resto de algoritmos.

Los hashes de 160 bits RIPEMD (también llamados resúmenes RIPE del mensaje) se

representan típicamente como números en hexadecimal 40 dígitos. El resultado de

usar RIPEMD-160 con una cadena vacía es este:

RIPEMD-160("") = 9c1185a5c5e9fc54612808977ee8f548b2258d31