El algoritmo OTP me ha fascinado desde que me interese por la criptografía, permite de una forma sencilla implementar uno de los mecanismos más seguros y triviales para proteger nuestros mensajes. No se debe de confundir con el OTP (One-Time password) que es el que se usa como segundo factor de autenticación en la mayoría de plataformas.
En castellano «Libreta de un solo uso» según Wikipedia. Este algoritmo es uno de los más simples existentes en la actualidad al nivel de que se puede encriptar y desencriptar a mano sin necesidad de hacer operaciones costosas. Este algoritmo tiene 4 principios que deben de cumplirse a la perfección para considerarlo seguro; en el caso de que se cumplan, es irrompible ¡ni la fuerza bruta podría romperlo! es por esto que me gusta tanto.
Y cuando digo que es irrompible, es por que es IRROMPIBLE, ningún supercomputador con capacidad de calculo infinito podría hacerlo, ni tan siquiera AES ni RSA pueden competir contra el ¿por qué? Y si es tan seguro, ¿por qué no se utiliza en la actualidad?
¿Como funciona el algoritmo?
Los algoritmos de desplazamiento fueron muy utilizados en la antigüedad por la simplicidad de su mecanismo. Uno de los más conocidos es el cifrado César, que se basa en intercambiar las letras por la que este 3 posiciones antes en el alfabeto. Esto hace que la D se sustituya por la A, la F por la C… generando un texto incomprensible.
Aunque inicialmente fue efectivo, pronto se logró descifrar. La evolución natural fue el cifrado Vigenère, que también se basaba en la sustitución de letras, pero aplicando un desplazamiento diferente para cada una de ellas. Este disponía de una contraseña en donde cada letra daba dos parámetros, su desplazamiento en el alfabeto y su posición relativa en el texto. Veamos un ejemplo:
Vamos a limitar el alfabeto a los caracteres A, B, C, D. En donde cada una de ellos recibe un número por su posición.
- A -> 1
- B -> 2
- C -> 3
- D -> 4
Imaginemos que tenemos el texto «badabaca» y queremos cifrarlo con la contraseña «daba». El primer paso es repetir la contraseña tantas veces sea necesario para que tenga el mismo número de letras que el texto. En este caso la contraseña completa sería «dabadaba». Convertimos ambos textos a número, utilizando la tabla anterior, y sumamos los carácteres. Si la suma es mayor que 4, que es el tamaño de nuestro alfabeto, debemos de restarle 4 para que este dentro de nuestro alfabeto.
- Texto a cifrar: badabaca -> 2 1 4 1 2 1 3 1
- Contraseña: dabadaba -> 4 1 2 1 4 1 2 1 +
- Resultado: bbbbbbaa -> 6 2 6 2 6 2 5 2 -> 2 2 2 2 2 2 1 2
El resultado final sería 6 2 6 2 6 2 5 2 . Como el 5 y el 6 están fuera de nuestra representación le restamos 4 dando para el 6 un 2 y para el 5 un 1. ¡Tachan! Nuestro texto cifrado en este caso sería bbbbbbab, remplazando los números por las letras correspondientes.
¿Muy fácil no? Gracias a este cifrado las personas se pudieron comunicar de manera segura, sin que el mensaje llegara a ojos ajenas. Además, como no requería una máquina para hacer los cálculos cualquiera podía hacerlo manualmente.
Para desencriptar debes de hacer la operación opuesta. En vez de sumar, tienes que restar el criptograma a la contraseña, en el caso de que saliera un número por debajo de 1, debes de sumarle 4. Este caso será dejado para que el lector curioso experimente.
Están muy bien estos dos cifrados, pero ¿como es el algoritmo del cuaderno? Pues no es más que un cifrado Vigenere que tiene una contraseña tan larga como el texto a cifrar, por tanto no sería necesario repetir la contraseña. Y es por esto que se llama «Cifrado del cuaderno», por que era necesario apuntar la contraseña en dos cuadernos, cada persona se quedaba con uno de ellos.
Los 4 pilares
Este algoritmo se considera seguro si y solo si se respetan estos 4 principios. En el caso de que no, un externo podrá fácilmente romperlo.
- La contraseña debe de ser aleatoria: Puede parecer algo trivial, pero es un problema al que se exponen los ordenadores continuamente. Generar un texto aleatorio es complicado hasta para una persona. Aporrear el teclado no será suficiente…
- La contraseña debe de ser mantenida en privado: Este punto es fácil de cumplir. ¿para que iba a compartir la contraseña con quien no quisiera que lo leyera?
- La contraseña debe de ser igual de larga o mayor que el texto a encriptar: Es fundamental, si nos quedamos sin contraseña no podremos seguir encriptando el resto del texto.
- La contraseña no debe de reutilizarse: Una vez que se utilice debe de eliminarse. Utilizarla dos veces puede comprometerlo.
Algunas de estas restricciones son lógicas, otras no tanto. Vamos a verlas por separado y la importancia que tienen para mantener tus datos seguros.
La seguridad del algoritmo
Estos 4 principios le dan la robustez suficiente para que no sea posible encontrar la contraseña correcta. Y es que, una peculiaridad de este cifrado es que es posible encontrar una contraseña que de como resultado el texto que quieras. Por ejemplo, si tenemos el criptograma DDAA y queremos que el mensaje sea AAAA, podríamos calcular con operaciones simple que la contraseña es AADD. Esta característica, permite que no sea posible hacerle fuerza bruta, el método que rompe todos los algoritmos.
En otros algoritmos, la fuerza bruta se detiene cuando el resultado da un mensaje coherente. En cambio, con el algoritmo OTP es imposible saber cuando parar por que podemos encontrar muchísimas contraseñas «correctas».
Aun así, si no cumplimos los 4 principios es posible a través de la estadística calcular dentro de cual es la más probable.
La contraseña debe de ser aleatoria: En el caso de que no lo sea, el atacante podrá predecir que caracteres son más probables que se encuentren en ella y de esta manera, a través de análisis de frecuencias encontrar la correcta. Es más complejo de lo que parece, pero hay suficientes métodos descritos para conseguirlo eficazmente.
La contraseña debe de ser más larga que el texto a encriptar: Y es que, si la contraseña fuera más corta no se podría encriptar el texto completo, y más te vale que no la reutilices por que de nuevo la estadística jugaría en tu contra.
La contraseña no debe de reutilizarse: Como vimos en el cifrado Vigenere, si te quedabas sin contraseña la volvías a reutilizar. Esto es un grave problema de seguridad, pues si tenemos dos textos y sabemos que se ha usado la misma contraseña, será mas fácil encontrar una contraseña que de mensajes coherentes para ambos.
Conclusión
Como ves, el algoritmo OTP es uno de los más sencillos de aplicar, la mayoría de personas podrían hacerlo sin requerir ninguna máquina. Es por esto que fue tan usado antiguamente y por lo que me gusta tanto. Permitió comunicar de manera segura a muchas personas en momentos de guerra o crisis.
Aun así, plantea graves problemas de seguridad, siendo bastante complicado cumplir con los 4 pilares anteriormente mencionados.
Este algoritmo se quedo en desuso con el pasar de años con la entrada de algoritmos más sofisticados, siendo mucho más fáciles de usar y apropiados para el mundo interconectado en el que vivimos.
Deja una respuesta