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





viernes, 26 de junio de 2015

Secreto (casi) Perfecto Hacia Adelante

En nuestro día a día hacemos un número creciente de comunicaciones a través de canales seguros, principalmente a través del protocolo TLS. Esto implica que la información que viaja por las redes lo hace cifrada, de forma que si alguien intenta pinchar nuestras comunicaciones solo obtendrá datos sin sentido. Sin embargo, hay fuertes indicios de que este tipo de intromisiones se están llevando a cabo en la práctica.

Antes de seguir, haremos una breve descripción del modo en el que dos ordenadores se comunican a través de un canal seguro. En general, el proceso consta de dos fases. La primera consiste en negociar una clave única y secreta (denominada clave de sesión), y la segunda es la comunicación propiamente dicha, usando la clave recién acordada. Quien desee penetrar en nuestras comunicaciones, necesitará por tanto romper el método de cifrado de la segunda fase (algo extremadamente difícil, si se usa una buena técnica), o bien atacar de alguna forma el método de negociación de clave que se produce al principio.

En general, hay dos tipos de métodos para lograr este propósito. Ambos usan información pública, a disposición de todo el mundo, e información secreta propia de cada uno de los interlocutores, que deberá ser mantenida en secreto.

Uno de los dos métodos anteriormente citados haría uso de las claves públicas y privadas de los interlocutores para acordar la clave de sesión. Este método tiene un grave inconveniente: nuestras claves privadas pueden ser comprometidas en el futuro, y permitir a un atacante que hubiera tenido la precaución de grabar nuestras conversaciones cifradas, recuperar entonces las claves de sesión correspondientes y acceder al contenido de las comunicaciones.

El otro tipo de métodos, cuyo principal ejemplo es el algoritmo de Diffie-Hellman, hace uso de una información secreta generada expresamente para cada comunicación, que luego es eliminada, volviendo imposible recuperar las claves de sesión en el futuro a partir de grabaciones. Esta propiedad es lo que se conoce como Secreto Perfecto Hacia Adelante (Perfect Forward Secrecy). Obviamente, aunque es mucho más recomendable emplear este método en nuestras comunicaciones, recientes revelaciones nos hacen sospechar que en la práctica no está resultando tan seguro como se esperaba.

El problema no está en el método en sí, sino en que, por razones de eficiencia, la información pública que se usa se reduce a un número pequeño de valores distintos. Los métodos para deducir la información secreta (que sí es diferente en cada caso) emplean una fase de cálculos previos bastante costosos, pero que depende únicamente de la información pública, por lo que un atacante con los suficientes recursos (¿hace falta que diga quién?) podría dedicarse a realizar esos cálculos para ese conjunto de valores públicos más usados y así espiar las comunicaciones.

Si a esto unimos la posibilidad que brindan los protocolos de emplear valores menos seguros, es decir, que requieren menos cálculos para ser rotos, incluida en su día para cumplir con la legislación de hace un par de décadas, que prohibía la exportación de software criptográfico fuerte fuera de los EE.UU., tenemos la tormenta perfecta. Un grupo de investigadores ha publicado un interesante artículo donde explican un método para engañar a los ordenadores, obligándoles a usar esas claves menos seguras, y han estimado el índice de éxito que obtendría una organización con los suficientes recursos a la hora de pinchar las comunicaciones. Por si esto fuera poco, lo expuesto en el artículo es coherente con determinadas filtraciones que se han producido recientemente.

¿Significa esto que el Secreto Perfecto Hacia Adelante no existe o es inútil? En absoluto. De hecho, los principales productos que emplean estos métodos ya han sido (o están siendo) parcheados tanto para no permitir el uso de valores públicos considerados poco seguros, como para emplear en el futuro un abanico mayor de valores, y además más seguros.


lunes, 18 de mayo de 2015

La Seguridad es un Estado de Ánimo

Todos queremos que las cosas nos salgan bien, y dedicamos un esfuerzo significativo para conseguirlo. Seguro que muchos de ustedes cuidan su alimentación (o lo intentan), hacen ejercicio (o lo intentan), respetan las normas de tráfico (o lo intentan), gastan menos de lo que tienen (o lo intentan)... Y todo eso sabemos a ciencia cierta que, por desgracia, no garantiza nada: las personas que cuidan mucho su salud sufren enfermedades, aquellas que respetan las normas de tráfico tienen accidentes, e incluso quienes tratan de no malgastar, a veces también se arruinan.
¿Significa esto que las medidas que tomamos para que nos vaya mejor en la vida son inútiles? Por supuesto que no, pero todos sabemos, asumimos y aceptamos que no eliminan por completo los riesgos. Sin embargo, sabemos que los reducen, muchas veces de forma muy significativa. 

Ante esta incertidumbre inherente a todos los aspectos de la vida (tanto física como digital), hay diferentes tipos de reacciones. Hay quienes deciden no tener en cuenta los riesgos, y se lanzan a cometer imprudencias como si la cosa no fuera con ellos. Otros se dejan llevar por el miedo, y acaban invirtiendo una gran parte de su vida en tomar precauciones frente a sucesos que jamás van a ocurrir. Pero existe un tercer tipo, quizás el más peligroso de todos, que primero piensa que nada puede salir mal, y si luego ocurre algo malo, siempre culpa a los demás, sin incluir jamás en la ecuación su propia imprudencia, o la simple mala suerte.

La seguridad no es algo que se pueda comprar. Colocar un sistema de alarma en nuestra casa puede ayudarnos a vivir más tranquilos, pero no nos da la certeza absoluta de que nadie va a entrar a robar. Instalar un antivirus, un cortafuegos o un filtro para webs maliciosas reduce las probabilidades de que nuestro sistema sufra un ataque, pero no lo elimina por completo.

Por desgracia, durante mucho tiempo la seguridad se ha vendido como un producto, algo que se puede conseguir mediante una simple transacción comercial. Sin embargo, la seguridad es un proceso de vigilancia y análisis constante, algo que estamos acostumbrados a aplicar en nuestra vida diaria, pero que en el mundo de los ordenadores nos suele costar más trabajo aplicar. ¿Le abriría usted la puerta de su casa a un desconocido que llama al timbre, asegurando que, si le abre, le regalará una tablet?
La auténtica sensación de seguridad, completamente diferente de aquella tan falsa y cómoda que se obtiene mirando para otro lado, surge de la experiencia y del esfuerzo constante para conocer y corregir los riesgos que tiene nuestro sistema. Y si ocurre un incidente, nos dará la certeza de que tuvo lugar a pesar de que hicimos todo lo que estaba en nuestra mano para evitarlo.


Mudanza

A partir de ahora, este será el lugar donde pienso publicar mis reflexiones. Esto no suele ocurrir a menudo ya que, en la mayoría de los casos, encuentro a gente que, expresándose mejor que yo, dice exactamente lo que pienso. Pero siempre quedan momentos y temas sobre los que considero interesante dar mi punto de vista, bien porque no encuentre a nadie que lo haya hecho ya, bien porque considere que conviene insistir en tal o cual tema.

Uno de mis mejores maestros de la EGB, allá por los 80, solía decir que hay que intentar saber un poco de todo. Pienso que esa es la base sobre la que se sustenta el sentido crítico, el criterio personal y, en consecuencia, la capacidad de cada uno para decidir por sí mismo. Eso que llaman libertad. Por desgracia, el mundo que nos ha tocado vivir ha alcanzado tal nivel de complejidad que, sabiendo solo un poco, acabamos llegando a conclusiones demasiado superficiales, frecuentemente erróneas. Conviene, pues, conocer la visión de aquellos que saben algo más que los demás sobre cada tema, no para seguirlos de manera acrítica, sino para tener mejor material con el que sacar nuestras propias conclusiones. Modestamente, creo que hay temas sobre los que tengo conocimientos suficientes como para que mis reflexiones puedan ser útiles. En cualquier caso, no se fíen de nadie, especialmente de mí.

También he decidido trasladar la página de descarga de mi libro Criptografía y Seguridad (planeo eliminar "en Computadores" para próximas ediciones) a este sitio. Tengo material suficiente para nuevos capítulos, y conforme el tiempo me lo vaya permitiendo, iré preparando una nueva versión.

Espero no aburrirles demasiado.