La criptografía es un conjunto de técnicas matemáticas que nos permiten implementar mecanismos de seguridad. Hoy en día abarca mucho mas que solo esconder mensajes, que es como empezó. Hoy en día también incluye mecanismos para asegurar integridad, técnicas para el intercambio de claves, protocolos de autenticación, dinero digital, entre otras cosas.
Es utilizada para garantizar comunicaciones seguras, la protección de archivos en disco, autenticación de usuarios, la protección de contenido (DRM), firmas digitales. No construimos funciones criptograficas, pues toman muchos años en diseñar y garantizar su seguridad, la idea es que las conozcamos, sepamos los trade offs y cuando usarlas.
Criptosistema de Clave Privada
Tenes dos funciones, y con cualquier mensaje al pasarlo por la función lo podes convertir en un mensaje sin sentido. Esto sirve si:
- Nadie conoce las funciones de encoding y decoding
- Las funciones son conocidas por todos pero aceptan otro parámetro, llamado clave, que mantenemos secreto para que el adversario no pueda descifrar el mensaje
Un criptosistema debe ser seguro incluso si todo sobre el sistema, excepto la clave, es de publico conocimiento
- Principio de Kerckhoffs
Hay dos grandes aplicaciones para este tipo de criptografía: Comunicación entre dos personas físicamente separadas, donde se asume que la clave fue compartida anteriormente (Intercambio de Claves), y cuando una persona se quiere comunicar con sigo misma luego de un tiempo (por ejemplo, disk encryption), donde ahora compartir la clave es trivial, pues solo la debe conocer una persona, pero tiene que asegurarse una forma de recordarla o guardarla para utilizarla en el futuro.
Criptosistemas Históricos
Cifrado de Sustitución
Reemplaza un símbolo por otro, son identificables porque las propiedades estadísticas del lenguaje no se ven alteradas. Obteniendo la frecuencia estimada de cada símbolo en el lenguaje del mensaje, se calcula la frecuencia de cada símbolo en el texto cifrado, y asumiendo que los símbolos de mayor probabilidad se corresponden, tratamos de formar grupos de dos y tres letras comunes (el, la, de, las, los, etc en español)
Cifrado Vigenere
Es una substitution polialfabetica, dado que un mismo símbolo puede transformarse a diferentes. Se creyó por mucho tiempo que era seguro, porque destruye completamente las propiedades estadísticas del lenguaje del mensaje.
Para atacarlo, primero se debe determinar la longitud del bloque (la clave), y luego analizar la clave de cada bloque por separado. Aparecen n-gramas repetidos al transformar los mismos símbolos en la misma posición (Test de Kasiski):
- Buscar secuencias repetidas
- Calcular la distancia entre las secuencias
- La longitud de la clave es múltiplo del MCD entre las distancias halladas
Luego, determinamos estadísticamente las letras más probables en cada grupo, y estimamos las rotaciones que llevan a cada grupo a equipararse con las estadísticas del lenguaje. Probando las rotaciones, eliminamos caminos al encontrar combinaciones sin sentido.
Enlace al original
Criptografía Moderna
Históricamente, la criptografía era más un arte que una ciencia, pero en las ultimas décadas (especialmente después de la 2da guerra mundial), se empezaron a desarrollar y analizar los sistemas de forma más sistemática, para llegar a probar que son seguros. Para esto primero es necesario definir que es “seguro”, y varias de las pruebas están basadas en asumir la dificultad algorítmica de ciertos problemas matemáticos (en general, problemas NP), pero estas suposiciones son explicitas y precisas. Al fin y al cabo la diferencia con la Criptografía Clásica es el énfasis en definiciones, suposiciones y pruebas.
Random
Es muy usado en la criptografía el concepto de aleatoriedad, como elegir una parte random, o elegir una key random. En general simplemente asumimos que se tiene acceso a una fuente de bit random independientes y sin bias, pero en la practica existe un proceso para generar números aleatorios: Primero, se obtiene una pool de data con alta entropía, y luego se la procesa para generar una secuencia de bits casi independientes y sin bias.
Se puede obtener data impredecible mediante inputs externos, como el delay entre eventos de network, accesos a disco, keystrokes o movimientos del mouse, etc. En general estos métodos no son uniformes, pero si se obtienen suficientes datos se espera que la pool de data resultante tenga suficiente entropía. Hay métodos más sofisticados, que incorporan la generación de números random en el hardware, basándose en ruido térmico o decay radioactivo, e incluso algunos procesadores tienen una instrucción especifica para esto. Luego, el proceso para obtener bits uniformes de la pool no es trivial.
Usar un generador que no es realmente random puede llevar a que un criptosistema sea vulnerable, y solo hay que utilizar los que sean específicamente diseñados para criptografía.
