Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Universidad Nacional Autónoma de México Facultad de Ingeniería Criptografía Grupo: 02 - Semestre: 2023-2 Tarea: El diseño de ChaCha20. Fecha de entrega: 02/03/2023 Profesora: Dra. Rocío Alejandra Aldeco Pérez Alumno: Téllez González Jorge Luis Facultad de Ingeniería Criptografía______________________________________________________________________________________________________________ Introducción El cifrado en �ujo es una de las técnicas modernas desarrolladas en el ámbito de la criptografía que, a diferencia del cifrado en bloques que toma al texto en blanco y lo divide en “bloques” de igual tamaño, este toma completamente el texto en blanco y lo cifra bit por bit de forma contínua hasta que todo el archivo se encuentre cifrado. Para llevar este proceso a cabo, se requiere el uso de una función con características aleatorias que permita generar una secuencia binaria su�cientemente larga y con la menor cantidad de lapsos de repetición posibles para realizar operaciones XOR bit por bit con el texto a cifrar. Aunque este enfoque resulta su�ciente si consideramos a la función completamente aleatoria y sin ningún patrón identi�cable, en la práctica es imposible computacionalmente generar una secuencia de tales características por completo. Por ello, generalmente se recurre a la secuencias pseudoaleatorias, que cumplen en parte con las características anteriormente mencionadas, pero debido a que no pueden ser in�nitas y sin repeticiones, pueden resultar en problemas graves de seguridad si un atacante logra encontrar patrones en las secuencias que le permitan llevar a cabo un ataque criptográ�co por análisis frecuencial. ChaCha20 es un cifrador en �ujo con una popularidad creciente debido a su metodología para abordar este problema característico del cifrado en �ujo. Este algoritmo fue diseñado por Daniel J. Bernstein en 2008 como una mejora del antiguo Salsa20. Su implementación se ha visto popularizada por el uso extenso que Google le da al momento de implementarlo en sus protocolos de comunicación segura vía Internet (SSL/TLS). Figura 1. Daniel J. Bernstein En la siguiente tarea se abordan brevemente las características de ChaCha20, su funcionamiento y los intentos de ataque a este algoritmo criptográ�co. 2 Facultad de Ingeniería Criptografía______________________________________________________________________________________________________________ Desarrollo ¿Cómo funciona ChaCha20? ChaCha20 es un cifrador en �ujo que, en esencia, funciona de forma semejante al esquema básico de un cifrador de estas características: cifrado bit por bit empleando una función XOR. Sin embargo, este algoritmo introduce parámetros adicionales para considerar las debilidades inherentes del uso de funciones pseudoaleatorias: ● Clave: cadena secreta que se usa como una seed para la generación de la secuencia pseudoaleatorias que se usará para aplicar la operación XOR con el archivo a cifrar. ● Nonce (Number Used Once): número arbitrario que se utiliza como factor de aleatoriedad y como identi�cador único de una sesión de cifrado y comunicación. Este valor se descarta posterior a su uso. ● Número de bloque: identi�cador de un bloque usado para cifrar una parte del archivo en especí�co. Figura 2. Estructura básica de ChaCha20. Figura 3. Funcionamiento de ChaCha20: la secuencia se opera con XOR bit a bit con el mensaje .𝑘 𝑛 𝑚 𝑛 3 Facultad de Ingeniería Criptografía______________________________________________________________________________________________________________ Como se puede observar en la Figura 3, en esencia el algoritmo sigue el patrón de funcionamiento del cifrador en �ujo típico por medio de un XOR; generando una salida cifrada bit por bit. El funcionamiento interno de mayor complejidad del mismo está en la generación de secretos: la secuencia pseudoaleatoria con la que se opera. En principio, el algoritmo recibe las entradas mencionadas anteriormente y las acomoda en un arreglo matricial de 4x4 donde cada celda contendrá un valor de 32 bits por un total de 512 bits. En la primera �la siempre se colocará una constante determinada por la forma binaria de la cadena “expand 32-byte k”, y posteriormente se colocarán los parámetros recibidos de la siguiente manera: Figura 4. Arreglo matricial del KSG. Con la matriz de�nida, a continuación se realizará un procedimiento para mezclar en una serie de rondas todos los bits del arreglo de forma que este sea resistente a un atacante externo que intente utilizar cualquier técnica de criptoanálisis conocida; a este procedimiento se le conoce como un round o una ronda y consiste en lo siguiente: ● Sumas en mod 32. ● Rotaciones por desplazamiento de bits. ● Operaciones XOR. En total, ChaCha20 realiza un total de 20 rondas antes de enviar la salida y operar con el texto en blanco. 10 de estas rondas se realizan con los valores binarios de la matriz en forma columnar y las otras 10 se realizan en forma diagonal. A continuación se muestra la forma en que ChaCha20 considera lo anterior para realizar las rondas: 4 Facultad de Ingeniería Criptografía______________________________________________________________________________________________________________ Figura 5. Arreglos en columna y diagonal para las rondas de ChaCha20. A continuación, se muestra el siguiente diagrama que ejempli�ca las operaciones realizadas durante la primera ronda: Figura 6. Función de generación de secretos de ChaCha20. 5 Facultad de Ingeniería Criptografía______________________________________________________________________________________________________________ Empezando con la primera ronda de ChaCha20 con una columna, se realizarán a continuación las siguientes operaciones: 1. Se toma a y b y se suman entre sí, guardándose el resultado en a. 2. El resultado de a+b se toma y se realiza un XOR con d. 3. Lo obtenido anteriormente se desplaza un total de 16 bits a la izquierda. A esto lo llamaremos .𝐷 16 4. Ahora se sumará con c y se guardará allí.𝐷 16 5. Se aplica un XOR entre ( ) y b.𝐷 16 + 𝑐 6. El resultado del paso anterior se desplaza un total de 12 bits a la izquierda. Lo anterior se llamará .𝐵 12 7. Se suma a y , y se guarda en a.𝐵 12 8. Se aplica un XOR entre ( ) y d.𝐵 12 + 𝑎 9. El resultado se desplaza 8 bits a la izquierda y se guarda en d. Se llamará 𝐷 8 . 10. se suma con c y se guarda el resultado en c.𝐷 8 11. Se aplica un XOR entre ( ) y b.𝐷 8 + 𝐶 12. El resultado anterior se desplaza 7 bits a la izquierda y se guarda en b. Aunque en teoría al aplicar las operaciones de forma inversa es posible recuperar el arreglo original de entrada a la matriz, ChaCha20 evita este problema aplicando una suma entre el bloque original, palabra por palabra, a toda la matriz tras haberse realizado cada una de las 20 rondas. Debido a que el atacante no conoce los valores de la matriz original, le será imposible conocer el otro elemento de la suma (los bloques de la matriz original) y, por tanto, no podrá revertir las operaciones realizadas. ¿Cuáles son sus ventajas? El diseño de Bernstein se basa en un diseño ARX (Addition, Rotation, XOR) que, pese a usar operaciones elementales, permite llevar a cabo permutaciones de manera e�ciente reduciendo el acceso a memoria y siendo amigable con el uso de memoria caché durante tiempo de ejecución. Entre otras ventajas, se pueden mencionar las siguientes: 6 Facultad de IngenieríaCriptografía______________________________________________________________________________________________________________ ● Seguridad: ChaCha20 es considerado uno de los cifradores más seguros que existen en la actualidad y es altamente resistente a los ataques de criptoanálisis más comunes. ● Velocidad: ChaCha20 es uno de los cifradores más rápidos en términos de velocidad de cifrado y descifrado gracias a su diseño simple y e�ciente computacionalmente; a diferencia de AES que sufre problemas de rendimiento en hardware no especializado. Esto marca una diferencia notable en dispositivos móviles. ● Implementación: ChaCha20 es fácil de implementar y se puede ejecutar en una amplia gama de dispositivos, desde dispositivos móviles hasta servidores de alta potencia. Gracias a las implementaciones de Google, existe amplia documentación del mismo y una gran comunidad trabajando con el mismo. ● Claves largas y nonces: ChaCha20 usa claves de cifrado de 256 bits, lo que proporciona un alto nivel de seguridad. Además, ChaCha20 usa un nonce (número utilizado solo una vez) de 96 bits, lo que añade un importante factor de aleatoriedad y seguridad al momento de generar la secuencia pseudoaleatoria. ● Diseño transparente y revisable: ChaCha20 es un algoritmo de cifrado de código abierto, lo que implica que su diseño y funcionamiento pueden ser revisado y auditado por otras personas. Esto aumenta la con�anza en su seguridad y reduce la posibilidad de puertas traseras o vulnerabilidades ocultas. ¿Hay algún ataque conocido a este algoritmo? ChaCha20 se caracteriza por ser inmune a los ataques de tipo Padding-Oracle como Lucky13. Este ataque aprovecha una vulnerabilidad en el modo de cifrado CBC, que permite a un sistema detectar si el relleno de un mensaje cifrado es válido o no. Aunque esta información parece no proporcionar mucha información sobre el contenido del mensaje, en realidad puede ser su�ciente para descifrar el mensaje completo. Si se utiliza de manera adecuada, esta pequeña cantidad de información puede ser utilizada para descifrar un mensaje completo cifrado con el modo CBC. 7 Facultad de Ingeniería Criptografía______________________________________________________________________________________________________________ El ataque conocido como Lucky13 afecta a las implementaciones del protocolo de seguridad de capa de transporte (TLS) y aprovecha una debilidad en su diseño para obtener información en texto claro a partir de texto cifrado. El nombre del ataque se debe a que los paquetes cifrados de TLS tienen un encabezado de trece bytes que se utilizan en uno de los cálculos criptográ�cos que realiza este protocolo. ChaCha20 se caracteriza por no utilizar el modo CBC, lo que implica que no es vulnerable al ataque Lucky13 ni a otros ataques de tipo Padding-Oracle. Adicionalmente, hasta la fecha no se ha encontrado ningún ataque criptográ�co exitoso contra el algoritmo de cifrado por �ujo ChaCha20. Ha sido ampliamente analizado y se considera que es uno de los cifradores más seguros y con�ables disponibles en la actualidad. Cabe señalar, sin embargo, que usar este algoritmo con una cantidad menor de rondas podría comprometer su e�cacia. El criptógrafo Jean-Philippe Aumasson sugiere que 8 rondas de ChaCha son su�cientes. Aumasson informa que se conoce un ataque a ChaCha con 6 rondas que requiere alrededor de 2116 operaciones, pero que ChaCha con 5 rondas es de�nitivamente vulnerable, ya que requiere alrededor de solo 216 operaciones para ser descifrado. Conclusiones ChaCha20 es una alternativa con�able y segura a los cifradores simétricos más comunes, como AES. ChaCha20 presenta una serie de ventajas muy importantes que fueron expuestas, como es su capacidad para generar secuencias pseudoaleatorias de forma e�ciente y con un fuerte factor de aleatoriedad, su resistencia a ciertos tipos de ataques criptográ�cos y su fácil programación e implementación en hardware no dedicado al cifrado. Adicionalmente, ChaCha20 es un algoritmo que ha sido diseñado especí�camente en la seguridad y la simplicidad de su algoritmo y ha sido evaluado y estudiado por la comunidad criptográ�ca durante muchos años. Todo esto hace de ChaCha20 una excelente opción para aquellos que buscan un cifrado seguro y con�able para proteger su información. Dado que su implementación es amplia en el sector móvil en sistemas operativos como Android, es posible a�rmar que su soporte continuará estando vigente hasta que se descubra una vulnerabilidad que, afortunadamente, no existe en la actualidad. 8 Facultad de Ingeniería Criptografía______________________________________________________________________________________________________________ Referencias (n.d.). Chacha20 Algorithms. Retrieved March 2, 2023, from https://xilinx.github.io/Vitis_Libraries/security/2021.1/guide_L1/internals/chacha 20.html (2007, December 25). The Salsa20 family of stream ciphers. Retrieved March 2, 2023, from https://cr.yp.to/snu�e/salsafamily-20071225.pdf Bernstein, D. J. (n.d.). The design of Chacha20. Loup Vaillant. Retrieved March 2, 2023, from https://loup-vaillant.fr/tutorials/chacha20-design Bursztein, E. (2014, April 28). Protocolos ChaCha20 y Poly1305 para reforzar conexiones HTTPS. Segu-Info. Retrieved March 2, 2023, from https://blog.segu-info.com.ar/2014/04/protocolos-chacha20-y-poly1305-para.html Carrasco, P. G. (2020, April 7). Seguridad SSL/TLS: LUCKY 13. Blog de Internet Security Auditors. Retrieved March 2, 2023, from https://blog.isecauditors.com/2020/04/seguridad-ssl-tls-lucky13.html D-Cryp7. (2022, September 15). Criptografía Aplicada #4 - ChaCha20 e Introducción al Cifrado de Bloques. YouTube. Retrieved March 2, 2023, from https://www.youtube.com/watch?v=7-CiRK66gSM Lucky 13 and other padding oracle attacks on CBC ciphers. (2022, March 20). Sjoerd Langkemper. Retrieved March 2, 2023, from https://www.sjoerdlangkemper.nl/2022/03/20/padding-oracle-attacks-lucky13/ 9 Facultad de Ingeniería Criptografía______________________________________________________________________________________________________________ RFC 8439: ChaCha20 and Poly1305 for IETF Protocols. (n.d.). RFC Editor. Retrieved March 2, 2023, from https://www.rfc-editor.org/rfc/rfc8439 Rodríguez, F. (2022, August 1). ¿Qué es un padding oracle attack? KeepCoding. Retrieved March 2, 2023, from https://keepcoding.io/blog/que-es-un-padding-oracle-attack/ 10
Compartir