El primer ejemplo sobre el cual presentaremos a los sistemas de
clave publica esta basado en un problema de ingenio
denomi...
Para resolver este problema no se conoce ningún método mejor que el ir
probando las distintas combinaciones de objetos y v...
Empecemos por inventar un sistema de clave privada que utilice ‘ Knapsacks ‘
Dado un mensaje lo pasamos a binario y tomamo...
este sistema tiene un problema: el receptor 'legal'
del mensaje pese a poseer el Knapsack aun tiene que
resolver el proble...
(1,3,5,11,21,44,87,175,349,701) es super-incrementante.
Con un vector super-incrementante resolver el problema de la mochi...
Lo que debemos lograr es identificar cual va a ser la clave privada y
cual va a ser la clave publica, para ello una vez qu...
Sea m=1590 Verificar que 1590 y 43 no tienen factores en común
t=43 (43 es primo y 1590 no es divisible por 43)
1590 y 43 ...
Para el Knapsack ejemplo anterior la clave publica es (tomando
solo 8 elementos para no hacer tantas cuentas, obviamente c...
Si este código es interceptado y sabiendo la clave publica no puede
hacerse nada para desencriptar el mensaje pues la clav...
Encriptacion por knapsacks
Próxima SlideShare
Cargando en…5
×

Encriptacion por knapsacks

108 visualizaciones

Publicado el

por:Juan Daniel Lectamo , Julian David chavez

Publicado en: Educación
0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
108
En SlideShare
0
De insertados
0
Número de insertados
3
Acciones
Compartido
0
Descargas
5
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.

Encriptacion por knapsacks

  1. 1. El primer ejemplo sobre el cual presentaremos a los sistemas de clave publica esta basado en un problema de ingenio denominado 'el problema de la mochila' Se tiene una mochila con capacidad para "K" kilos. Además se cuenta con una lista de "n" objetos cuyos pesos se conocen y son (A1,A2,A3,...,AN). El problema consiste en seleccionar una cierta cantidad de objetos de la lista de forma tal que la mochila quede completamente llena.
  2. 2. Para resolver este problema no se conoce ningún método mejor que el ir probando las distintas combinaciones de objetos y ver si en alguna de ellas la mochila queda completamente llena. Si los pesos de los objetos están en un vector (A1,A2,A3,...,AN) una combinación puede escribirse como un numero binario de N bits en el cual un uno en la posición "i" indica que el elemento "i" debe estar en la mochila, un cero indica lo contrario. Ej.: A=(3,45,6,7,21,12,9,90) C1=(00000001)=90 C2=(10101010)=3+6+21+9=39
  3. 3. Empecemos por inventar un sistema de clave privada que utilice ‘ Knapsacks ‘ Dado un mensaje lo pasamos a binario y tomamos bloques de "N" bits de acuerdo al tamaño del Knapsack, sumamos los elementos del Knapsack que corresponden a los bits en 1 y el numero resultante es la codificación del bloque. Ej.: Con bloques de 8 bits y usando el código Ascii si el vector es: (3,45,6,7,21,12,9,90) 'H' = 01001000 = 45 + 21 = 66 'o' = 01101111 = 45 + 6 + 21 + 12 + 9 + 90 = 183 'l' = 01101100 = 45 + 6 + 21 + 12 = 84 'a' = 01100001 = 45 + 6 + 90 = 141 'Hola' = 66,183,84,141
  4. 4. este sistema tiene un problema: el receptor 'legal' del mensaje pese a poseer el Knapsack aun tiene que resolver el problema de la mochila para poder descifrar el mensaje. La solución consiste en simplificar el problema de la mochila utilizando un vector super-incrementante: Un vector super-incrementante es aquel en el cual el elemento Ak es mayor a la sumatoria de todos los elementos con subíndice menor que él.
  5. 5. (1,3,5,11,21,44,87,175,349,701) es super-incrementante. Con un vector super-incrementante resolver el problema de la mochila es fácil, para un cierto numero lo que hay que hacer es tomar el primer elemento del vector menor o igual al numero y poner su bit en 1, luego al número restarle el elemento y con el resultado repetir el procedimiento hasta que el número se hace cero. Supongamos que tenemos el numero 734. Para 734: Como 734 > 701 => el bit numero 10 es 1 734-701 = 33 Para 33: 33 > 21 => el bit 5 es 1 33-21 = 12 Para 12 : 12 > 11 => el bit 4 es 1 12-11 = 1 Para 1 : El bit 1 es 1 Luego 734=(1001100001) = 1+11+21+701
  6. 6. Lo que debemos lograr es identificar cual va a ser la clave privada y cual va a ser la clave publica, para ello una vez que tenemos un vector super-incrementante lo que se hace es elegir dos números t y m forma tal que t y m no tengan factores en común. Al numero t lo denominamos multiplicador. Al numero m lo denominamos modulo. Además debemos encontrar un numero t' que sea el inverso multiplicativo de t usando aritmética modulo m.
  7. 7. Sea m=1590 Verificar que 1590 y 43 no tienen factores en común t=43 (43 es primo y 1590 no es divisible por 43) 1590 y 43 son relativamente primos. Para el inverso de t hacemos 1591/43 = 37 luego t'=37 (37 * 43 = 1591, 1591 mod 1590 = 1) Ahora lo que hacemos es aplicarle a cada elemento Ai del Knapsack la función Ai'= Ai*t mod m (1,3,5,11,21,44,87,175,349,701)=>(43,129,215,473,903,302,561,1165,69 7,1523)
  8. 8. Para el Knapsack ejemplo anterior la clave publica es (tomando solo 8 elementos para no hacer tantas cuentas, obviamente cuanto mayor es el vector mas seguro es el sistema) P = (43,129,215,473,903,302,561,1165) Supongamos que queremos encriptar 'Hola‘ 'H' = 01001000 = 129 + 903 = 1032 'o' = 01101111 = 129 + 215 + 903 + 302 + 561 + 1165 = 3275 'l' = 01101100 = 129 + 215 + 903 + 302 = 1549 'a' = 01100001 = 129 + 215 + 1165 = 1509 'Hola' = 1032,3275,1549,1509
  9. 9. Si este código es interceptado y sabiendo la clave publica no puede hacerse nada para desencriptar el mensaje pues la clave publica no es super-incrementante (aquí reside la gracia del asunto). La clave privada es t'=37 m=1590 Para desencriptar usamos la clave privada: 1032 * 37 mod 1590 = 24 3275 * 37 mod 1590 = 335 1549 * 37 mod 1590 = 73 1509 * 37 mod 1590 = 183 A continuación se convierte el vector publico en un vector super- incrementante utilizando la misma transformación.

×