30
Class4crypt © jorgeramio 2020

Class4crypt Aula Virtual de Criptografía · 2020. 10. 20. · 4. Operaciones modulares y conjunto de restos 5. Percepción de la inseguridad según las décadas 6. Criptografía

  • Upload
    others

  • View
    5

  • 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