Taller: Criptografía asimétrica.

(1/26) > >>

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: Wikipedia

La 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: Wikipedia

Los 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.

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.

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

APOKLIPTICO:
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.

Navegación

[0] Índice de Mensajes

[#] Página Siguiente