• José Antonio Ces

El de la encriptación




Cuando estaba en la EGB (la eduación primaria actual) mi amigo Charlie se inventó (o lo importó de algún otro lugar) un lenguaje escrito que nos permitía pasarnos mensajes sin que el resto de la clase los entendiese. Consistía en cambiar las vocales por números (la “a” por el 1, la “e” por el 2 y así sucesivamente) e intercalar la sílaba “pa”, “pe”, etc. a continuación de cada sílaba real de la palabra, dependiendo de la vocal de ésta. Así, por ejemplo, para escribir “casa” lo haríamos como “c1p1s1p1”. Y “muñeca” sería “m5p5ñ2p2c1p1”. Y una frase entera como “Mi amigo es un fenómeno” sería “M3p3 1p1m3p3g4p4 2sp2 5np5 f2p2n4p4m2p2n4p4”.


Sin tener ni idea de ello, mi amigo Charlie y yo estábamos utilizando una encriptación simétrica en nuestra comunicación… ¡qué feliz es uno de niño!


Hablemos un poco sobre la encriptación para que cuando en próximas entradas aterricemos todo lo referente a las criptodivisas y a la tecnología que lo soporta, esto es el blockchain, no te pierdas.


¿Qué es la encriptación?


La encriptación es un mecanismo que fuerza la codificación de un mensaje en emisión para que sólo pueda ser entendido por el receptor del mismo. Y así, si alguien lo intercepta en el camino, no pueda entender lo que en él se dice. Y puede ser de dos tipos: simétrica o asimétrica. Te explico rápidamente la primera (la que utilizaba yo en el cole con mi amigo Charlie) y me paso rápidamente a la segunda que es la que se utiliza mayoritariamente hoy en día.


La encriptación simétrica, supone que emisor y receptor de una comunicación, poseen una clave que facilita la codificación de un mensaje para su emisión y la decodificación del mismo en su recepción. Dicha clave es única y sólo es conocida por el emisor y el receptor. De esta forma, la interceptación del mensaje por un tercero no significará el desvelado de la información que contiene porque éste será incapaz de descifrarla porque carece de la clave.


Es bastante sencillo. Pero la encriptación simétrica tiene algunos problemas. Me detengo en dos que considero son los más graves. El primero es que de alguna forma emisor y receptor deben conocer la clave, lo que fuerza la existencia de una comunicación alternativa que lo facilite y que, consecuentemente, estará sujeta al riesgo de que alguien la intercepte. El segundo tiene que ver con la posibilidad de que alguien intercepte el mensaje encriptado y, aunque carezca de la clave, sea capaz de descifrarlo. Si la clave de codificación no es muy compleja (como por ejemplo la que usábamos Charlie y yo) se podría inferir de la propia comunicación dejando el sistema completamente vulnerable.


Los problemas de la encriptación simétrica abren una alternativa basada en la asimetría que los elimina. Una alternativa cuyo punto de arranque se produce en 1976, y su utilidad llega hasta hoy soportando la mayoría de los métodos de encriptado y autenticación actuales siendo uno de los más conocidos. De hecho, es el mecanismo principal de seguridad que existe detrás de las criptomonedas. Por poner un ejemplo de moda ;)


Hablemos un poco de esta asimetría para que entiendas el mecanismo. Así comprenderás su fortaleza y el porqué de su ya larga vida.


La encriptación asimétrica se fundamenta en la existencia de dos claves diferentes, pero relacionadas: una privada y una pública. Su existencia permite que la codificación y la descodificación sean procesos que se ejecuten de manera independiente. Y esto proporciona al proceso una mayor seguridad.


Cada participante en la comunicación tendrá ese par de claves. Cada uno un par diferente. Dos claves que estarán relacionadas entre sí. Y es que una se genera una a partir de la otra. Una pública, a la que tendrá acceso cualquiera, y otra privada, que sólo su dueño podrá conocer. Ambas se utilizarán conjuntamente, de manera que, si una comunicación cualquiera se encripta con una de ellas, sólo se desencriptará con la otra.


¿Cómo funciona la encriptación asimétrica?


Hagamos una exposición práctica del manejo de ambas claves.


A quiere enviar un mensaje a B que sólo éste puede conocer. Para ello tomará la clave pública de B (a la que todos tenemos acceso) y la utilizará para encriptar el mensaje. Su desencriptación sólo podrá hacerse mediante la clave privada de B, que sólo es accesible por éste. De esta manera, aunque el mensaje cayese en manos de un tercero, al carecer de la clave privada de B, no podría desencriptarlo… ¿qué te parece?


Mola :)


Pero ahí no queda la cosa, porque este doble juego facilita no sólo la encriptación sino otro proceso ampliamente utilizado en el mundo digital. La autenticación o firma. Ya. Ya sé que este post es de encriptación, pero déjame que abra un pequeño paréntesis para contarte cómo se hace, porque es justo al revés que el proceso anterior.


A quiere enviar un mensaje a B de forma que éste tenga la certeza de que ha sido A quien se lo ha enviado. Para ello debe “firmarlo digitalmente”. Para ello A “encriptará” el mensaje a enviar, en vez de con la clave pública de B, con la propia clave privada de A. Y tanto el mensaje encriptado como la clave pública de A se enviarán a B. Un momento… pero si la clave pública de A va en el mensaje, cualquiera que lo intercepte podrá descifrarlo, ¿o no?


Efectivamente. Veo que lo has entendido. Pero es que me da lo mismo que se vea. Recuerda que lo que quería A era enviar un mensaje firmado, esto es, garantizando que ha sido él quien lo ha enviado. Si no lo hubiese enviado él, no podría haberlo encriptado con su clave privada y, por lo tanto, su clave pública no sería capaz de descifrarlo.


Un mensaje encriptado con la clave pública del receptor, proporciona un medio de cifrado de las comunicaciones, mientras que, si esta encriptación se hace utilizando la propia clave privada del emisor, facilitará que sus receptores validen su identidad. Firmen sus mensajes. Y es importante terminar diciendo que ambos procesos pueden utilizarse juntos, dentro de la misma comunicación, favoreciendo dos procesos: la firma digital o autenticación del emisor y el cifrado del contenido del mensaje para darle acceso al mismo sólo a su receptor.


La siguiente figura muestra ambos procesos en un mismo flujo.




El uso de la criptografía asimétrica es algo que se ha extendido a prácticamente cualquier comunicación digital. Por ejemplo, es el método que utiliza WhatsApp, Telegram o el correo electrónico, por poner algunos ejemplos. Pero también es un mecanismo necesario en todo lo que tiene que ver con las criptodivisas y su tecnología asociada, esto es, el blockchain. Dedicaré una entrada específica para hablar de esto, así que no le dedico más tiempo aquí.


Pero sí te voy a contar algo más sobre estas dos claves y su mecanismo de generación. No mucho, porque no es obvio, pero lo suficiente para que comprendas la seguridad que deriva del mismo.


La generación de las claves


Te decía antes que el par de claves que tiene cada usuario en un sistema de comunicación que utiliza criptografía simétrica para cifrar y/o firmar los mensajes, se construye de manera coordinada. Es obvio que, si se alternan en los procesos de cifrado y descifrado, algo tendrán en común ambas claves. Hablemos de este proceso. La creación del par claves arranca con la generación de un número aleatorio. A partir de ese número se genera la clave privada mediante una función hash dando lugar a un número de, por ejemplo, 256 bits.


¡ Alto ahí !


¿Qué es una función “hash”?


Buena pregunta. Te veo atento. Y es que este tipo de funciones tiene bastante que ver con la encriptación (y con el blockchain). Una función “hash” es un algoritmo o función que, a partir de uno o varios elementos de entrada (generalmente cadenas de texto), genera una salida (otra cadena) de longitud establecida y, a partir de la cuál es imposible obtener esa entrada en un proceso inverso.


¿Lo tienes?


Sigamos.


Pues bien. Ya tenemos nuestra clave privada de 256 bits. Ahora debemos calcular la pública. Y para eso debemos aplicar alguna otra función o algoritmo que genere una nueva clave (también de 256 bits, ¿por qué no?) a partir de la cuál sea imposible también hacer ingeniería inversa para calcular la clave privada. Esto evita que, aunque se conozca la función o algoritmo utilizado en la generación de esta clave pública, sea imposible ir hacia atrás en la búsqueda de la privada. Y esas funciones existen. Y por eso se generan las claves en este orden.


Son muchos los algoritmos que se pueden utilizar en este proceso, y suelen variar en función del uso. Pero más o menos todos tienen la misma lógica que conviene conocer, para ver que es completamente imposible hacer una marcha atrás desde la clave pública para recuperar la clave privada. Me vale cualquiera, pero como están tan de moda las criptomonedas, podemos hablar del ECDSA (Elliptic Curve Digital Signature Algorithm) que es el que utiliza Bitcoin, Ethereum y la mayor parte de los protocolos blockchain. Este tipo de funciones no son aritméticas (las que conocemos de las clases de matemáticas de toda la vida) sino que se realizan en una curva elíptica. En este tipo de curvas se pueden realizar dos operaciones solo: la suma y la multiplicación. De esta forma, si la clave pública se obtiene multiplicando en la curva elíptica una constante por nuestra clave privada, será imposible aplicar la operación inversa porque, sencillamente, no existe.


No está mal, ¿verdad? Pero esto es otra historia y te la contaré en otro momento. No es inmediato entender las operaciones en curva elíptica, y considero que por hoy en suficiente. Así que, como diría mi amigo Charlie...


¡ H1sp1t1p1 l5p52p2g4p4 !


6 visualizaciones

Entradas Recientes

Ver todo