Taller: Criptografía asimétrica.

Iniciado por APOKLIPTICO, 7 Octubre 2010, 22:58 PM

0 Miembros y 2 Visitantes están viendo este tema.

APOKLIPTICO

NOTA: Para ver todos los capítulos sin las preguntas, referirse a este thread: Manual: Criptografía asimétrica desde cero.

Capítulo I.
Bueno, como prometí, hoy comenzamos con el taller de criptografía asimétrica.
Vamos a empezar con las bases y despues iremos ampliando la información. La idea es que yo voy a explicar lo mejor posible todos los conceptos y luego voy a dar links (Algunos ya existentes en el foro) para ampliar la información ya dada.
Estas son interpretaciones con el fin de hacer más legible y accesible la información que puede resultar compleja, vale aclarar que todo lo expuesto, va a ser basado de otras fuentes, que van a ser aclaradas al final.

Quiero poner unas reglas básicas para como vamos a manejarnos en el taller:
- Todas las preguntas sobre lo expuesto en este thread, deben seguir las siguientes indicaciones:
1) Aclarar a qué parte del taller está referida la pregunta.
2) Ser clara y lo más explícita posible.
3) No utilizar "escritura sms", utilizar signos de puntuación, mayúsculas y espacios y tratar de mantener las faltas de ortografía a un mínimo.
4) No preguntar cosas que ya se han preguntado.
5) Las palabras "encriptar" y "desencriptar" son anglicismos que no deben ser utilizadas. Las palabras correctas son "Cifrar" y "Descifrar". cifrar viene del inglés "Encrypt" y descifrar de "Decrypt".

Voy a comenzar un pequeño glosario de términos que a medida que avanzemos se irá llenando, si se hace muy grande, lo pasaré a un post aparte:
- Plaintext: Mensaje antes de ser cifrado.
- Ciphertext: Mensaje después de ser cifrado.
- Cifrar: Aplicar un algoritmo matemático que tiene como fin hacer teóricamente imposible la lectura de un mensaje.
- Descifrar: Aplicar un algoritmo matemático que tiene como fin volver a hacer legible un mensaje cifrado.
- Charset: Conjunto de caracteres que pueden llegar a componer a una clave (Ej: Minúsculas, Mayúsculas, espacios, números, caracteres especiales, todo el espectro ASCII).
- Brute Force: Metodo de crackeo de claves que consiste en probar secuencialmente claves hasta dar con la correcta, suele ser lento, consumidor de recursos y generalmente infeasible.
- Infeasible: Anglicismo que se utiliza para denominar hechos que en teoría son posibles, pero la cantidad de tiempo o recursos necesarios para lograr dichos hechos, excede en tal manera que los hace extremadamente impracticos.
- A.K.A.: "Also Known As" = "También conocido como".
Comenzemos entonces:
Capítulo I. Este capítulo fue escrito mientras se escuchaba: Die Toten Hosen (Opium Fürs Volk).
Qué es la criptografía asimétrica?

Cita de: WikipediaLa criptografía (Del griego, literalmente «escritura oculta») asimétrica es el método criptográfico  que usa un par de claves para el envío de mensajes. Las dos claves pertenecen a la misma persona a la que se ha enviado el mensaje. Una clave es pública y se puede entregar a cualquier persona, la otra clave es privada y el propietario debe guardarla de modo que nadie tenga acceso a ella.

Entonces: El algoritmo de cifrado asimétrico, crea dos claves, una pública con la que solo se debe cifrar los datos, y una privada, que permite descifrar los datos.

Cuál es la diferencia entre un algoritmo asimétrico y uno simétrico?
Un algoritmo simétrico permite que la misma clave se pueda utilizar para cifrar y para descifrar.
La ventaja del algoritmo simétrico sobre el asimétrico, es que los simétricos suelen ser mucho más seguros con claves más pequeñas, esto significa, utilizando un ejemplo, que para obtener la seguridad que tiene un AES 128 bits (Simétrico) se debe utilizar al menos una clave de RSA 1024 bits. Otra de las ventajas de los algoritmos simétricos es que suelen ser decena de veces más rápidos para computar las claves y para cifrar los datos.

Para qué entonces utilizar criptografía asimétrica?
Sin embargo, una de las grandes fallas que tienen los algoritmos simétricos sobre los asimétricos, es el intercambio de claves, esto se explica a continuación con un ejemplo práctico.
Agustin y Bernardo quieren comunicarse por un canal, Eva, sin embargo, puede ver los paquetes que se transportan por dicho canal.

Agustin y Bernardo entonces, deciden utilizar la criptografía para evitar que Eva pueda ver su comunicación.
Comienzan utilizando criptografía simétrica.
Agustín, le envía a Bernardo la clave que van a utilizar para establecer el canal seguro. Pero Eva también puede ver esta clave.
Agustín cifra los datos que quiere enviar y Bernardo los recibe, sin embargo, Eva tiene la clave simétrica y los datos, entonces puede ver la comunicación entre Agustín y Bernardo.

Canal seguro: FAIL!

Entonces, Agustín y Bernardo, deciden utilizar criptografía asimétrica.
Agustín y Bernardo crean cada uno un par de claves Pública y Privada. Vamos a llamarlas E(A), E(B), D(A) y D(B), siendo E(A) la clave pública de Agustín, E(B) la clave pública de Bernardo, D(A) la clave privada de Agustín y D(B) la clave privada de Bernardo.
1) Agustín le envía a Bernardo E(A) y Bernardo le envía a Agustín E(B).
2) Agustín cifra con E(B) los datos que le quiere mandar a Bernardo y Bernardo cifra con E(A) los datos que le quiere mandar a Agustín.
3) Agustín descifra con D(A) los datos que recibió de Bernardo y Bernardo descifra con D(B) los datos que recibió de Agustín.
4) Eva, lo único que puede ver en el canal, son las dos claves públicas y los datos cifrados, entonces, esta no va a poder ver los datos que Agustín y Bernardo comparten.

Canal seguro: OK!!

Para los que entienden mejor con interpretaciones gráficas, aqui les presento un par:




Bases de la criptografía asimétrica.

Cita de: WikipediaLos sistemas de cifrado de clave pública se basan en funciones-trampa de un solo sentido que aprovechan propiedades particulares, por ejemplo de los números primos. Una función de un solo sentido es aquella cuya computación es fácil, mientras que su inversión resulta extremadamente difícil. Por ejemplo, es fácil multiplicar dos números primos juntos para obtener uno compuesto, pero es difícil factorizar  uno compuesto en sus componentes primos. Una función-trampa de un sentido es algo parecido, pero tiene una "trampa". Esto quiere decir que si se conociera alguna pieza de la información, sería fácil computar el inverso. Por ejemplo, si tenemos un número compuesto por dos factores primos y conocemos uno de los factores, es fácil computar el segundo.

Dado un cifrado de clave pública basado en factorización de números primos, la clave pública contiene un número compuesto de dos factores primos grandes, y el algoritmo de cifrado usa ese compuesto para cifrar el mensaje. El algoritmo para descifrar el mensaje requiere el conocimiento de los factores primos, para que el descifrado sea fácil si poseemos la clave privada que contiene uno de los factores, pero extremadamente difícil en caso contrario.

Fuentes:
- http://es.wikipedia.org/wiki/Criptograf%C3%ADa_asim%C3%A9trica
- http://es.wikipedia.org/wiki/Criptograf%C3%ADa_sim%C3%A9trica
- https://zonatic.usatudni.es/es/aprendizaje/aprende-sobre-el-dnie/57-aspectos-tecnicos/196-criptografia-y-esquemas-de-clave-publica.html

Cualquier duda que tengan, posteenla acá, cuando vea que no hay más preguntas, pongo el siguiente tema.

Un abrazo
APOKLIPTICO.

Toda la información expuesta en este taller, está protegida bajo licencia Creative Commons Attribution-NonCommercial-ShareAlike 2.5.
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

MasterPunk

Ahí va la primera pregunta:
Tanto la criptografía simétrica como la asimétrica has dicho que utilizan claves. ¿De qué clase de claves estás hablando? Alfanuméricas, solo letras, solo números (decimal, binario, hexa).
¿Cómo de largas pueden ser estas claves, es decir, hay un máximo de caracteres?

Gracias

APOKLIPTICO

Cada algoritmo tiene su método de generación de claves, la longitud de las claves, se suelen expresar en "bits", cabe aclarar que 8 bits = 1 byte.
Los métodos de generación de claves, suelen basarse en un generador pseudo-aleatorio, que utiliza como "semilla" una frase (Conocida como passphrase) y una información aleatoria introducida por el usuario (por ejemplo con movimientos del mouse o teclas apretadas aleatoriamente) o sacadas de un "random pool", esto es para los sistemas operativos que lo soportan, un conjunto de información aleatoria sacada de las interacciones del usuario (movimientos del mouse, teclado, etc.) y cosas como el uso de la cpu, temperaturas registradas, etc. Esto tiene como fin maximizar la aleatoriedad de las claves creadas.

No se preocupen si al principio no se entienden muchos conceptos como "entropía" o "generador pseudo-aleatorio" estos se van a ir viendo a medida que avancemos.
Las claves que se utilizan en los algoritmos de cifrado, tanto sean simétricos como asimétricos, varían en su generación y en su tamaño dependiendo del algoritmo utilizado. Por ejemplo, RSA acepta claves de 1024, 2048 y 4096 bits y solía aceptar de 512 hasta que se mostraron inseguras. Por otro lado, RC4 (arcefour) acepta claves desde 8 hasta 2048 bits en teoría, aunque por cuestiones de seguridad, se suelen utilizar claves de al menos 128 bits.
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

WestOn

Buenas, entonces si tenemos un mensaje, de letras, ¿habría que pasarlo a numeros para operar con el?
¿Y luego sobre el mensaje transformado a números se factoriza?

Voy a dormir que veo muchos números por mi mente  :xD

Saludos
En mi cabeza existe una barrera espacio-tiempo de 4cm³. ¿Alguien sabe como eliminarla?.
                                                                                                                                                                                                                            

APOKLIPTICO

#4
Es que justamente, depende del algoritmo, no te preocupes, vamos a verlos todos detenidamente uno por uno.

PD: @Weston, si con "mensaje" te referis al texto a cifrar (de ahora en adelante "Plaintext"), se debe utilizar el número que representa dicho caracter en el código ASCII. Por ejemplo, la "a" es el 97 (alt+97 te va a dar una letra "a"). Luego se aplica el algoritmo a esos números, para obtener el mensaje cifrado (de ahora en adelante "Ciphertext").

PD2: @MasterPunk, acabo de entender lo que me quisiste decir. Las claves que se utilizan para cifrar, suelen no ser claves "legibles" como la que uno usa para su cuenta de mail. Suelen ser altamente aleatorias y creadas específicamente para esto. La razón de esto es lo siguiente: Esto es un poco complicado, si no lo entienden aún, lo van a entender cuando veamos criptoanálisis, entropía, etc.

Si uno tiene una clave de 64 bits (8 bytes), por ejemplo "computar", esta contiene sólo a un espectro del código ascii. Esto es las minúsculas y las mayúsculas. Si alguien que quiere atacar a nuestro cifrado, sabe esto, sus probabilidades de conseguir dicha clave, aumentan increiblemente.
La cantidad de combinaciones que hay en 16 bytes si estamos usando todo el espectro ascii (de "0" hasta "255"), son de 256^8, si por ejemplo estamos usando RC4 que es uno de los algoritmos más rápidos y tenemos una velocidad de cracking de 80.000.000 de claves por segundo, tardaríamos 7312 años en conseguir la clave (asumiendo que la última es la correcta claro).
En cambio, si nosotros supiesemos que la clave que se utiliza para crackear está compuesta por alguna de las 26 minúsculas (a esto se le llama "charset") el tiempo necesario para conseguir la clave, sería de 26^8/80.000.000 = 43 minutos y 30 segundos.

La diferencia es muy importante como pueden ver, ya que si aumenta el charset, la cantidad de posibilidades aumenta exponencialmente.
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

bomba1990

bueno voy leyendo y voy entendiendo.

primera pregunta:
vamos a ver el sifrado asimetrico genera dos claves ¿una que solo sirve para cifrar y la otra que solo sirve para descifrar? ¿o se requieren las dos para descifrar?


lei en wikipedia que
CitarSi el propietario del par de claves usa su clave privada para cifrar el mensaje, cualquiera puede descifrarlo utilizando su clave pública

las dos claves sirven para cifrar un documento pero no se puede descifrar el documento que ya se cifro con la misma clave.

es decir agustin sifra un plantext con su clave privada y el mismo no lo podria descifrar sin la ayuda de la clave publica, pero cualquiera con su llave publica si lo podria descifrar.

¿como se logra esto?
¿quien le pone una clave de 1024bits?,  ¿el sistema debe autogenerarla?
¿cuando empezeños podemos hacer primero uno pequeño solo para analizarlo mejor o hay alguno en internet para verlo?
¿alguien sabe algo de historia (que loco lo invento)?


pd: ¿porque Plaintext y no texto-plano?
"Cuando le di de comer a los pobres me llamaron santo, pero cuando pregunte porque los pobres eran pobres me dijeron comunista"

http://sosinformatico.blogspot.com/
http://www.publisnet.com.ve

MasterPunk

Cita de: bomba1990 en  8 Octubre 2010, 06:43 AM
primera pregunta:
vamos a ver el sifrado asimetrico genera dos claves ¿una que solo sirve para cifrar y la otra que solo sirve para descifrar? ¿o se requieren las dos para descifrar?

Cada uno de los que participemos en el taller tendremos dos claves: una privada y otra pública. Ambas se generarán a la vez y ambas son necesarias.
Una vez que tengamos las dos claves deberemos compartir entre nosotros únicamente la pública.
Es decir, si somos tres personas en el taller (Yo, persona2 y persona3) Yo tendré cuatro claves: Mi clave privada(1), mi clave pública(2), la clave pública de persona2(3) y la clave pública de persona3(4).
Si yo quiero enviarle un mensaje a persona2, deberé cifrar ese mensaje con la clave pública de persona2, y ese mensaje únicamente podrá ser descifrado con la clave privada de persona2 (que solo tiene él).
Si encambio yo encambio no quiero mandarle el mensaje a persona2, sino que quiero mandarselo a todos los miembros del taller deberé cifrar dicho mensaje con mi clave privada, y ese mensaje podrán desencriptarlo con mi clave pública todas aquellas personas que tengan dicha clave, es decir, los miembros del taller.

Espero haberme explicado bien porque es un poco lioso.

Salu2

APOKLIPTICO

@bomba1990: Me pusiste "sifrado" y despues pusiste "cifrado". Es con "c". Te voy a pedir también que trates de usar comas, puntos y mayúsculas, ya somos grandes como para andar escribiendo como si estuviesemos en primer grado.
Bueno a ver:
1) Vamos a ver el cifrado asimetrico genera dos claves: ¿una que solo sirve para cifrar y la otra que solo sirve para descifrar? ¿o se requieren las dos para descifrar?
Siendo que las "claves" son números, se podría utilizar, y de hecho se utiliza en algoritmos de firma electrónica, la clave privada para cifrar los datos, que luego se descifrarían con la clave pública. Sin embargo, en la mayoría de los algoritmos asimétricos, se utiliza la publica para cifrar y la privada para descifrar.

2) ¿como se logra esto?
Agustín si cifró su mensaje con la clave privada, va a poder descifrarla con su clave pública, ya que él tiene ambas claves. Osea, no es que cuando envía la clave pública deja de tenerla en su poder, envía una copia obviamente.

3) ¿quien le pone una clave de 1024bits?,  ¿el sistema debe autogenerarla?
El tamaño de la clave la elige el usuario, dependiendo de cuan seguro sea necesario el canal, o cuan paranóico sea el usuario, también hay que saber que cuanto mayor sea el tamaño de la clave asimétrica, más cargará el sistema cuando alguien quiera conectarse. Lo cual no sería problema si es para una conexión única, pero si es en un sitio web con https, podría sobrecargar el servidor.

4) ¿cuando empezeños podemos hacer primero uno pequeño solo para analizarlo mejor o hay alguno en internet para verlo?
No se que será "empezeños", pero supongo que quisiste decir "empezemos". Los algoritmos más conocidos (RSA, DSA, ElGamal, Diffie-Hellman, etc.) están en la web, ya sea en pseudocódigo, en algún lenguaje o explicados desde el punto de vista matemático. Ya los vamos a ver uno por uno.

5) ¿alguien sabe algo de historia (que loco lo invento)?
El primer algoritmo de criptografía asimétrica inventado, fue el RSA (de los autores Rivest, Shamir y Adleman), creado en 1977 por Ron Rivest, Adi Shamir y Len Adleman del MIT (Massachusetts Institute of Technologies).

@MasterPunk: Está bien la primera parte de tu explicación, pero si yo quiero mandar un mensaje cifrado a todos los miembros del taller, tendré que cifrar cada mensaje con la clave pública de cada uno de los miembros. Si yo lo cifro con mi clave privada, cualquiera va a poder descifrarlo, ya que mi clave pública, es (valga la redundancia) "pública", yo la tendría expuesta en algun lugar para que las personas me puedan mandar mensajes, como ocurre con PGP (Pretty Good Privacy) que lo veremos más adelante. Otra cosa, me pusiste "Desencriptarlo" acordate que esa palabra no existe, el correcto es "Descifrarlo". Sin embargo, escribis claramente, con signos de puntuación, mayúsculas y sin faltas de ortografía, asi que bien hecho!.

Un abrazo
APOKLIPTICO
AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.

braulio--

Me imagino que llegaremos a ver la criptografía desde un punto de vista matemático ¿no es así?

Y otra pregunta, ¿cada cuánto se irán sacando nuevos "fascículos" ? ¿Cualquiera del grupo podría escribir alguno? (esta última es porque me gustaría participar).

MasterPunk

#9
Cita de: braulio-- en  8 Octubre 2010, 17:31 PM
Me imagino que llegaremos a ver la criptografía desde un punto de vista matemático ¿no es así?

Y otra pregunta, ¿cada cuánto se irán sacando nuevos "fascículos" ? ¿Cualquiera del grupo podría escribir alguno? (esta última es porque me gustaría participar).

En la encuesta se decía que el taller consistía en crear un algoritmo, no en dar clases de criptografía; pero, APOKLIPTICO, tras ver que todos somos unos incultos y no tenemos suficientes conocimientos como para hacerlo, se ha visto obligado a enseñarnos primero para despues poder llevar a cabo el taller.

En la última línea del primer "fascículo" pone:
CitarCualquier duda que tengan, posteenla acá, cuando vea que no hay más preguntas, pongo el siguiente tema.
Rectifico: en la que era la última linea antes de que añadieran la licencia :P

¿Quieres aportar información? Seguro que todos te lo agradecemos, siempre y cuando no repitas cosas ya dichas anteriormente.

PD: si me equivoco en algo, porfavor, corregidme.