SlideShare a Scribd company logo
1 of 31
Capítulo 8
              Teoría de la Complejidad Algorítmica


             Seguridad Informática y Criptografía

                                                               Ultima actualización del archivo: 01/03/06
                                                                       Este archivo tiene: 31 diapositivas


                     Material Docente de                                           Dr. Jorge Ramió Aguirre
           v 4.1
                     Libre Distribución                                   Universidad Politécnica de Madrid


            Este archivo forma parte de un curso completo sobre Seguridad Informática y Criptografía. Se autoriza el
                   uso, reproducción en computador y su impresión en papel, sólo con fines docentes y/o personales,
            respetando los créditos del autor. Queda prohibida su comercialización, excepto la edición en venta en el
           Departamento de Publicaciones de la Escuela Universitaria de Informática de la Universidad Politécnica de
                                                                                                     Madrid, España.
Curso de Seguridad Informática y Criptografía © JRA
Capítulo 8: Teoría de la Complejidad Algorítmica   Página 2




   Introducción a la teoría de la complejidad
   La teoría de la complejidad de los algoritmos permitirá, entre otras
   cosas, conocer la fortaleza de un algoritmo y tener así una idea de
   su vulnerabilidad computacional.
                                Complejidad Computacional
   Los algoritmos pueden clasificarse según su tiempo de ejecución,
   en función del tamaño u orden de la entrada. Hablamos así de
   complejidad:
        • Polinomial ⇒ comportamiento similar al lineal
        • Polinomial No Determinísta ⇒ comportamiento exponencial
   Esto dará lugar a “problemas fáciles” y “problemas difíciles” cuyo
   uso será muy interesante en la criptografía.

© Jorge Ramió Aguirre    Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica   Página 3




                        Operaciones bit en la suma
    Si deseamos sumar dos números binarios n y m, ambos de k bits
    realizaremos k operaciones bit puesto que cada operación básica
    con los dígitos de una columna es una operación bit.
    • Recuerde que 0+0 = 0, 0+1=1, 1+0 = 1, 1+1 = 0 con bit 1 de acarreo.
    • Si un número tiene menos bits, se rellena con ceros por la izquierda.
    Ejemplo: encontrar el número de operaciones bit necesarias en la
    suma en binario de 13+7 ⇒ 1101 + 0111 (de k = 4 bits)
                          1 1     1   1   (bits de acarreo)
                            1     1   0 1
                        +   0     1   1 1
                          1 0     1   0 0
    Cada operación básica que hacemos con una columna se conoce
    como operación bit, luego necesitamos k = 4 operaciones bit.


© Jorge Ramió Aguirre     Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica   Página 4




          Operaciones bit en la multiplicación
    Para la multiplicación de un número n de k bits por un número
    m de h bits, el número de operaciones bit será igual a 2∗k∗h.
    Suponemos que k ≥ h.
    • Recuerde que 0x0 = 0, 0x1=0, 1x0 = 0, 1x1 = 1.

    Ejemplo: encontrar el número de operaciones bit necesarias en la
    multiplicación en binario 10x5 ⇒ 1010 x 101 (4 y 3 bits)
                         1        0   1 0 x 1 0 1
                         1        0   1 0
                       0 0        0   0
                   + 1 0 1        0        (procedemos ahora a sumar)
                     1 1 0        0   1 0
    Como cada operación básica entre dos bits es una operación bit,
    hemos realizado h∗k = 3∗4 multiplicaciones y luego k∗h = 4∗3
    sumas, es decir en total 2∗k∗h = 24 operaciones bit.

© Jorge Ramió Aguirre    Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica                  Página 5




                                   La función O(n)
    Las operaciones dependerán del tamaño de la entrada por lo
    que esta complejidad se expresará en términos del tiempo T
    necesario para el cálculo del algoritmo y del espacio S que
    utiliza en memoria, y se expresará mediante una función
    f (n), donde n es el tamaño de la entrada.
    Esta función será una aproximación pues el resultado exacto
    dependerá de la velocidad del procesador.
                                           f (n) = O(g(n))                 Ejemplo
         Y se define así:                 f = O(n) ssi ∃ co,no / f(n) ≤ co∗g(n)

           http://www.mm.informatik.tu-darmstadt.de/courses/2002ws/ics/lectures/v14.pdf     

© Jorge Ramió Aguirre    Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica                   Página 6




               Complejidad de una función f(n)
             Si         f (n) = 4n2 + 2n + 5                               ¿ f = O(n2)?
        ¿se cumple que co∗g(n) = co∗n2 ≥ f (n)?                                Sea co = 6
      co        no       cono2           f (n) = 4n2 + 2n + 5 ¿co∗n2 ≥ f (n)?
      6         1             6                     11                          No
      6         2          24                       25                          No
                                                                                     Se cumple
      6         3          54                       38                          Sí   siempre


      6         4          96                       77                          Sí
                    Luego, la complejidad de f (n) es exponencial.

© Jorge Ramió Aguirre    Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica   Página 7




                           Tiempos de ejecución
     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 es de tipo O(n); uno T2 que realiza
     3n2+n+3 operaciones será de tipo O(n2), etc.
   • Para realizar la suma de la diapositiva anterior
     necesitamos O(n) = O(log n) operaciones bit y para el caso
     de la multiplicación, éstas serán O(n∗m) = O(log n ∗ log
     m) operaciones bit.
        + Operación binaria: n+m (de k bits cada uno)
        ∗ Operación binaria: n∗m (de k y h bits respectivamente)

© Jorge Ramió Aguirre    Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica                 Página 8




       Algoritmos de complejidad polinomial
 • Un algoritmo se dice que tiene tiempo de ejecución
   polinomial (no confundir con lineal) si éste depende
   polinómicamente del tamaño de la entrada.
 • Si la entrada es de tamaño n y t es un entero, el
   número de operaciones bit será O(logt n). Ejemplos

       Si t = 1, el sistema es lineal                                      Suma
       Si t = 2, el sistema es cuadrático                                  Producto
                                                                           Máximo Común
       Si t = 3, el sistema es cúbico                                      Divisor (Euclides)


© Jorge Ramió Aguirre    Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica   Página 9




           Ejemplo de complejidad polinomial

    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 se incrementará sólo en log3 2 operaciones bit.

        Estos son los denominados problemas fáciles y son
      los que involucrarán un proceso de cifra y descifrado
       (o firma) por parte del o de los usuarios autorizados.

© Jorge Ramió Aguirre    Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica             Página 10




 Algoritmos de complejidad no determinista

   • Un algoritmo se dice que tiene tiempo de ejecución
     polinomial no determinista (en este caso exponencial)
     si éste depende exponencialmente del tamaño de la
     entrada.
   • Si la entrada es de tamaño n y t es un entero, el
     número de operaciones bit será O(nt).
                                                                           Ejemplo
          Para t = 2, será exponencial de orden 2                             n!

          Para t = 3, será exponencial de orden 3

© Jorge Ramió Aguirre    Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica   Página 11




     Ejemplo de complejidad no determinista

    Pregunta: El tiempo de ejecución de un algoritmo es
    O(n3). Si doblamos el tamaño de la entrada, ¿en cuánto
    aumentará este tiempo?
    Solución: En el primer caso el tiempo es O(n3) y en el
    segundo O((2n)3) = O(8n3). El tiempo para este sistema
    exponencial, se incrementará en 8 operaciones bit.

     Estos son los denominados problemas difíciles y son a
     los que deberá enfrentarse un criptoanalista o atacante
      que desea romper una cifra o la clave de un usuario.

© Jorge Ramió Aguirre    Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica   Página 12




                  Comparativas de complejidad
   • Los algoritmos polinómicos y exponenciales se
     comparan por su complejidad O(nt).
           –   Polinómico constante    ⇒ O(1)
           –   Polinómico lineal       ⇒ O(n)
           –   Polinómico cuadrático ⇒ O(n2)
           –   Polinómico cúbico       ⇒ O(n3) ... etc.
           –   Exponencial             ⇒ O(dh(n))
               donde d es una constante y h(n) un polinomio
     Si suponemos un ordenador capaz de realizar 109
     instrucciones por segundo obtenemos este cuadro:

© Jorge Ramió Aguirre    Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica              Página 13




                  Tabla comparativa de tiempos

      Entrada              O(n)                 O(n2)         O(n3)          O(2n)

      n = 10            10-8 seg          10-7 seg          10-6 seg       10-6 seg
      n = 102           10-7 seg         10-5 seg           10-3 seg       4∗1013 años
      n = 103           10-6 seg         10-3 seg           1 seg          Muy grande

            Incrementos de un                                  Computacionalmente
            orden de magnitud                                  imposible
      Entrada/109: Para n = 100 ⇒ O(n2) = 1002/109 = 10-5 seg

© Jorge Ramió Aguirre    Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica   Página 14




                           Problemas de tipo NP
  En criptografía nos interesan las funciones f(x) de un solo
  sentido, es decir:
        Fácil calcular f(x) pero muy difícil calcular f-1(x)
           salvo que conozcamos un secreto o trampa.
  Porque dan lugar a problemas de tipo NP, polinomiales no
  deterministas, computacionalmente difíciles de tratar:
        Problema de la mochila                  Definición del
        Problema de la factorización            problema y
        Problema del logaritmo discreto         ejemplos
        Problema logaritmo discreto en curvas elípticas
        Otros

© Jorge Ramió Aguirre    Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica                    Página 15




                        El problema de la mochila
     • Es un problema de tipo NP en el
       que el algoritmo debe realizar en
       cada paso una selección iterativa
       entre diferentes opciones.
  Enunciado:
            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 (completa) con distintos
            elementos de ese conjunto sin repetir ninguno de ellos?

                                                http://en.wikipedia.org/wiki/Knapsack_problem   

© Jorge Ramió Aguirre    Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica                                   Página 16




             Ejemplo del problema de la mochila
                         S = a1 + a2 + a3                     A = {a1, a2, a3}
                                                                                                      Sea una mochila
           ¿Se incluye a1 en la suma S?
                                                       a1           Los resultados son todos          con 4 elementos
                                                 Sí          No     distintos: una casualidad           {2, 4, 9, 10}
                                         ¿Se incluye a2 en la suma?
                                                                                                     ¿Cuántas sumas
                          a2                                                     a2
                    Sí          No                                      Sí             No               posibles hay?
                                                ¿Se incluye a3?                                       Solución: 24 = 16
               a3                          a3                     a3                        a3        ∅, 2, 4, 6,
      Sí             No        Sí                 No    Sí               No      Sí              No   9, 10, 11, 12,
                                                                                                      13, 14, 15, 16,
       S1           S2              S3            S4         S5         S6             S7        S8
                                                                                                      19, 21, 23, 25.
   S1 = a1+a2+a3                    S2 = a1+a2              S3 = a1+a3                S 4 = a1          Repítalo con
                                                                                                        {2, 4, 6, 10}
   S5 = a2+a3                       S6 = a2                  S7 = a3                  S8 = ∅
     Hemos tenido que evaluar 23 = 8 valores ⇒ (carácter exponencial)

© Jorge Ramió Aguirre               Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica   Página 17




        Interés de las mochilas en criptografía
        ¿Por qué tiene interés este problema en criptografía?
  a) Es de tipo NP completo: su resolución por lo general
     implica una complejidad exponencial. Luego, será
     difícil de atacar o criptoanalizar.
  b) Existe un caso en el que su resolución es lineal y, si la
     solución existe, ésta será única. Este caso se dará cuando
     A = {a1, a2, a3, .., an} está ordenado de menor a mayor de
     forma que ai es mayor que la suma de los aj que le
     preceden: a2 > a1; a3 > a1 + a2; a4 > a1 + a2 + a3; etc.
              Esto dará lugar a los criptosistemas de mochila
              tramposa que veremos en un próximo capítulo.

© Jorge Ramió Aguirre    Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica                Página 18




 Problemas usados en criptografía asimétrica
   Los problemas más usados en la criptografía asimétrica o de
   clave pública actualmente son:
     - El problema de la factorización de números grandes PFNG
     - El problema del logaritmo discreto PLD
   En estos casos, cuando los números son del orden de mil bits
   (unos 310 dígitos) su cálculo se vuelve computacionalmente
   imposible debido al tiempo que deberíamos emplear.
   Si lo desea, puede comprobar los ejemplos de las siguientes
   diapositivas usando el software de prácticas Fortaleza de libre
   distribución y que puede descargarlo desde esta dirección.
                                        http://www.criptored.upm.es/software/sw_m001e.htm   

© Jorge Ramió Aguirre    Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica                     Página 19




       El problema de la factorización PFNG
   Dado un número n que es el resultado del producto de dos o
   más primos, se pide encontrar estos factores.
   Por ejemplo, cuando el valor n = p∗q es muy grande, el
   Problema de la Factorización de Números Grandes PFNG se
   vuelve computacionalmente intratable.
   No obstante, el caso inverso, dado dos números primos p y q,
   encontrar el resultado p∗q = n, se trata de un problema de tipo
   polinomial.
   Este problema se usará en la generación del par de claves del
   sistema de cifra con clave pública RSA.

                                          http://home.netcom.com/~jrhowell/math/factor.htm      

© Jorge Ramió Aguirre    Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica              Página 20




         Compruebe lo que significa el PFNG
    Cálculo fácil o polinomial (función directa)
   Calcule “a mano” los siguientes productos de dos primos y
   tome el tiempo aproximado que tarda en la operación:
     a) 13∗31 b) 113∗131 c) 1.013∗1.031             calcule...
                        No vale usar                                   ¿Qué puede concluir
                        calculadora...                                  de estos cálculos?
    Cálculo difícil o no polinomial (función inversa)
   Usando la criba de Eratóstenes, factorice en dos primos los
   siguientes números y vuelva a tomar el tiempo empleado:
    a) 629 b) 17.399 c) 1.052.627                    calcule...
   En el caso a) son primos de 2 dígitos, en b) de 3 y en c) de 4.

© Jorge Ramió Aguirre     Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica                 Página 21




                    Solución al ejemplo anterior
    Dificultad polinomial (rápido)
    a) 13∗31 = 403 b) 113∗131 = 14.803 c) 1013∗1031 = 1.044.403
   A medida que aumenta el tamaño de la entrada, el tiempo de
   cálculo aumenta proporcionalmente con el número de dígitos.

    Dificultad no determinista (lento)                                    Paciencia, un
                                                                           computador va a
    a) 629 b) 17.399 c) 1.052.627                                          sufrir lo mismo ...
   Da igual que el algoritmo sea éste muy elemental u otro más eficaz;
   aquí resulta evidente que el tiempo de cálculo aumenta mucho al
   incrementar en un dígito los números en cuestión. Es no lineal.
   Solución: Los resultados a), b) y c) son el producto de los números
   primos inmediatamente superiores a los que se usaron en el cálculo
   polinomial es decir 17*37; 127*137; 1019*1033.

© Jorge Ramió Aguirre    Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica                          Página 22




     El problema del logaritmo discreto PLD
   Dado un par de enteros α y β que pertenecen al Campo de
   Galois GF(p), se pide encontrar un entero x de forma tal que
   x = logα β mod p.
   Si el valor p es muy grande, el Problema del Logaritmo
   Discreto PLD es computacionalmente intratable.
   No obstante, el caso inverso, dado dos números α y x,
   encontrar β = αx mod p es un problema polinomial.
   Este problema se usará, entre otros, en la creación de las
   claves del sistema de cifra con clave pública ElGamal y en el
   protocolo de intercambio de clave de Diffie y Hellman.
                                                http://en.wikipedia.org/wiki/Discrete_logarithm       

© Jorge Ramió Aguirre    Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica                  Página 23




          El PLD en su función directa o fácil
    Cálculo fácil o polinomial (función directa)
   Calcule “a mano” las siguientes exponenciaciones mod p y
   tome el tiempo aproximado que tarda en la operación:
     a) 54 mod 7 b) 817 mod 41 c) 9211 mod 251
             54 = 625
            817 = 2.251.799.813.685.248
           9211 = 3.996.373.778.857.415.671.808                            Solución:
   Haciendo uso de la propiedad de reducibilidad                           54 mod 7 = 2
   vista en el apartado de matemáticas discretas,                          817 mod 41 = 39
   podrá bajar significativamente el tiempo de                             9211 mod 251 = 217
   cálculo. Este tiempo será de tipo polinomial
   según el tamaño de la entrada.

© Jorge Ramió Aguirre    Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica   Página 24




         El PLD y su función inversa o difícil
    Cálculo difícil o no determinista (función inversa)
   Aunque existen varios algoritmos para este tipo de cálculos
   (al igual que para la factorización) use la fuerza bruta que se
   explica a continuación para encontrar los siguientes valores y
   vuelva a tomar el tiempo empleado:
    a) log5 2 mod 7 b) log8 39 mod 41 c) log92 217 mod 251
  Aplicando fuerza bruta en el 1er caso (la base elevada a todos los restos de
  p) al final se obtiene que log5 2 mod 7 = 4.
                                                    Solución:
  51 mod 7 = 5 52 mod 7 = 4 53 mod 7 = 6            log5 2 mod 7 = 4
  54 mod 7 = 2 55 mod 7 = 3 56 mod 7 = 1            log8 39 mod 41 = 17
 En término medio deberá recorrer la mitad del
                                                    log92 217 mod 251 = 11
 espacio de valores para encontrarlo ... 

© Jorge Ramió Aguirre    Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica                Página 25




          Logaritmo discreto con α generador
 En el cuerpo p = 13, el 2 es un generador, luego:
log2 1 mod 13 = 0                      log2 2 mod 13 = 1                   log2 3 mod 13 = 4
log2 4 mod 13 = 2                      log2 5 mod 13 = 9                   log2 6 mod 13 = 5
log2 7 mod 13 = 11                     log2 8 mod 13 = 3                   log2 9 mod 13 = 8
log2 10 mod 13 = 10                    log2 11 mod 13 = 7                  log2 12 mod 13 = 6

              21 mod 13 = 2                     22 mod 13 = 4                 23 mod 13 = 8
              24 mod 13 = 3                     25 mod 13 = 6                 26 mod 13 = 12
Es            27 mod 13 = 11                    28 mod 13 = 9                 29 mod 13 = 5
decir         210 mod 13 = 10                   211 mod 13 = 7                212 mod 13 = 1
              Se cumplirá siempre que a0 mod p = ap-1 mod p = 1.

© Jorge Ramió Aguirre    Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica                  Página 26




      Logaritmo discreto con α no generador
 En p=13 el 2           30 mod 13 = 1                 31 mod 13 = 3              32 mod 13 = 9
 era generador,
 pero no así el         33 mod 13 = 1                 34 mod 13 = 3              35 mod 13 = 9
 número 3...            36 mod 13 = 1                 37 mod 13 = 3              38 mod 13 = 9
 Luego                  39 mod 13 = 1                310 mod 13 = 3             311 mod 13 = 9

 log3 1 mod 13 = 0                    log3 2 mod 13 = NE                   log3 3 mod 13 = 1
 log3 4 mod 13 = NE                   log3 5 mod 13 = NE                   log3 6 mod 13 = NE
 log3 7 mod 13 = NE                   log3 8 mod 13 = NE                   log3 9 mod 13 = 2
 log3 10 mod 13 = NE                  log3 11 mod 13 = NE                  log3 12 mod 13 = NE
                NE: no existe el logaritmo discreto en ese cuerpo

© Jorge Ramió Aguirre    Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica              Página 27




                        ¿Hay más funciones NP?

        Existen otros muchos problemas matemáticos que dan
        lugar a problemas del tipo NP, algunos de ellos basados
        en estas funciones unidireccionales one-way functions que
        tanto interesan en criptografía.
        Las dos últimas funciones vistas, la factorización de
        números grandes y el logaritmo discreto, son las que más
        uso tienen de momento en la criptografía actual.
        En la siguiente página Web encontrará una interesante
        lista con 88 problemas de tipo NP.

                 http://www.csc.liv.ac.uk/~ped/teachadmin/COMP202/annotated_np.html      

                                                                           Fin del capítulo
© Jorge Ramió Aguirre    Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica   Página 28




                 Cuestiones y ejercicios (1 de 2)
    •     Deseamos sumar de forma binaria el número 15 (1111) y el
          número 10 (1010), ambos de k = 4 bits. Haga la suma binaria y
          verifique que el número de operaciones bit desarrolladas es k = 4.
    •     Si multiplicamos en binario 1010∗11, donde k = 4 bits y h = 2 bits,
          compruebe que el número de operaciones bit realizadas es 2∗k∗h.
    •     ¿Por qué son interesantes los problemas de tipo NP en criptografía?
    •     Defina el problema de la mochila y su posible utilización en un
          sistema de cifra.
    •     ¿Es siempre única la solución de una mochila? Piense sobre el
          particular y su trascendencia si las utilizamos sin ningún control en
          sistemas de cifra.
    •     Factorice mentalmente el valor n = 143. Intente hacer lo mismo
          para n = 1.243. ¿Qué opina ahora del problema de la factorización?

© Jorge Ramió Aguirre    Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica   Página 29




                 Cuestiones y ejercicios (2 de 2)
    •     ¿Se le ocurre alguna forma de utilizar este problema de un solo
          sentido para cifrar información?
    •     A partir de la ecuación β = xα mod p, defina el problema del
          logaritmo discreto.
    •     Calcule 713 mod 31 = C usando la propiedad de reducibilidad.
          Compruebe con Fortaleza que el exponente 13 = log7 C mod 31.
    •     ¿Qué utilidad le encuentra a este problema en criptografía?
    •     ¿Qué relación existe entre generadores de un cuerpo, el conjunto
          completo de restos y el cálculo del logaritmo discreto?
    •     ¿Qué sucede si deseamos encontrar un logaritmo discreto que no
          existe, por ejemplo log5 19 mod 31?
          Nota: si usa el software Fortaleza, deberá detener la operación al
          no contemplarse en su código este hecho .

© Jorge Ramió Aguirre    Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica                 Página 30




                        Prácticas del tema 8 (1/2)
    Software Fortaleza:              http://www.criptored.upm.es/software/sw_m001e.htm   

    1.    Encuentre el tiempo que tarda el programa en calcular los siguientes
          productos de primos: 23x61; 281x829; 3001x5477; 26317x63901.
    2.    Encuentre cuánto tarda el programa en realizar un producto de dos
          números de 300 dígitos cada uno.
    3.    Factorice por Pollard Rho los siguientes productos y encuentre el tiempo
          que tarda el programa: 1403; 232949; 16436477; 1681682617.
    4.    Factorice por Pollard Rho los números de 16 dígitos que se indican y
          observe el tiempo empleado: 3745667802664727; 4044773133465121;
          3907781049017851; 41710432708253. Saque conclusiones.
    5.    ¿Cuánto tarda el programa en demostrar la primalidad de estos números
          50000000000000000059; 500000000000000000000000000009;
          5000000000000000000000000000000000000021; de 20, 30 y 40 dígitos?
          Compárelos con los tiempos de factorización y saque conclusiones.


© Jorge Ramió Aguirre    Madrid (España) 2006
Capítulo 8: Teoría de la Complejidad Algorítmica        Página 31




                        Prácticas del tema 8 (2/2)
    •     Encuentre el tiempo que tarda el programa en calcular las siguientes
          potencias modulares: 351215 mod 3456; 782487652456 mod 34654783;
          891278265367876254356758778234002462 mod 762488740981009687272345.
    •     Si d = dígitos, ¿cuánto tiempo tarda el programa en calcular una potencia
          en los siguientes rangos de valores: 50d100d mod 100d; 50d100d mod 150d,
          50d100d mod 200d, 50d100d mod 250d? Saque conclusiones.
    •     Si d = dígitos, ¿cuánto tiempo tarda el programa en calcular una potencia
          en los siguientes rangos de valores: 50d25d mod 200d; 50d50d mod 200d,
          50d75d mod 200d, 50d100d mod 200d? Saque conclusiones.
    •     Compruebe las siguientes potencias y luego mediante los algoritmos de
          Búsqueda Exhaustiva, Paso Gigante - Paso Enano y Pohlig - Hellman,
          calcule el correspondiente logaritmo discreto. El módulo p es primo y α es
          un generador en p. Observe los tiempos de ejecución y saque conclusiones.
           - 401357 mod 87211 = 31211           ⇒ log401 31211 mod 87211 = 357.
           - 2468924 mod 384773 = 67350 ⇒ log246 67350 mod 384773 = 8924.

© Jorge Ramió Aguirre    Madrid (España) 2006

More Related Content

What's hot

Unidad III procedimientos
Unidad III procedimientosUnidad III procedimientos
Unidad III procedimientosaaronastorga4
 
3. algoritmos de ordenamiento interno
3. algoritmos de ordenamiento interno3. algoritmos de ordenamiento interno
3. algoritmos de ordenamiento internoFernando Solis
 
Algoritmos de busqueda - hash truncamiento
Algoritmos de busqueda - hash truncamientoAlgoritmos de busqueda - hash truncamiento
Algoritmos de busqueda - hash truncamientoLutzo Guzmán
 
Archivos secuenciales en PYTHON
Archivos secuenciales en PYTHONArchivos secuenciales en PYTHON
Archivos secuenciales en PYTHONHaylin Ellenes
 
Presentación inserción directa y binaria
Presentación inserción directa y binariaPresentación inserción directa y binaria
Presentación inserción directa y binariaClaudia Tona Castro
 
Informe sistemas empotrados
Informe   sistemas empotradosInforme   sistemas empotrados
Informe sistemas empotradosJoanita123
 
Heap sort (Monticulos)
Heap sort (Monticulos)Heap sort (Monticulos)
Heap sort (Monticulos)leidy2220
 
Cuadro comparativo lugo y tudare
Cuadro comparativo lugo y tudareCuadro comparativo lugo y tudare
Cuadro comparativo lugo y tudareJesus Barrios
 
Metodos De Ordenamiento
Metodos De OrdenamientoMetodos De Ordenamiento
Metodos De Ordenamientolichic
 
Modelo Entidad Relación
Modelo Entidad RelaciónModelo Entidad Relación
Modelo Entidad RelaciónSergio Santos
 
Varios Algoritmos Voraces De DecisióN Y OptimizacióN
Varios Algoritmos Voraces De DecisióN Y OptimizacióNVarios Algoritmos Voraces De DecisióN Y OptimizacióN
Varios Algoritmos Voraces De DecisióN Y OptimizacióNSalvador Fernández Fernández
 
ORDENAMIENTO POR INTERCAMBIO
ORDENAMIENTO POR INTERCAMBIOORDENAMIENTO POR INTERCAMBIO
ORDENAMIENTO POR INTERCAMBIOWilmer Quintero
 
Webinar : P, NP, NP-Hard , NP - Complete problems
Webinar : P, NP, NP-Hard , NP - Complete problems Webinar : P, NP, NP-Hard , NP - Complete problems
Webinar : P, NP, NP-Hard , NP - Complete problems Ziyauddin Shaik
 

What's hot (20)

Unidad III procedimientos
Unidad III procedimientosUnidad III procedimientos
Unidad III procedimientos
 
Árboles binarios, ABB y AVL
Árboles binarios, ABB y AVLÁrboles binarios, ABB y AVL
Árboles binarios, ABB y AVL
 
Funciones recursivas
Funciones recursivasFunciones recursivas
Funciones recursivas
 
3. algoritmos de ordenamiento interno
3. algoritmos de ordenamiento interno3. algoritmos de ordenamiento interno
3. algoritmos de ordenamiento interno
 
Unidad1 Lenguajes y automatas
Unidad1 Lenguajes y automatasUnidad1 Lenguajes y automatas
Unidad1 Lenguajes y automatas
 
Algoritmos de busqueda - hash truncamiento
Algoritmos de busqueda - hash truncamientoAlgoritmos de busqueda - hash truncamiento
Algoritmos de busqueda - hash truncamiento
 
Árboles Multicamino, B y B+
Árboles Multicamino, B y B+Árboles Multicamino, B y B+
Árboles Multicamino, B y B+
 
Archivos secuenciales en PYTHON
Archivos secuenciales en PYTHONArchivos secuenciales en PYTHON
Archivos secuenciales en PYTHON
 
Arboles M-Way, 2-3 y 2-3-4
Arboles M-Way, 2-3 y 2-3-4Arboles M-Way, 2-3 y 2-3-4
Arboles M-Way, 2-3 y 2-3-4
 
Presentación inserción directa y binaria
Presentación inserción directa y binariaPresentación inserción directa y binaria
Presentación inserción directa y binaria
 
Informe sistemas empotrados
Informe   sistemas empotradosInforme   sistemas empotrados
Informe sistemas empotrados
 
Heap sort (Monticulos)
Heap sort (Monticulos)Heap sort (Monticulos)
Heap sort (Monticulos)
 
Cuadro comparativo lugo y tudare
Cuadro comparativo lugo y tudareCuadro comparativo lugo y tudare
Cuadro comparativo lugo y tudare
 
Metodos De Ordenamiento
Metodos De OrdenamientoMetodos De Ordenamiento
Metodos De Ordenamiento
 
Modelo Entidad Relación
Modelo Entidad RelaciónModelo Entidad Relación
Modelo Entidad Relación
 
Complexity analysis in Algorithms
Complexity analysis in AlgorithmsComplexity analysis in Algorithms
Complexity analysis in Algorithms
 
COLAS
COLASCOLAS
COLAS
 
Varios Algoritmos Voraces De DecisióN Y OptimizacióN
Varios Algoritmos Voraces De DecisióN Y OptimizacióNVarios Algoritmos Voraces De DecisióN Y OptimizacióN
Varios Algoritmos Voraces De DecisióN Y OptimizacióN
 
ORDENAMIENTO POR INTERCAMBIO
ORDENAMIENTO POR INTERCAMBIOORDENAMIENTO POR INTERCAMBIO
ORDENAMIENTO POR INTERCAMBIO
 
Webinar : P, NP, NP-Hard , NP - Complete problems
Webinar : P, NP, NP-Hard , NP - Complete problems Webinar : P, NP, NP-Hard , NP - Complete problems
Webinar : P, NP, NP-Hard , NP - Complete problems
 

Viewers also liked

Sistemas operativos y recursos que administran
Sistemas operativos y recursos que administranSistemas operativos y recursos que administran
Sistemas operativos y recursos que administranBrahian Perlaza
 
Analisis y disenio de algoritmos
Analisis y disenio de algoritmosAnalisis y disenio de algoritmos
Analisis y disenio de algoritmosMayte dena
 
La teoria de la complejidad
La teoria de la complejidadLa teoria de la complejidad
La teoria de la complejidadanmcg
 
Domingo de pascua
Domingo de pascuaDomingo de pascua
Domingo de pascuaguest0071d9
 
Complejidad algoritmos
Complejidad algoritmosComplejidad algoritmos
Complejidad algoritmosffarren
 
Estructuras Algoritmicas: Ciclos o Bucles
Estructuras Algoritmicas: Ciclos o BuclesEstructuras Algoritmicas: Ciclos o Bucles
Estructuras Algoritmicas: Ciclos o BuclesLacoste
 
V Domingo de Pascua (Ciclo A) Reflexión
V Domingo de Pascua (Ciclo A) ReflexiónV Domingo de Pascua (Ciclo A) Reflexión
V Domingo de Pascua (Ciclo A) ReflexiónVíctor Hugo Salazar
 
complejidad computacional
complejidad computacionalcomplejidad computacional
complejidad computacionallourdesnbv
 
TeoríA AlgoríTmica
TeoríA AlgoríTmicaTeoríA AlgoríTmica
TeoríA AlgoríTmicaCindhy Celi
 
Teoría de complejidad computacional (tcc)
Teoría de complejidad computacional (tcc)Teoría de complejidad computacional (tcc)
Teoría de complejidad computacional (tcc)Raquel Nuñez
 
U1 Analisis Algoritmos Complejidad
U1 Analisis Algoritmos ComplejidadU1 Analisis Algoritmos Complejidad
U1 Analisis Algoritmos Complejidadrezzaca
 

Viewers also liked (17)

Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Complejidad de Algoritmos
Complejidad de AlgoritmosComplejidad de Algoritmos
Complejidad de Algoritmos
 
Complejidad de los Algoritmos
Complejidad de los AlgoritmosComplejidad de los Algoritmos
Complejidad de los Algoritmos
 
Estructura algorítmicas
Estructura algorítmicasEstructura algorítmicas
Estructura algorítmicas
 
Sistemas operativos y recursos que administran
Sistemas operativos y recursos que administranSistemas operativos y recursos que administran
Sistemas operativos y recursos que administran
 
Analisis y disenio de algoritmos
Analisis y disenio de algoritmosAnalisis y disenio de algoritmos
Analisis y disenio de algoritmos
 
La teoria de la complejidad
La teoria de la complejidadLa teoria de la complejidad
La teoria de la complejidad
 
Domingo de pascua
Domingo de pascuaDomingo de pascua
Domingo de pascua
 
Complejidad algoritmos
Complejidad algoritmosComplejidad algoritmos
Complejidad algoritmos
 
Estructuras Algoritmicas: Ciclos o Bucles
Estructuras Algoritmicas: Ciclos o BuclesEstructuras Algoritmicas: Ciclos o Bucles
Estructuras Algoritmicas: Ciclos o Bucles
 
V Domingo de Pascua (Ciclo A) Reflexión
V Domingo de Pascua (Ciclo A) ReflexiónV Domingo de Pascua (Ciclo A) Reflexión
V Domingo de Pascua (Ciclo A) Reflexión
 
complejidad computacional
complejidad computacionalcomplejidad computacional
complejidad computacional
 
TeoríA AlgoríTmica
TeoríA AlgoríTmicaTeoríA AlgoríTmica
TeoríA AlgoríTmica
 
AnáLisis De Algoritmos1
AnáLisis De Algoritmos1AnáLisis De Algoritmos1
AnáLisis De Algoritmos1
 
Teoría de complejidad computacional (tcc)
Teoría de complejidad computacional (tcc)Teoría de complejidad computacional (tcc)
Teoría de complejidad computacional (tcc)
 
332 presentacion grafos
332 presentacion grafos332 presentacion grafos
332 presentacion grafos
 
U1 Analisis Algoritmos Complejidad
U1 Analisis Algoritmos ComplejidadU1 Analisis Algoritmos Complejidad
U1 Analisis Algoritmos Complejidad
 

Similar to Teoría de la Complejidad Algorítmica

Teoria de la compleijidad algoritmica.pdf
Teoria de la compleijidad algoritmica.pdfTeoria de la compleijidad algoritmica.pdf
Teoria de la compleijidad algoritmica.pdfGustavoRojasValdivia2
 
Analisis de Algoritmos
Analisis de AlgoritmosAnalisis de Algoritmos
Analisis de Algoritmoszygdiaz
 
Resumen Complejidad Computacional y de Algoritmos
Resumen Complejidad Computacional y de AlgoritmosResumen Complejidad Computacional y de Algoritmos
Resumen Complejidad Computacional y de Algoritmosmarshalleitor
 
Introducción al análisis de algoritmos
Introducción al  análisis de algoritmosIntroducción al  análisis de algoritmos
Introducción al análisis de algoritmosAlvaro Enrique Ruano
 
Teoría De La Complejidad Algoritmica
Teoría De La Complejidad AlgoritmicaTeoría De La Complejidad Algoritmica
Teoría De La Complejidad AlgoritmicaRolf Pinto
 
Análisis de algoritmo
Análisis de algoritmoAnálisis de algoritmo
Análisis de algoritmoGaston Demundo
 
Informe técnico Unidad 7 Análisis de algoritmos (Rubí Veronica)
Informe técnico Unidad 7 Análisis de algoritmos (Rubí Veronica)Informe técnico Unidad 7 Análisis de algoritmos (Rubí Veronica)
Informe técnico Unidad 7 Análisis de algoritmos (Rubí Veronica)Rubi Veronica Chimal Cuxin
 
Analisis de algoritmos
Analisis de algoritmosAnalisis de algoritmos
Analisis de algoritmosrehoscript
 
Análisis de redes comercio mediante procesos de consenso
Análisis de redes comercio mediante procesos de consensoAnálisis de redes comercio mediante procesos de consenso
Análisis de redes comercio mediante procesos de consensoMiguel Rebollo
 
Tema 2 eficiencia y complejidad
Tema 2 eficiencia y complejidadTema 2 eficiencia y complejidad
Tema 2 eficiencia y complejidadCarlos A. Iglesias
 
Estructura de dato unidad 7
Estructura de dato unidad 7Estructura de dato unidad 7
Estructura de dato unidad 7lenithoz
 
Analisis de algoritmos tarea 2
Analisis de algoritmos tarea 2Analisis de algoritmos tarea 2
Analisis de algoritmos tarea 2Velmuz Buzz
 

Similar to Teoría de la Complejidad Algorítmica (20)

Teoria de la compleijidad algoritmica.pdf
Teoria de la compleijidad algoritmica.pdfTeoria de la compleijidad algoritmica.pdf
Teoria de la compleijidad algoritmica.pdf
 
08 compalgoritmos
08 compalgoritmos08 compalgoritmos
08 compalgoritmos
 
Complejidad
ComplejidadComplejidad
Complejidad
 
Notación Asintótica
Notación AsintóticaNotación Asintótica
Notación Asintótica
 
Analisis de Algoritmos
Analisis de AlgoritmosAnalisis de Algoritmos
Analisis de Algoritmos
 
Cap2.1
Cap2.1Cap2.1
Cap2.1
 
Resumen Complejidad Computacional y de Algoritmos
Resumen Complejidad Computacional y de AlgoritmosResumen Complejidad Computacional y de Algoritmos
Resumen Complejidad Computacional y de Algoritmos
 
Introducción al análisis de algoritmos
Introducción al  análisis de algoritmosIntroducción al  análisis de algoritmos
Introducción al análisis de algoritmos
 
Teoría De La Complejidad Algoritmica
Teoría De La Complejidad AlgoritmicaTeoría De La Complejidad Algoritmica
Teoría De La Complejidad Algoritmica
 
Análisis de algoritmo
Análisis de algoritmoAnálisis de algoritmo
Análisis de algoritmo
 
Informe técnico Unidad 7 Análisis de algoritmos (Rubí Veronica)
Informe técnico Unidad 7 Análisis de algoritmos (Rubí Veronica)Informe técnico Unidad 7 Análisis de algoritmos (Rubí Veronica)
Informe técnico Unidad 7 Análisis de algoritmos (Rubí Veronica)
 
Matematica computacional
Matematica computacionalMatematica computacional
Matematica computacional
 
Complejidad de Algoritmos
Complejidad de AlgoritmosComplejidad de Algoritmos
Complejidad de Algoritmos
 
Tema4
Tema4Tema4
Tema4
 
Analisis de algoritmos
Analisis de algoritmosAnalisis de algoritmos
Analisis de algoritmos
 
Análisis de redes comercio mediante procesos de consenso
Análisis de redes comercio mediante procesos de consensoAnálisis de redes comercio mediante procesos de consenso
Análisis de redes comercio mediante procesos de consenso
 
Tema 2 eficiencia y complejidad
Tema 2 eficiencia y complejidadTema 2 eficiencia y complejidad
Tema 2 eficiencia y complejidad
 
Estructura de dato unidad 7
Estructura de dato unidad 7Estructura de dato unidad 7
Estructura de dato unidad 7
 
Analisis de algoritmos tarea 2
Analisis de algoritmos tarea 2Analisis de algoritmos tarea 2
Analisis de algoritmos tarea 2
 
Guia Especial
Guia EspecialGuia Especial
Guia Especial
 

More from G Hoyos A

curvas elipticas
 curvas elipticas curvas elipticas
curvas elipticasG Hoyos A
 
correo seguro
 correo seguro correo seguro
correo seguroG Hoyos A
 
cifra flujo
 cifra flujo cifra flujo
cifra flujoG Hoyos A
 
gestion seguridad informatica
 gestion seguridad informatica gestion seguridad informatica
gestion seguridad informaticaG Hoyos A
 
calidad de la informacion
calidad de la informacioncalidad de la informacion
calidad de la informacionG Hoyos A
 
Cripto clasica
Cripto clasicaCripto clasica
Cripto clasicaG Hoyos A
 
Presentacion cripto transp_manuel_lucena
Presentacion cripto transp_manuel_lucenaPresentacion cripto transp_manuel_lucena
Presentacion cripto transp_manuel_lucenaG Hoyos A
 
Transposicion
TransposicionTransposicion
TransposicionG Hoyos A
 
Sellado de tiempo_timestamp
Sellado de tiempo_timestampSellado de tiempo_timestamp
Sellado de tiempo_timestampG Hoyos A
 
Protocolo gestor claves
Protocolo gestor clavesProtocolo gestor claves
Protocolo gestor clavesG Hoyos A
 
Problema rsa
Problema rsaProblema rsa
Problema rsaG Hoyos A
 
Número primo fuerte
Número primo fuerteNúmero primo fuerte
Número primo fuerteG Hoyos A
 
Metodo kasiski
Metodo kasiskiMetodo kasiski
Metodo kasiskiG Hoyos A
 
Modos de operación_de_una_unidad_de_cifrado_por_bloques
Modos de operación_de_una_unidad_de_cifrado_por_bloquesModos de operación_de_una_unidad_de_cifrado_por_bloques
Modos de operación_de_una_unidad_de_cifrado_por_bloquesG Hoyos A
 
Generador pseudoaleatorio de_números
Generador pseudoaleatorio de_númerosGenerador pseudoaleatorio de_números
Generador pseudoaleatorio de_númerosG Hoyos A
 

More from G Hoyos A (20)

curvas elipticas
 curvas elipticas curvas elipticas
curvas elipticas
 
correo seguro
 correo seguro correo seguro
correo seguro
 
cifra flujo
 cifra flujo cifra flujo
cifra flujo
 
gestion seguridad informatica
 gestion seguridad informatica gestion seguridad informatica
gestion seguridad informatica
 
calidad de la informacion
calidad de la informacioncalidad de la informacion
calidad de la informacion
 
Cripto clasica
Cripto clasicaCripto clasica
Cripto clasica
 
Presentacion cripto transp_manuel_lucena
Presentacion cripto transp_manuel_lucenaPresentacion cripto transp_manuel_lucena
Presentacion cripto transp_manuel_lucena
 
S box
S boxS box
S box
 
Xor
XorXor
Xor
 
Unixsec
UnixsecUnixsec
Unixsec
 
Transposicion
TransposicionTransposicion
Transposicion
 
Sellado de tiempo_timestamp
Sellado de tiempo_timestampSellado de tiempo_timestamp
Sellado de tiempo_timestamp
 
Protocolo gestor claves
Protocolo gestor clavesProtocolo gestor claves
Protocolo gestor claves
 
Problema rsa
Problema rsaProblema rsa
Problema rsa
 
Pki
PkiPki
Pki
 
Número primo fuerte
Número primo fuerteNúmero primo fuerte
Número primo fuerte
 
Metodo kasiski
Metodo kasiskiMetodo kasiski
Metodo kasiski
 
Modos de operación_de_una_unidad_de_cifrado_por_bloques
Modos de operación_de_una_unidad_de_cifrado_por_bloquesModos de operación_de_una_unidad_de_cifrado_por_bloques
Modos de operación_de_una_unidad_de_cifrado_por_bloques
 
Hc
HcHc
Hc
 
Generador pseudoaleatorio de_números
Generador pseudoaleatorio de_númerosGenerador pseudoaleatorio de_números
Generador pseudoaleatorio de_números
 

Teoría de la Complejidad Algorítmica

  • 1. Capítulo 8 Teoría de la Complejidad Algorítmica Seguridad Informática y Criptografía Ultima actualización del archivo: 01/03/06 Este archivo tiene: 31 diapositivas Material Docente de Dr. Jorge Ramió Aguirre v 4.1 Libre Distribución Universidad Politécnica de Madrid Este archivo forma parte de un curso completo sobre Seguridad Informática y Criptografía. Se autoriza el uso, reproducción en computador y su impresión en papel, sólo con fines docentes y/o personales, respetando los créditos del autor. Queda prohibida su comercialización, excepto la edición en venta en el Departamento de Publicaciones de la Escuela Universitaria de Informática de la Universidad Politécnica de Madrid, España. Curso de Seguridad Informática y Criptografía © JRA
  • 2. Capítulo 8: Teoría de la Complejidad Algorítmica Página 2 Introducción a la teoría de la complejidad La teoría de la complejidad de los algoritmos permitirá, entre otras cosas, conocer la fortaleza de un algoritmo y tener así una idea de su vulnerabilidad computacional. Complejidad Computacional Los algoritmos pueden clasificarse según su tiempo de ejecución, en función del tamaño u orden de la entrada. Hablamos así de complejidad: • Polinomial ⇒ comportamiento similar al lineal • Polinomial No Determinísta ⇒ comportamiento exponencial Esto dará lugar a “problemas fáciles” y “problemas difíciles” cuyo uso será muy interesante en la criptografía. © Jorge Ramió Aguirre Madrid (España) 2006
  • 3. Capítulo 8: Teoría de la Complejidad Algorítmica Página 3 Operaciones bit en la suma Si deseamos sumar dos números binarios n y m, ambos de k bits realizaremos k operaciones bit puesto que cada operación básica con los dígitos de una columna es una operación bit. • Recuerde que 0+0 = 0, 0+1=1, 1+0 = 1, 1+1 = 0 con bit 1 de acarreo. • Si un número tiene menos bits, se rellena con ceros por la izquierda. Ejemplo: encontrar el número de operaciones bit necesarias en la suma en binario de 13+7 ⇒ 1101 + 0111 (de k = 4 bits) 1 1 1 1 (bits de acarreo) 1 1 0 1 + 0 1 1 1 1 0 1 0 0 Cada operación básica que hacemos con una columna se conoce como operación bit, luego necesitamos k = 4 operaciones bit. © Jorge Ramió Aguirre Madrid (España) 2006
  • 4. Capítulo 8: Teoría de la Complejidad Algorítmica Página 4 Operaciones bit en la multiplicación Para la multiplicación de un número n de k bits por un número m de h bits, el número de operaciones bit será igual a 2∗k∗h. Suponemos que k ≥ h. • Recuerde que 0x0 = 0, 0x1=0, 1x0 = 0, 1x1 = 1. Ejemplo: encontrar el número de operaciones bit necesarias en la multiplicación en binario 10x5 ⇒ 1010 x 101 (4 y 3 bits) 1 0 1 0 x 1 0 1 1 0 1 0 0 0 0 0 + 1 0 1 0 (procedemos ahora a sumar) 1 1 0 0 1 0 Como cada operación básica entre dos bits es una operación bit, hemos realizado h∗k = 3∗4 multiplicaciones y luego k∗h = 4∗3 sumas, es decir en total 2∗k∗h = 24 operaciones bit. © Jorge Ramió Aguirre Madrid (España) 2006
  • 5. Capítulo 8: Teoría de la Complejidad Algorítmica Página 5 La función O(n) Las operaciones dependerán del tamaño de la entrada por lo que esta complejidad se expresará en términos del tiempo T necesario para el cálculo del algoritmo y del espacio S que utiliza en memoria, y se expresará mediante una función f (n), donde n es el tamaño de la entrada. Esta función será una aproximación pues el resultado exacto dependerá de la velocidad del procesador. f (n) = O(g(n)) Ejemplo Y se define así: f = O(n) ssi ∃ co,no / f(n) ≤ co∗g(n) http://www.mm.informatik.tu-darmstadt.de/courses/2002ws/ics/lectures/v14.pdf  © Jorge Ramió Aguirre Madrid (España) 2006
  • 6. Capítulo 8: Teoría de la Complejidad Algorítmica Página 6 Complejidad de una función f(n) Si f (n) = 4n2 + 2n + 5 ¿ f = O(n2)? ¿se cumple que co∗g(n) = co∗n2 ≥ f (n)? Sea co = 6 co no cono2 f (n) = 4n2 + 2n + 5 ¿co∗n2 ≥ f (n)? 6 1 6 11 No 6 2 24 25 No Se cumple 6 3 54 38 Sí siempre 6 4 96 77 Sí Luego, la complejidad de f (n) es exponencial. © Jorge Ramió Aguirre Madrid (España) 2006
  • 7. Capítulo 8: Teoría de la Complejidad Algorítmica Página 7 Tiempos de ejecución 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 es de tipo O(n); uno T2 que realiza 3n2+n+3 operaciones será de tipo O(n2), etc. • Para realizar la suma de la diapositiva anterior necesitamos O(n) = O(log n) operaciones bit y para el caso de la multiplicación, éstas serán O(n∗m) = O(log n ∗ log m) operaciones bit. + Operación binaria: n+m (de k bits cada uno) ∗ Operación binaria: n∗m (de k y h bits respectivamente) © Jorge Ramió Aguirre Madrid (España) 2006
  • 8. Capítulo 8: Teoría de la Complejidad Algorítmica Página 8 Algoritmos de complejidad polinomial • Un algoritmo se dice que tiene tiempo de ejecución polinomial (no confundir con lineal) si éste depende polinómicamente del tamaño de la entrada. • Si la entrada es de tamaño n y t es un entero, el número de operaciones bit será O(logt n). Ejemplos Si t = 1, el sistema es lineal Suma Si t = 2, el sistema es cuadrático Producto Máximo Común Si t = 3, el sistema es cúbico Divisor (Euclides) © Jorge Ramió Aguirre Madrid (España) 2006
  • 9. Capítulo 8: Teoría de la Complejidad Algorítmica Página 9 Ejemplo de complejidad polinomial 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 se incrementará sólo en log3 2 operaciones bit. Estos son los denominados problemas fáciles y son los que involucrarán un proceso de cifra y descifrado (o firma) por parte del o de los usuarios autorizados. © Jorge Ramió Aguirre Madrid (España) 2006
  • 10. Capítulo 8: Teoría de la Complejidad Algorítmica Página 10 Algoritmos de complejidad no determinista • Un algoritmo se dice que tiene tiempo de ejecución polinomial no determinista (en este caso exponencial) si éste depende exponencialmente del tamaño de la entrada. • Si la entrada es de tamaño n y t es un entero, el número de operaciones bit será O(nt). Ejemplo Para t = 2, será exponencial de orden 2 n! Para t = 3, será exponencial de orden 3 © Jorge Ramió Aguirre Madrid (España) 2006
  • 11. Capítulo 8: Teoría de la Complejidad Algorítmica Página 11 Ejemplo de complejidad no determinista Pregunta: El tiempo de ejecución de un algoritmo es O(n3). Si doblamos el tamaño de la entrada, ¿en cuánto aumentará este tiempo? Solución: En el primer caso el tiempo es O(n3) y en el segundo O((2n)3) = O(8n3). El tiempo para este sistema exponencial, se incrementará en 8 operaciones bit. Estos son los denominados problemas difíciles y son a los que deberá enfrentarse un criptoanalista o atacante que desea romper una cifra o la clave de un usuario. © Jorge Ramió Aguirre Madrid (España) 2006
  • 12. Capítulo 8: Teoría de la Complejidad Algorítmica Página 12 Comparativas de complejidad • Los algoritmos polinómicos y exponenciales se comparan por su complejidad O(nt). – Polinómico constante ⇒ O(1) – Polinómico lineal ⇒ O(n) – Polinómico cuadrático ⇒ O(n2) – Polinómico cúbico ⇒ O(n3) ... etc. – Exponencial ⇒ O(dh(n)) donde d es una constante y h(n) un polinomio Si suponemos un ordenador capaz de realizar 109 instrucciones por segundo obtenemos este cuadro: © Jorge Ramió Aguirre Madrid (España) 2006
  • 13. Capítulo 8: Teoría de la Complejidad Algorítmica Página 13 Tabla comparativa de tiempos Entrada O(n) O(n2) O(n3) O(2n) n = 10 10-8 seg 10-7 seg 10-6 seg 10-6 seg n = 102 10-7 seg 10-5 seg 10-3 seg 4∗1013 años n = 103 10-6 seg 10-3 seg 1 seg Muy grande Incrementos de un Computacionalmente orden de magnitud imposible Entrada/109: Para n = 100 ⇒ O(n2) = 1002/109 = 10-5 seg © Jorge Ramió Aguirre Madrid (España) 2006
  • 14. Capítulo 8: Teoría de la Complejidad Algorítmica Página 14 Problemas de tipo NP En criptografía nos interesan las funciones f(x) de un solo sentido, es decir:  Fácil calcular f(x) pero muy difícil calcular f-1(x) salvo que conozcamos un secreto o trampa. Porque dan lugar a problemas de tipo NP, polinomiales no deterministas, computacionalmente difíciles de tratar:  Problema de la mochila Definición del  Problema de la factorización problema y  Problema del logaritmo discreto ejemplos  Problema logaritmo discreto en curvas elípticas  Otros © Jorge Ramió Aguirre Madrid (España) 2006
  • 15. Capítulo 8: Teoría de la Complejidad Algorítmica Página 15 El problema de la mochila • Es un problema de tipo NP en el que el algoritmo debe realizar en cada paso una selección iterativa entre diferentes opciones. Enunciado: 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 (completa) con distintos elementos de ese conjunto sin repetir ninguno de ellos? http://en.wikipedia.org/wiki/Knapsack_problem  © Jorge Ramió Aguirre Madrid (España) 2006
  • 16. Capítulo 8: Teoría de la Complejidad Algorítmica Página 16 Ejemplo del problema de la mochila S = a1 + a2 + a3 A = {a1, a2, a3} Sea una mochila ¿Se incluye a1 en la suma S? a1 Los resultados son todos con 4 elementos Sí No distintos: una casualidad {2, 4, 9, 10} ¿Se incluye a2 en la suma?  ¿Cuántas sumas a2 a2 Sí No Sí No posibles hay? ¿Se incluye a3? Solución: 24 = 16 a3 a3 a3 a3 ∅, 2, 4, 6, Sí No Sí No Sí No Sí No 9, 10, 11, 12, 13, 14, 15, 16, S1 S2 S3 S4 S5 S6 S7 S8 19, 21, 23, 25. S1 = a1+a2+a3 S2 = a1+a2 S3 = a1+a3 S 4 = a1 Repítalo con {2, 4, 6, 10} S5 = a2+a3 S6 = a2 S7 = a3 S8 = ∅ Hemos tenido que evaluar 23 = 8 valores ⇒ (carácter exponencial) © Jorge Ramió Aguirre Madrid (España) 2006
  • 17. Capítulo 8: Teoría de la Complejidad Algorítmica Página 17 Interés de las mochilas en criptografía ¿Por qué tiene interés este problema en criptografía? a) Es de tipo NP completo: su resolución por lo general implica una complejidad exponencial. Luego, será difícil de atacar o criptoanalizar. b) Existe un caso en el que su resolución es lineal y, si la solución existe, ésta será única. Este caso se dará cuando A = {a1, a2, a3, .., an} está ordenado de menor a mayor de forma que ai es mayor que la suma de los aj que le preceden: a2 > a1; a3 > a1 + a2; a4 > a1 + a2 + a3; etc. Esto dará lugar a los criptosistemas de mochila tramposa que veremos en un próximo capítulo. © Jorge Ramió Aguirre Madrid (España) 2006
  • 18. Capítulo 8: Teoría de la Complejidad Algorítmica Página 18 Problemas usados en criptografía asimétrica Los problemas más usados en la criptografía asimétrica o de clave pública actualmente son: - El problema de la factorización de números grandes PFNG - El problema del logaritmo discreto PLD En estos casos, cuando los números son del orden de mil bits (unos 310 dígitos) su cálculo se vuelve computacionalmente imposible debido al tiempo que deberíamos emplear. Si lo desea, puede comprobar los ejemplos de las siguientes diapositivas usando el software de prácticas Fortaleza de libre distribución y que puede descargarlo desde esta dirección. http://www.criptored.upm.es/software/sw_m001e.htm  © Jorge Ramió Aguirre Madrid (España) 2006
  • 19. Capítulo 8: Teoría de la Complejidad Algorítmica Página 19 El problema de la factorización PFNG Dado un número n que es el resultado del producto de dos o más primos, se pide encontrar estos factores. Por ejemplo, cuando el valor n = p∗q es muy grande, el Problema de la Factorización de Números Grandes PFNG se vuelve computacionalmente intratable. No obstante, el caso inverso, dado dos números primos p y q, encontrar el resultado p∗q = n, se trata de un problema de tipo polinomial. Este problema se usará en la generación del par de claves del sistema de cifra con clave pública RSA. http://home.netcom.com/~jrhowell/math/factor.htm  © Jorge Ramió Aguirre Madrid (España) 2006
  • 20. Capítulo 8: Teoría de la Complejidad Algorítmica Página 20 Compruebe lo que significa el PFNG  Cálculo fácil o polinomial (función directa) Calcule “a mano” los siguientes productos de dos primos y tome el tiempo aproximado que tarda en la operación: a) 13∗31 b) 113∗131 c) 1.013∗1.031 calcule... No vale usar ¿Qué puede concluir calculadora... de estos cálculos?  Cálculo difícil o no polinomial (función inversa) Usando la criba de Eratóstenes, factorice en dos primos los siguientes números y vuelva a tomar el tiempo empleado: a) 629 b) 17.399 c) 1.052.627 calcule... En el caso a) son primos de 2 dígitos, en b) de 3 y en c) de 4. © Jorge Ramió Aguirre Madrid (España) 2006
  • 21. Capítulo 8: Teoría de la Complejidad Algorítmica Página 21 Solución al ejemplo anterior  Dificultad polinomial (rápido) a) 13∗31 = 403 b) 113∗131 = 14.803 c) 1013∗1031 = 1.044.403 A medida que aumenta el tamaño de la entrada, el tiempo de cálculo aumenta proporcionalmente con el número de dígitos.  Dificultad no determinista (lento) Paciencia, un computador va a a) 629 b) 17.399 c) 1.052.627 sufrir lo mismo ... Da igual que el algoritmo sea éste muy elemental u otro más eficaz; aquí resulta evidente que el tiempo de cálculo aumenta mucho al incrementar en un dígito los números en cuestión. Es no lineal. Solución: Los resultados a), b) y c) son el producto de los números primos inmediatamente superiores a los que se usaron en el cálculo polinomial es decir 17*37; 127*137; 1019*1033. © Jorge Ramió Aguirre Madrid (España) 2006
  • 22. Capítulo 8: Teoría de la Complejidad Algorítmica Página 22 El problema del logaritmo discreto PLD Dado un par de enteros α y β que pertenecen al Campo de Galois GF(p), se pide encontrar un entero x de forma tal que x = logα β mod p. Si el valor p es muy grande, el Problema del Logaritmo Discreto PLD es computacionalmente intratable. No obstante, el caso inverso, dado dos números α y x, encontrar β = αx mod p es un problema polinomial. Este problema se usará, entre otros, en la creación de las claves del sistema de cifra con clave pública ElGamal y en el protocolo de intercambio de clave de Diffie y Hellman. http://en.wikipedia.org/wiki/Discrete_logarithm  © Jorge Ramió Aguirre Madrid (España) 2006
  • 23. Capítulo 8: Teoría de la Complejidad Algorítmica Página 23 El PLD en su función directa o fácil  Cálculo fácil o polinomial (función directa) Calcule “a mano” las siguientes exponenciaciones mod p y tome el tiempo aproximado que tarda en la operación: a) 54 mod 7 b) 817 mod 41 c) 9211 mod 251 54 = 625 817 = 2.251.799.813.685.248 9211 = 3.996.373.778.857.415.671.808 Solución: Haciendo uso de la propiedad de reducibilidad 54 mod 7 = 2 vista en el apartado de matemáticas discretas, 817 mod 41 = 39 podrá bajar significativamente el tiempo de 9211 mod 251 = 217 cálculo. Este tiempo será de tipo polinomial según el tamaño de la entrada. © Jorge Ramió Aguirre Madrid (España) 2006
  • 24. Capítulo 8: Teoría de la Complejidad Algorítmica Página 24 El PLD y su función inversa o difícil  Cálculo difícil o no determinista (función inversa) Aunque existen varios algoritmos para este tipo de cálculos (al igual que para la factorización) use la fuerza bruta que se explica a continuación para encontrar los siguientes valores y vuelva a tomar el tiempo empleado: a) log5 2 mod 7 b) log8 39 mod 41 c) log92 217 mod 251 Aplicando fuerza bruta en el 1er caso (la base elevada a todos los restos de p) al final se obtiene que log5 2 mod 7 = 4. Solución: 51 mod 7 = 5 52 mod 7 = 4 53 mod 7 = 6 log5 2 mod 7 = 4 54 mod 7 = 2 55 mod 7 = 3 56 mod 7 = 1 log8 39 mod 41 = 17 En término medio deberá recorrer la mitad del log92 217 mod 251 = 11 espacio de valores para encontrarlo ...  © Jorge Ramió Aguirre Madrid (España) 2006
  • 25. Capítulo 8: Teoría de la Complejidad Algorítmica Página 25 Logaritmo discreto con α generador En el cuerpo p = 13, el 2 es un generador, luego: log2 1 mod 13 = 0 log2 2 mod 13 = 1 log2 3 mod 13 = 4 log2 4 mod 13 = 2 log2 5 mod 13 = 9 log2 6 mod 13 = 5 log2 7 mod 13 = 11 log2 8 mod 13 = 3 log2 9 mod 13 = 8 log2 10 mod 13 = 10 log2 11 mod 13 = 7 log2 12 mod 13 = 6 21 mod 13 = 2 22 mod 13 = 4 23 mod 13 = 8 24 mod 13 = 3 25 mod 13 = 6 26 mod 13 = 12 Es 27 mod 13 = 11 28 mod 13 = 9 29 mod 13 = 5 decir 210 mod 13 = 10 211 mod 13 = 7 212 mod 13 = 1 Se cumplirá siempre que a0 mod p = ap-1 mod p = 1. © Jorge Ramió Aguirre Madrid (España) 2006
  • 26. Capítulo 8: Teoría de la Complejidad Algorítmica Página 26 Logaritmo discreto con α no generador En p=13 el 2 30 mod 13 = 1 31 mod 13 = 3 32 mod 13 = 9 era generador, pero no así el 33 mod 13 = 1 34 mod 13 = 3 35 mod 13 = 9 número 3... 36 mod 13 = 1 37 mod 13 = 3 38 mod 13 = 9 Luego 39 mod 13 = 1 310 mod 13 = 3 311 mod 13 = 9 log3 1 mod 13 = 0 log3 2 mod 13 = NE log3 3 mod 13 = 1 log3 4 mod 13 = NE log3 5 mod 13 = NE log3 6 mod 13 = NE log3 7 mod 13 = NE log3 8 mod 13 = NE log3 9 mod 13 = 2 log3 10 mod 13 = NE log3 11 mod 13 = NE log3 12 mod 13 = NE NE: no existe el logaritmo discreto en ese cuerpo © Jorge Ramió Aguirre Madrid (España) 2006
  • 27. Capítulo 8: Teoría de la Complejidad Algorítmica Página 27 ¿Hay más funciones NP? Existen otros muchos problemas matemáticos que dan lugar a problemas del tipo NP, algunos de ellos basados en estas funciones unidireccionales one-way functions que tanto interesan en criptografía. Las dos últimas funciones vistas, la factorización de números grandes y el logaritmo discreto, son las que más uso tienen de momento en la criptografía actual. En la siguiente página Web encontrará una interesante lista con 88 problemas de tipo NP. http://www.csc.liv.ac.uk/~ped/teachadmin/COMP202/annotated_np.html  Fin del capítulo © Jorge Ramió Aguirre Madrid (España) 2006
  • 28. Capítulo 8: Teoría de la Complejidad Algorítmica Página 28 Cuestiones y ejercicios (1 de 2) • Deseamos sumar de forma binaria el número 15 (1111) y el número 10 (1010), ambos de k = 4 bits. Haga la suma binaria y verifique que el número de operaciones bit desarrolladas es k = 4. • Si multiplicamos en binario 1010∗11, donde k = 4 bits y h = 2 bits, compruebe que el número de operaciones bit realizadas es 2∗k∗h. • ¿Por qué son interesantes los problemas de tipo NP en criptografía? • Defina el problema de la mochila y su posible utilización en un sistema de cifra. • ¿Es siempre única la solución de una mochila? Piense sobre el particular y su trascendencia si las utilizamos sin ningún control en sistemas de cifra. • Factorice mentalmente el valor n = 143. Intente hacer lo mismo para n = 1.243. ¿Qué opina ahora del problema de la factorización? © Jorge Ramió Aguirre Madrid (España) 2006
  • 29. Capítulo 8: Teoría de la Complejidad Algorítmica Página 29 Cuestiones y ejercicios (2 de 2) • ¿Se le ocurre alguna forma de utilizar este problema de un solo sentido para cifrar información? • A partir de la ecuación β = xα mod p, defina el problema del logaritmo discreto. • Calcule 713 mod 31 = C usando la propiedad de reducibilidad. Compruebe con Fortaleza que el exponente 13 = log7 C mod 31. • ¿Qué utilidad le encuentra a este problema en criptografía? • ¿Qué relación existe entre generadores de un cuerpo, el conjunto completo de restos y el cálculo del logaritmo discreto? • ¿Qué sucede si deseamos encontrar un logaritmo discreto que no existe, por ejemplo log5 19 mod 31? Nota: si usa el software Fortaleza, deberá detener la operación al no contemplarse en su código este hecho . © Jorge Ramió Aguirre Madrid (España) 2006
  • 30. Capítulo 8: Teoría de la Complejidad Algorítmica Página 30 Prácticas del tema 8 (1/2) Software Fortaleza: http://www.criptored.upm.es/software/sw_m001e.htm  1. Encuentre el tiempo que tarda el programa en calcular los siguientes productos de primos: 23x61; 281x829; 3001x5477; 26317x63901. 2. Encuentre cuánto tarda el programa en realizar un producto de dos números de 300 dígitos cada uno. 3. Factorice por Pollard Rho los siguientes productos y encuentre el tiempo que tarda el programa: 1403; 232949; 16436477; 1681682617. 4. Factorice por Pollard Rho los números de 16 dígitos que se indican y observe el tiempo empleado: 3745667802664727; 4044773133465121; 3907781049017851; 41710432708253. Saque conclusiones. 5. ¿Cuánto tarda el programa en demostrar la primalidad de estos números 50000000000000000059; 500000000000000000000000000009; 5000000000000000000000000000000000000021; de 20, 30 y 40 dígitos? Compárelos con los tiempos de factorización y saque conclusiones. © Jorge Ramió Aguirre Madrid (España) 2006
  • 31. Capítulo 8: Teoría de la Complejidad Algorítmica Página 31 Prácticas del tema 8 (2/2) • Encuentre el tiempo que tarda el programa en calcular las siguientes potencias modulares: 351215 mod 3456; 782487652456 mod 34654783; 891278265367876254356758778234002462 mod 762488740981009687272345. • Si d = dígitos, ¿cuánto tiempo tarda el programa en calcular una potencia en los siguientes rangos de valores: 50d100d mod 100d; 50d100d mod 150d, 50d100d mod 200d, 50d100d mod 250d? Saque conclusiones. • Si d = dígitos, ¿cuánto tiempo tarda el programa en calcular una potencia en los siguientes rangos de valores: 50d25d mod 200d; 50d50d mod 200d, 50d75d mod 200d, 50d100d mod 200d? Saque conclusiones. • Compruebe las siguientes potencias y luego mediante los algoritmos de Búsqueda Exhaustiva, Paso Gigante - Paso Enano y Pohlig - Hellman, calcule el correspondiente logaritmo discreto. El módulo p es primo y α es un generador en p. Observe los tiempos de ejecución y saque conclusiones. - 401357 mod 87211 = 31211 ⇒ log401 31211 mod 87211 = 357. - 2468924 mod 384773 = 67350 ⇒ log246 67350 mod 384773 = 8924. © Jorge Ramió Aguirre Madrid (España) 2006

Editor's Notes

  1. NOTAS SOBRE EL TEMA:
  2. NOTAS SOBRE EL TEMA:
  3. NOTAS SOBRE EL TEMA:
  4. NOTAS SOBRE EL TEMA:
  5. NOTAS SOBRE EL TEMA:
  6. NOTAS SOBRE EL TEMA:
  7. NOTAS SOBRE EL TEMA:
  8. NOTAS SOBRE EL TEMA:
  9. NOTAS SOBRE EL TEMA:
  10. NOTAS SOBRE EL TEMA:
  11. NOTAS SOBRE EL TEMA:
  12. NOTAS SOBRE EL TEMA:
  13. NOTAS SOBRE EL TEMA:
  14. NOTAS SOBRE EL TEMA:
  15. NOTAS SOBRE EL TEMA:
  16. NOTAS SOBRE EL TEMA:
  17. NOTAS SOBRE EL TEMA:
  18. NOTAS SOBRE EL TEMA:
  19. NOTAS SOBRE EL TEMA:
  20. NOTAS SOBRE EL TEMA:
  21. NOTAS SOBRE EL TEMA:
  22. NOTAS SOBRE EL TEMA:
  23. NOTAS SOBRE EL TEMA:
  24. NOTAS SOBRE EL TEMA:
  25. NOTAS SOBRE EL TEMA:
  26. NOTAS SOBRE EL TEMA:
  27. NOTAS SOBRE EL TEMA:
  28. NOTAS SOBRE EL TEMA:
  29. NOTAS SOBRE EL TEMA:
  30. NOTAS SOBRE EL TEMA:
  31. NOTAS SOBRE EL TEMA: