El cifrado DES es un algoritmo de clave simétrica para el cifrado de datos digitales. Aunque la longitud de clave es tan solo de 56 bits (lo que lo hace demasiado inseguro para las aplicaciones), ha sido muy influyente en el avance de la criptografía.
Cómo funciona DES
La encriptación comienza con una permutación inicial de 64 bits de entrada. Estos bits se dividen entonces en dos mitades de 32 bits llamadas L y R. La encriptación procede entonces a través de 16 rondas, cada una de ellas utilizando las partes L y R existentes, y una subclave. La R y las subclaves se procesan en una función f, y la salida de la función f es exclusiva o se combina con la parte L existente para crear la nueva parte R. La nueva parte L es simplemente una copia de la parte R entrante. En la ronda final, las partes L y R se intercambian una vez más antes de la permutación final que produce el bloque de salida.
El desencriptado es idéntico al cifrado, excepto que las subclaves se utilizan en el orden contrario. Es decir, la subclave 16 se utiliza en la ronda 1, la subclave 15 se utiliza en la ronda 2, etc., terminando con la subclave 1 siendo utilizada en la ronda 16.
La función f
La función f mezcla los bits de la porción R usando la subclave de la ronda actual. Primero el valor de R de 32 bits se expande a 48 bits usando una permutación E. Ese valor es entonces o-exclusivo se excluye con la subclave. Los 48 bits se dividen entonces en ocho trozos de 6 bits, cada uno de los cuales se introduce en una caja S que mezcla los bits y produce una salida de 4 bits. Esas salidas de 4 bits se combinan en un valor de 32 bits y se permutan una vez más para producir la salida de la función f.
Generación de subclaves
Para generar las subclaves, comience con la clave de 56 bits (64 bits si incluye los bits de paridad). Estos se permutan y se dividen en dos mitades llamadas C y D. Para cada ronda, C y D se desplazan cada uno hacia la izquierda circularmente uno o dos bits (el número de bits depende de la ronda). La subclave de 48 bits es entonces seleccionada de los actuales bits C y D.
Implementación
Preparación
Se realizó una investigación sobre las librerías de JavaScript más populares de encriptación en el mercado, y la comunidad de software libre apuesta más por CryptoJS que disponible de una media de 250.000 descargas al día. El cual posee una implementación de DES que se adapta a las necesidades del proyecto. La documentación es accesible y se encuentra en línea.
Prueba de concepto
Para las pruebas de concepto con la librería, se realiza un código de ejemplo que permite la evaluación mediante un software llamado RunJS.
Ambiente
Se determinan los siguiente elementos para el desarrollo de la aplicación web.
Framework de desarrollo
Para el desarrollo se determina utilizar VueJS como framework para facilitar el la puesta en marcha de la página web.
Framework visual
Para el apartado visual se utiliza un framework de CSS llamado TailWindCSS para adaptar el apartado gráfico de la aplicación, es fácilmente adaptable a VueJS y de rápida implementación.
Repositorio de código
Servidor de implementación
Para respaldar el código y conectarlo a una herramienta de despliegue continuo se establece Github como repositorio principal
Para hostear la aplicación, se utiliza un sistema que permite publicación gratuita y automática llamado Netlify, el cual es perfecto para la magnitud de este proyecto.
Algoritmos
Con las herramientas escogidas y configuradas, se realiza la implementación de los dos métodos principales.
Encriptación
Se encripta el mensaje con la contraseña y se extraen los valores salt, iv, y texto encriptado en formato ascii
encrypt() {
var encrypted = CryptoJS.DES.encrypt(message, password)
var salt = encrypted.salt.toString()
var iv = encrypted.iv.toString()
var ascii = encrypted.toString()
}
Desencriptación
La desencriptación se procede de la misma manera, con la diferencia que el resultado se presenta en formato hexadecimal por lo que hay que transformarlo en formato ascii para mostrarlos al usuario
decrypt() {
var hex = CryptoJS.DES.decrypt(message, password)
var ascii = hex.toString(CryptoJS.enc.Utf8)
}
Resultado final
La implementación se complementa con retoques en el apartado gráfico que permite al usuario interactuar de una manera más fácil con el programa y el despliegue se realizó en el dominio https://melvinsalas-des.netlify.app disponible al público.
El proceso de encriptado muestra tanto el resultado ASCII para que puede ser copiado como el salt utilizado y el IV.
El proceso de desencriptado permite conocer el resultado con solo saber el texto y la clave.