jueves, 7 de diciembre de 2023

Criptografía y Seguridad versión 5-3.0.0

Nueva versión del documento. Esta vez he reorganizado un poco la descripción del algoritmo RSA.

[Actualización del 15 de diciembre de 2023]. Estoy reescribiendo la parte de computación y criptografía cuánticas, ya que ha quedado del todo obsoleta. Espero poder publicarla pronto.

viernes, 11 de febrero de 2022

Criptografía y Seguridad en Computadores versión 5-2.0.1

Como de costumbre, sigo añadiendo pequeñas (y a veces no tan pequeñas) actualizaciones a mi libro, principalmente para corregir deficiencias encontradas, o para añadir nuevo contenido que imparto en mis asignaturas.

jueves, 7 de febrero de 2019

Nueva edición de Criptografía y Seguridad en Computadores

Llevo ya un par de años impartiendo clases de Criptografía en el Máster en Seguridad Informática de la Universidad de Jaén. Como es lógico, he tenido que elaborar material actualizado para esta asignatura, ya que los contenidos de la 4ª edición de mi libro se quedaban cortos.

Este material nuevo no solo incluye nuevas técnicas, sino que amplía y mejora muchos de los tópicos ya tratados en versiones anteriores. Por lo tanto, para integrarlo de forma adecuada, he hecho una revisión general de los contenidos, introduciendo múltiples modificaciones, que espero hagan el libro más compacto, completo y comprensible.

Creo que el nivel de madurez de esta obra es lo suficientemente alto como para considerarla definitiva, en el sentido de que ya no considero necesario introducir grandes modificaciones a la misma en el futuro. 

Espero que la disfruten

lunes, 17 de septiembre de 2018

El diablo está en los detalles

Un conocido dicho anglosajón afirma que el diablo está en los detalles, y viene a advertirnos de que, en no pocas ocasiones, son las pequeñas cosas, a las que solemos dar poca importancia o directamente ignoramos, las que pueden convertir cualquier empresa en un éxito o un fracaso.

Con la criptografía ocurre algo muy parecido. La mayor parte de su utilidad radica en garantizar que no se puedan hacer determinadas cosas con la información, fundamentalmente alterarla o acceder a ella de manera fraudulenta, y en este sentido las matemáticas se han convertido en una herramienta fundamental para lograr estos objetivos. Por suerte, los razonamientos matemáticos son lo suficientemente rigurosos como para saber, sin temor a equivocarnos, cuándo se cumple esta o aquella propiedad. Y esto hasta el punto de poder identificar cosas que intuimos ciertas, pero que hemos logrado probar que jamás podremos demostrar por completo.

Pero ese no es el problema, ni los detalles de los que quiero hablar en este post. Hoy por hoy, los fundamentos matemáticos de la criptografía gozan de muy buena salud, y apenas son cuestionados más allá del sano escrutinio académico que permite refinar nuestro cuerpo de conocimiento, y avanzar a la ciencia en general.

Hoy me quiero centrar en el que me atrevería a calificar como el principal problema de la criptografía a día de hoy: las implementaciones. En el idealizado mundo del papel o la pizarra, las ecuaciones siempre funcionan y las propiedades siempre se cumplen, pero a la hora de trasladar estos conceptos al mundo real, de codificarlos como instrucciones que tienen que ser ejecutadas por un microprocesador, dentro de una arquitectura determinada, en un contexto físico concreto, es donde aparecen esos detalles que pueden arruinar nuestro sistema. Y hay que reconocer que la imaginación de quienes buscan esos pequeños resquicios no conoce límites, habiendo logrado dar al traste con más de un sistema completamente seguro sobre el papel.

Los llamados canales laterales son unos de los más molestos chivatos que podemos encontrar en un sistema informático. Se han desarrollado métodos que permiten recuperar claves de cifrado mediante el análisis del consumo energético del hardware, o de las emisiones térmicas, electromagnéticas, acústicas, etc. que produce cuando ejecuta nuestros algoritmos. En este caso, el verdadero enemigo suelen ser los mecanismos de optimización que colocamos nosotros o, peor aún, que se incorporan de forma automática cuando se compila o se ejecuta el código, sin que podamos hacer mucho al respecto. Con el objeto de reducir los requerimientos computacionales (tiempo y memoria) de nuestro algoritmo, lo que se hace en muchos casos es acentuar las diferencias, observables desde el exterior, que se producen cuando se ejecuta el mismo con diferentes valores de entrada, dando involuntariamente información sobre estos a un observador malicioso.

Y es que el tema de la seguridad es siempre global, y debe ser analizado desde un punto de vista lo más amplio posible. En caso contrario, ese diablo que se esconde en los detalles acabará jugándonos una mala pasada.

jueves, 7 de julio de 2016

Seguridad de la Información en un Mundo Altamente Conectado

¿Desde cuándo se usan técnicas de cifrado para proteger la información? ¿Qué es un Bitcoin, y cuál es la tecnología que lo sustenta? ¿Cómo se las apañan los hackers para infiltrarse con tanta facilidad en los sistemas, si es que realmente lo hacen? ¿Estoy yo amenazado? ¿Puedo realmente protegerme? ¿Merece la pena siquiera preocuparse por ello?

A partir del 16 de agosto, tendré el privilegio de coordinar un curso de verano en la Universidad Internacional de Andalucía, sede Antonio Machado de Baeza, titulado Seguridad de la Información en un Mundo Altamente Conectado. Contaremos con la participación de algunos de los mayores expertos en Criptografía, Seguridad y sus aplicaciones, y realizaremos talleres donde pondremos en práctica muchas de esas cosas que hacen los hackers.

La intención del curso no es apabullar a la gente con intrincadas expresiones matemáticas o arcanos procedimientos que, a modo de fórmulas mágicas, permitan realizar cosas, digamos, poco éticas. Por el contrario, pretendemos dar una visión sensata y ajustada a la realidad sobre lo que implica estar conectados todo el tiempo, sobre las ventajas, dificultades, retos y, sobre todo, oportunidades, que ello supone para los expertos, las empresas y, cómo no, el ciudadano de a pie.

Al fin y al cabo, se trata de un curso de verano, en el que combinaremos sesiones de marcado carácter divulgativo, donde se verá que esto de la Seguridad de la Información es algo mucho más antiguo de lo que la gente se piensa, con otras más teóricas, aunque sin perder de vista las aplicaciones.

domingo, 24 de enero de 2016

20 años no es nada

Ya han pasado 20 años desde que me hice cargo de la asignatura de Criptografía y Seguridad en Computadores, en la antigua Ingeniería Técnica en Informática de Gestión, impartida en la Escuela Politécnica Superior de Jaén. Por aquel entonces, Internet apenas estaba empezando a experimentar el crecimiento explosivo que la ha llevado a ser, entre otras cosas, una fuente inagotable de información -y, lamentablemente, ruido- sobre cualquier tema. La poquísima información disponible sobre Criptografía se encontraba por aquel entonces en un puñado de libros, casi todos ellos en inglés. Justo antes de encargarme de la asignatura antes mencionada, tuve la oportunidad de participar en la elaboración de una colección de apuntes que editaba la propia Universidad de Jaén. Se trataba de un buen comienzo, pero resultaba insuficiente para una disciplina tan dinámica, y no era viable llevar a cabo sobre ella las actualizaciones imprescindibles que mantuvieran su utilidad año a año. 

En estas condiciones, decidí elaborar una nueva colección de apuntes, en formato exclusivamente digital y partiendo esta vez de cero, lo cual me permitiría llevar a cabo actualizaciones frecuentes para mantener su vigencia. Esa colección fue creciendo y tomando forma hasta que alcanzó un estado razonablemente bueno como para ser usada como texto base en mi docencia. Fue entonces cuando, casi por casualidad, me encontré en la página de Kriptópolis una referencia a la antigua colección de apuntes, en la sección de recursos sobre Criptografía en castellano. Así que les envié este nuevo documento, ofreciéndolo gratuitamente para su descarga. Al fin y al cabo, era fruto de un trabajo ya remunerado por mi Universidad. La respuesta del público fue increíblemente positiva, y el número de comentarios, felicitaciones y aportaciones para mejorarlo me animó a seguir adelante con esta obra. 

Con el tiempo mi labor, tanto docente como investigadora, se ha ido diversificando. Esta circunstancia, unida a la progresiva estabilización de los contenidos del libro, ha hecho que las actualizaciones sean cada vez menos frecuentes. Pero este proyecto sigue vivo. Al fin y al cabo me ha ayudado a conocer a tanta y tan buena gente, me ha abierto tantas puertas y, por qué no decirlo, le tengo tanto cariño, que aunque desde los puntos de vista de mi carrera profesional o económico me ha aportado bastante poco (mención aparte merecería algún caso de referencias extensas en libros comerciales, sin citarme como fuente inspiradora), que acabo volviendo sobre él cada cierto tiempo, para corregirle una frase allí, aclararle un párrafo allá, o añadirle algún contenido nuevo.

jueves, 15 de octubre de 2015

Jugando a los Dados

En muchas aplicaciones relacionadas con la seguridad es necesario generar información que no pueda ser adivinada por nuestros adversarios. Por ejemplo, cuando se crea un canal de comunicación seguro, protegido mediante algún algoritmo de cifrado tradicional, se emplea una clave de usar y tirar, llamada clave de sesión, que será válida solo para ese canal en concreto; si estamos creando un par de claves asimétricas, tendremos que emplear en el proceso unos parámetros únicos. Un atacante que fuera capaz de replicar de manera más o menos fiable esos valores, podría acceder a nuestras comunicaciones, incluso en el caso de que empleemos buena Criptografía.

Para obtener información que no pueda ser adivinada por otras personas necesitamos de los llamados generadores aleatorios. No obstante, existen diferentes tipos de generadores, en función de las propiedades que tengan los datos que se obtienen con cada uno de ellos. La primera gran distinción que podemos hacer es entre generadores pseudoaleatorios, y generadores aleatorios.

Los generadores pseudoaleatorios son aquellos que producen secuencias de valores a partir de una información inicial (llamada semilla). Para un mismo valor de la semilla, siempre se genera la misma secuencia. Muchos de estos generadores (como por ejemplo los congruenciales lineales, presentes en la mayoría de los lenguajes de programación) no están diseñados para aplicaciones criptográficas, por lo que únicamente generan secuencias que se comportan como si fueran aleatorias desde un punto de vista meramente estadístico. Por desgracia, con ellos resulta relativamente fácil deducir la totalidad de la secuencia a partir de un pequeño fragmento de la misma, por lo que si un atacante descubriera un valor que se ha empleado en el pasado, podría calcular cualquier otro valor, pasado o futuro.

Para que un generador pseudoaleatorio sea útil desde el punto de vista de la Criptografía, debe resultar indistinguible de un generador verdaderamente aleatorio para todos aquellos que desconozcan la semilla. Esto se traduce esencialmente en que, en ausencia de la semilla, la observación de un fragmento arbitrario de la secuencia no permite adivinar otro fragmento cualquiera (salvo que se prueben todas las semillas posibles, pero ese caso no cuenta, ya que su número es tan enorme que esa posibilidad queda fuera de cualquier computador o red de computadoras). Estos generadores, denominados criptográficamente aleatorios, pueden ser empleados incluso como base de un sistema de cifrado, pero de eso ya hablaremos otro día.

Los generadores aleatorios propiamente dichos carecen de semilla, y deben comportarse como si lanzáramos unos dados: las secuencias generadas sencillamente no pueden reproducirse. Por desgracia, las computadoras son máquinas deterministas, por lo que no se pueden producir secuencias verdaderamente aleatorias sin echar mano de elementos externos. Ya sea a través de hardware específico, a través de la actividad del usuario, o de cualquier elemento cuyo comportamiento pueda considerarse impredecible (microvariaciones en los tiempos de acceso a las pistas del disco duro, actividad de la red, etc.), el ordenador necesita emplear fuentes de entropía externas.

Pero de nada sirve tener unos dados, si esos dados están cargados. Si nuestra fuente de aleatoriedad genera unos u otros valores con diferentes probabilidades, aunque en efecto la secuencia sea aleatoria, un atacante podría realizar su búsqueda empezando por los valores más probables, reduciendo considerablemente el esfuerzo computacional promedio necesario para adivinar los valores de nuestro generador. Por eso no solo es importante  disponer de fuentes de aleatoriedad, sino que de alguna manera tenemos que limpiarlas para conseguir secuencias que sean aleatorias (impredecibles) y equiprobables (para que no se pueda priorizar una hipotética búsqueda).

La generación de números aleatorios es una tarea tan delicada como importante en aplicaciones relacionadas con la Seguridad. Llevarla a cabo incorrectamente puede hacer que nuestro sistema sea completamente inseguro, aunque luego utilicemos técnicas criptográficas fuertes