Upload
others
View
9
Download
0
Embed Size (px)
Citation preview
Class4crypt© jorgeramio 2020
Class4cryptAula virtual de criptografía aplicada
Class4crypt c4c3.1 - © jorgeramio 2020
Profesor Dr. Jorge Ramió A.
Clase c4c3.1Fundamentos de
complejidad algorítmicaMadrid, martes 20 de octubre de 2020
Temario de las clases Class4crypt
Class4crypt c4c3.1 - © jorgeramio 2020 Lección 3.1 - página 3
• Módulo 1: Principios básicos de la seguridad
• Módulo 2: Matemáticas discretas en la criptografía
• Módulo 3: Complejidad algorítmica en la criptografía
• Módulo 4: Teoría de la información en la criptografía
• Módulo 5: Fundamentos de la criptografía
• Módulo 6: Algoritmos de criptografía clásica
• Módulo 7: Funciones hash en la criptografía
• Módulo 8: Criptografía simétrica en bloque
• Módulo 9: Criptografía simétrica en flujo
• Módulo 10: Criptografía asimétrica
Clases publicadas en Class4crypt (1)
Class4crypt c4c3.1 - © jorgeramio 2020 Lección 3.1 - página 4
1. Presentación de Class4crypt
2. Ciberseguridad y criptografía
3. Algoritmo RSA
4. Operaciones modulares y conjunto de restos
5. Percepción de la inseguridad según las décadas
6. Criptografía asimétrica y la analogía de los candados
7. Protocolo de intercambio de clave de Diffie y Hellman
8. Ataque man in the middle al intercambio de clave de
Diffie y Hellman
9. Cifrado por sustitución polialfabética: algoritmo de
Vigenère
10. Criptoanálisis al cifrado de Vigenère por el método
Kasiski
11. El homomorfismo de los enteros en la criptografía
12. Inverso aditivo, inverso xor e inverso multiplicativo
13. Cálculo de inversos con el algoritmo extendido de
Euclides
14. Algoritmo de exponenciación modular rápida
15. Generación de claves RSA y estándar PKCS#1
16. Cifrado y descifrado con RSA parte 1
17. Cifrado y descifrado con RSA parte 2
Clases publicadas en Class4crypt (2)
Class4crypt c4c3.1 - © jorgeramio 2020 Lección 3.1 - página 5
18. Introducción a la criptografía moderna
19. Comparación entre cifra simétrica y cifra asimétrica
20. Fundamentos de la cifra simétrica en flujo
21. Registros de desplazamiento realimentados lineales
y no lineales
22. Aleatoriedad en registros LFSR con polinomio
primitivo
23. Fundamentos de la cifra simétrica en bloque
24. Algoritmo DES: redes de Feistel y cajas S
25. Algoritmo DES: expansión de clave, cifra y rellenos
26. ECB y CBC, modos de cifra con confidencialidad
27. CFB, OFB y CTR, modos de cifra con confidencialidad
28. Ataques al DES, DES Challenge y 3DES
29. Clasificación de los sistemas de cifra clásica
30. Vulnerabilidades de la información y amenazas
31. Seguridad informática vs seguridad de información
32. Tríada confidencialidad, integridad y disponibilidad
33. Raíces primitivas en un primo p
34. Fundamentos de complejidad algorítmica
• 20.100 visualizaciones en el canal al 20/10/20
Class4crypt c4c3.1 - © jorgeramio 2020 Lección 3.1 - página 6
¡COMENZAMOS!
Módulo 3. Complejidad algorítmica en la criptografía
Lección 3.1. Fundamentos de complejidad algorítmica
1. Introducción a la teoría de la complejidad algorítmica
2. Problemas de tipo P y NP
3. Introducción al problema de la mochila
4. Introducción al problema del logaritmo discreto
5. Introducción al problema de la factorización entera
Class4crypt c4c3.1
Class4crypt c4c3.1 - © jorgeramio 2020 Lección 3.1 - página 7
Teoría de la complejidad algorítmica
Lección 3.1 - página 8
• La teoría de la complejidad de los algoritmos permitirá, entre otras cosas, conocer la fortaleza de un algoritmo criptográfico y tener así una idea de su vulnerabilidad computacional
• Los algoritmos pueden clasificarse según su tiempo de ejecución, en función del tamaño de la entrada. Hablamos así de algoritmos con complejidad polinomial P (tiempo lineal) y de algoritmos con complejidad polinomial no determinista NP (tiempo exponencial)
• Los primeros darán lugar a problemas de fácil o rápida solución y los segundos darán lugar a problemas de difícil o lenta solución
• El uso de ambos será muy interesante en la criptografía
Class4crypt c4c3.1 - © jorgeramio 2020
Objetivo de esta lección
Lección 3.1 - página 9
• No pretende ser una clase al uso en la que se estudien y analicen los principios y alcances de la complejidad algorítmica
• Sólo se desea presentar unos conocimientos básicos y mínimos en esta temática, para poder luego entender el uso de este tipo de problemas en la criptografía moderna, en particular:• El problema del logaritmo discreto, que se usa en el intercambio de clave
de Diffie y Hellman, en el cifrado y firma de Elgamal, en la firma DSA y en criptografía con curvas elípticas ECC (Elliptic Curve Cryptography), en este último caso usando el ECDLP (Elliptic Curve Discrete Logarithm Problem), algo en lo que no profundizaremos en este curso
• El problema de la factorización entera, que se usa en el algoritmo RSA
Class4crypt c4c3.1 - © jorgeramio 2020
La función O(n)
Lección 3.1 - página 10
• En criptografía deseamos algoritmos con los que sea muy fácil y rápido cifrar pero que su ataque requiera de muchísimo cómputo
• Las operaciones que realice un algoritmo dependerán del tamaño de la entrada n y su resolución tendrá una cota superior que se define como O(n), de forma coloquial O grande de n
• Esto conlleva una complejidad que se expresa en términos del tiempo T necesario para el cálculo del algoritmo y del espacio S que su ejecución utiliza en memoria
• Esta complejidad se representará con la función f (n) = O(g(n)), donde n es el tamaño de la entrada
Class4crypt c4c3.1 - © jorgeramio 2020
Definición y complejidad de la función f (n)
Lección 3.1 - página 11
• f = O(n) ssi c0,n0 / f (n) c0*g(n)
• Es decir, sí y solo sí existen valores c0 y n0 tales que f (n) c0*g(n)
• Por ejemplo, si f (n) = 4n2 + 2n + 5, ¿será f = O(n2)?
• La pregunta que debemos hacernos es si se cumple que:
• c0*g(n) = c0*n2 f (n), con n = 1, 2, 3, etc. para un valor c0 dado
• Ejemplo: vamos a evaluar la ecuación c0*n2 para n = 1, 2, 3, …
comparar este valor con el resultado de f (n) = 4n2 + 2n + 5 y comprobar si para algún n se cumple que c0*n
2 4n2 + 2n + 5
• Sea en este caso c0 = 6
Class4crypt c4c3.1 - © jorgeramio 2020
Comprobando que f = O(n2)
Lección 3.1 - página 12Class4crypt c4c3.1 - © jorgeramio 2020
Si f (n) = 4n2 + 2n + 5 ¿se cumple que cog(n) = con2 f (n)?
co n co*n2 f (n) = 4n2 + 2n + 5 ¿con
2 f (n)?
6 1 6 11 11 > 6 No
6 2 24 25 25 > 24 No
6 3 54 47 47/54=0,87 Sí
6 4 96 77 77/96=0,80 Sí
6 5 150 115 115/150=0,77 Sí
Se cumple
siempre
Tiempos de ejecución de un algoritmo
Lección 3.1 - página 13
• En la expresión O(n) aparecerá el término que domina al crecer el valor de n
• El tiempo de ejecución de un algoritmo T1 que realiza 2n+1 operaciones será de tipo O(n)
• El tiempo de ejecución de un algoritmo T2 que realiza 3n2+n+3 operaciones será de tipo O(n2)
• Sean a y b dos números enteros positivos menores o iguales que n• Para la suma (a + b): O(log2(a) + log2(b)) = O(log2(n))
• Para la multiplicación (a*b): O(log2(a) * log2(b)) = O((log2(n))2)
Class4crypt c4c3.1 - © jorgeramio 2020
Algoritmos de complejidad polinomial
Lección 3.1 - página 14
• Un algoritmo se dice que tiene tiempo de ejecución polinomial si dicho tiempo depende polinómicamente del tamaño de la entrada
• Si la entrada es de tamaño n y t es un entero, la complejidad será O(logt n)
• Si t = 1, se dice que el sistema es lineal (por ejemplo la suma de dos números)
• Si t = 2, se dice que el sistema es cuadrático (por ejemplo el producto de dos números)
• Si t = 3, se dice que el sistema es cúbico (por ejemplo encontrar el máximo común divisor MCD con el algoritmo Euclides)
Class4crypt c4c3.1 - © jorgeramio 2020
Ejemplo de complejidad polinomial
Lección 3.1 - página 15
• Pregunta. El tiempo de ejecución de un algoritmo es O(log3 n). Si doblamos el tamaño de la entrada, ¿en cuánto aumentará este tiempo?
• Solución. En el primer caso el tiempo es O(log3 n) y en el segundo O(log3 2n). Para este sistema polinomial, el tiempo de cómputo se incrementará sólo en log3 2
• Estos son los denominados problemas fáciles y son los que involucrarán un proceso de cifrado y descifrado (o firma digital y su posterior comprobación) por parte del o de los usuarios autorizados
Class4crypt c4c3.1 - © jorgeramio 2020
Algoritmos de mayor complejidad
Lección 3.1 - página 16
• Si la entrada es de tamaño n y t es un entero, otro orden de complejidad será O(nt)
• Para t = 2, el algoritmo tendrá una complejidad cuadrática
• Para t = 3, el algoritmo tendrá una complejidad cúbica
• ¿Y si tuviésemos una complejidad O(an)?… ¡incluso sería mejor!
• Algoritmos de complejidad polinomial no determinista
• Un algoritmo se dice que tiene tiempo de ejecución polinomial no determinista si este tiempo depende exponencialmente del tamaño de la entrada
Class4crypt c4c3.1 - © jorgeramio 2020
Ejemplo de complejidad no determinista
Lección 3.1 - página 17
• Pregunta. El tiempo de ejecución de un algoritmo es O(2n). Si doblamos el tamaño de la entrada, ¿en cuánto aumentará este tiempo?
• Solución. En el primer caso el tiempo es O(2n) y en el segundo caso O(22n). Duplicando la entrada, el tiempo de cómputo para este sistema exponencial se multiplicará por 2n
• Por ejemplo, sea n1 = 10 y n2 = 20 (n2 = 2*n1)• Si n1 = 10, entonces 2
10 = 1.024
• Si n2 = 20, entonces 220 = 1.048.576
• Sólo duplicando n, el valor inicial se ha multiplicado por 1.024 veces
Class4crypt c4c3.1 - © jorgeramio 2020
Comparativas de complejidad
Lección 3.1 - página 18
• Los algoritmos polinómicos y exponenciales se comparan por sus órdenes de complejidad• Constante O(1)
• Logarítmica O(log n))
• Lineal O(n)
• Casi lineal O(n log n)
• Cuadrática O(n2)
• Cúbica O(n3)
• Exponencial O(an)
donde a es una constante
Class4crypt c4c3.1 - © jorgeramio 2020
José A. Alonso Jiménez, Grupo de Lógica Computacional, Dpto. de Ciencias de la Computación e I.A., Universidad de Sevilla (ver referencia en Bibliografía)
Tiempos de ejecución según complejidad
Lección 3.1 - página 19
• Supongamos un ordenador que puede realizar 1010
instruccionespor segundo
Class4crypt c4c3.1 - © jorgeramio 2020
Entrada O(n) seg O(n2) seg O(n3) seg O(2n) seg
n = 10 10-9 10-8 10-7 10-7
n = 102 10-8 10-6 10-4 41012 años
n = 103 10-7 10-4 10-1 310293 años
Entrada/1010. Para n = 102 = 100 O(n2) = 1002/1010 = 10-6 segundos
Incrementos de un orden de magnitud
Computacionalmente imposible
Problemas tipo P y NP
Lección 3.1 - página 20
• P (Polynomial time), NP (Nondeterministic Polynomial time)
• Siguiendo el documento Complejidad computacional de Daniel Gayo, de la asignatura Algorítmica y Lenguajes de Programación, Universidad de Oviedo:
• “La clase de problemas P está formada por todos aquellos problemas de decisión para los cuales se tiene un algoritmo de solución que se ejecuta en tiempo polinomial en una máquina determinista”
• “La clase de problemas NP está formado por todos aquellos problemas de decisión para los cuales existe un algoritmo de solución que se ejecuta en tiempo polinomial en una (hipotética) máquina no determinista. Dicho de otro modo, no se ha encontrado un algoritmo determinista que lo resuelva en tiempo polinomial”
• Algunos problemas NP interesantes en la criptografía
Class4crypt c4c3.1 - © jorgeramio 2020
El problema de la mochila
Lección 3.1 - página 21
• Dada una mochila de determinadas dimensiones de alto, ancho y fondo, y un conjunto de elementos de distintos tamaños menores que ella y de cualquier dimensión, ... ¿es posible llenar la mochila al 100% con distintos elementos de ese conjunto sin repetir ninguno de ellos?
• Es un problema de tipo NP en el que el algoritmo debe realizar en cada paso una selección iterativa entre diferentes opciones
Class4crypt c4c3.1 - © jorgeramio 2020
El problema del logaritmo discreto
Lección 3.1 - página 22
• Dados los enteros , x y un cuerpo p, resolver la operación
• = x mod p
• Es un problema polinomial de baja complejidad algorítmica, incluso con números , x y p grandes
• No obstante, conocidos los números , y el primo p, encontrar ahora un entero x de forma que
• x = log mod p
• Es un problema NP computacionalmente intratable si p es muy grande
Class4crypt c4c3.1 - © jorgeramio 2020
El problema de la factorización entera
Lección 3.1 - página 23
• Dados dos números primos p y q, multiplicarlos para obtener el producto n
• p*q = n
• Es un problema de tipo polinomial, de fácil solución incluso con primos muy grandes
• Pero, conocido el producto n, encontrar los factores p y q de n es un problema de tipo NP, que es computacionalmente intratable si tanto p como q son muy grandes
• n = p*q
Class4crypt c4c3.1 - © jorgeramio 2020
Conclusiones de la Lección 3.1
• La complejidad algorítmica nos permite diseñar algoritmos criptográficos cuya resolución sea rápida y sencilla para los intervinientes válidos, pero por el contrario se vuelva computacionalmente intratable (en tiempo y recursos) para intrusos o atacantes que no conocen una clave, trampa o certificado
• En el primer caso solucionaremos problemas en tiempo polinomial P (lineal, cuadrático, …), y en el segundo caso en tiempo polinomial no determinista NP (exponencial)
• La complejidad de estos algoritmos se denota como O(n), que es el término que domina al crecer el valor de n, siendo n el tamaño de entrada
• Existen varios problemas de este tipo que se usan en criptografía, como los problemas de la mochila, del logaritmo discreto, del logaritmo discreto en curvas elípticas y de la factorización entera
Class4crypt c4c3.1 - © jorgeramio 2020 Lección 3.1 - página 24
Un proyecto sin ánimo de lucro
• Class4crypt es un proyecto sin ánimo de lucro
• Si te ha gustado el vídeo, has aprendido algo nuevo o bien has podido reforzar algún conocimiento que ya tenías
• Entonces, por favor, pon un “Me gusta” al vídeo
• Si deseas expresar alguna opinión sobre el contenido de esta clase o tienes alguna duda, hazlo por favor en YouTube. Todos los comentarios serán muy bien recibidos y las dudas que plantees serán contestadas a la mayor brevedad posible
¡Muchas gracias!
Class4crypt c4c3.1 - © jorgeramio 2020 Lección 3.1 - página 25
Lectura recomendada (1/2)
• Análisis de la complejidad de los algoritmos, José A. Alonso Jiménez, Universidad de Sevilla• https://www.cs.us.es/~jalonso/cursos/i1m-19/temas/tema-28.html
• Criptografía y Seguridad en Computadores, Versión 5-0.1.4, José Manuel Lucena, capítulo 4, noviembre de 2019• http://criptografiayseguridad.blogspot.com/p/criptografia-y-seguridad-en.html
• Algoritmos y Complejidad, Complejidad Computacional, Pablo R. Fillottrani, Depto. Ciencias e Ingeniería de la Computación, Universidad Nacional del Sur, 2017• http://www.cs.uns.edu.ar/~prf/teaching/AyC17/downloads/Teoria/Complejid
ad-1x1.pdf
Class4crypt c4c3.1 - © jorgeramio 2020 Lección 3.1 - página 26
https://www.cs.us.es/~jalonso/cursos/i1m-19/temas/tema-28.htmlhttp://criptografiayseguridad.blogspot.com/p/criptografia-y-seguridad-en.htmlhttp://www.cs.uns.edu.ar/~prf/teaching/AyC17/downloads/Teoria/Complejidad-1x1.pdf
Lectura recomendada (2/2)
• Algorítmica y Lenguajes de Programación, Complejidad computacional, Daniel Gayo, Universidad de Oviedo• http://di002.edv.uniovi.es/~dani/asignaturas/transparencias-leccion19.PDF
• Máquina de Turing determinista y no determinista, Wikipedia• https://es.wikipedia.org/wiki/M%C3%A1quina_de_Turing#M%C3%A1quina_d
e_Turing_determinista_y_no_determinista
Class4crypt c4c3.1 - © jorgeramio 2020 Lección 3.1 - página 27
Fin de la clase 3.1
http://di002.edv.uniovi.es/~dani/asignaturas/transparencias-leccion19.PDFhttps://es.wikipedia.org/wiki/M%C3%A1quina_de_Turing#M%C3%A1quina_de_Turing_determinista_y_no_determinista
Más lecciones en el canal Class4crypt
• https://www.youtube.com/user/JorgeRamio
Class4crypt c4c3.1 - © jorgeramio 2020 Lección 3.1 - página 28
Despedida, fuera webcam y dentro música
1.560 suscriptores20 octubre 2020
https://www.youtube.com/user/jorgeramio
Licencia y créditos
• Estas videoclases y la documentación utilizada en ellas están publicadas bajo licencia CreativeCommons tipo CC BY-NC-ND 4.0• Reconocimiento - No Comercial - Sin Obra Derivada
• Esto permite que otros puedan descargar esta obra y compartirla con otras personas, siempre que se reconozca su autoría, pero no se puede cambiar de ninguna manera su contenido ni se puede utilizar comercialmente
• Música:• Enter_Blonde, Max Surla, Media Right Productions, YouTube Audio Library -
Free Music https://www.youtube.com/audiolibrary/music?nv=1
Class4crypt c4c3.1 - © jorgeramio 2020 Lección 3.1 - página 29
https://www.youtube.com/audiolibrary/music?nv=1
Class4crypt c4c3.1 - © jorgeramio 2020 Lección 3.1 - página 30
Próximamente una nueva videoclase de criptografía aplicada en Class4crypt
Criptosaludos