| *EL PGP EXPLICADO
PARA TONTOS* Por Antonio Galvez
Vamos a intentar explicar como funciona el PGP de tal manera que TODO el mundo lo pueda entender, el texto esta lleno de imprecisiones y deformaciones que lo hace entendible para el profano pero que son una aberración para el "experto". El motivo por el que esto existe es la cantidad de tonterías que sé oyen de vez en cuando sobre el PGP diciendo que no es seguro y que se puede romper, CLARO QUE SE PUEDE ROMPER, pero tras trillones de milenios de cálculos por cada mensaje. La ignorancia produce el miedo, lee, aprende, y siéntete seguro, tienes motivos para ello. (Esto no quiere decir que fíes, pero si dudas hazlo con fundamento) Si quieres mas y mejor información te recomiendo el LIBRO de Alfonso Martín que circula por la red, escrito en perfecto Español y que es lo mejor que hay gratis sobre criptografia en el mundo. (crip_amp.arj de mas de 2 megas) Empecemos: El PGP combina 3 algoritmos (procesos) matemáticos, para lograr: -Cifrar de forma "convencional". (usa el algoritmo IDEA) -Cifrar con criptografia de clave publica. (usa el RSA) -Hacer "CRC's" de alta seguridad contra manipulación. (usa el MD5)
El PGP permite que dos o más personas se comuniquen de manera cifrada sin que tengan que pasarse claves por vias seguras (como el tlf o similar), también permite "firmar digitalmente", ¨como logra esto?, no es sencillo.
Empecemos por lo más sencillo, todo el mundo conoce los clásicos cifradores en los que tu metes un texto por un lado, una clave por el otro y el resultado 'solo' puede ser descifrado si se conoce la clave.
El PGP usa este sistema por que es seguro y rápido, el sólito elige la clave aleatoriamente en cada mensaje (también puedes elegirla tu si usas el PGP como cifrador convencional), esta mide 128 bits pero tiene el problema de como hacer saber al receptor cual es la clave.
Aquí es donde entra el RSA, este algoritmo no funciona con una clave como la del algoritmo antes mencionado, si no que usa dos. Podría decirse que usa una para cifrar y otra para descifrar y que lo que una cifra SOLO la otra lo puede deshacer, ¨que como hace esto?, es muy curioso, allá va:
El RSA:
El RSA se basa en la exponenciacion y el modulo, supongamos que ya tenemos una pareja de claves RSA, una secreta y otra publica, queremos cifrar un n§ (al final todo, textos ASCII, programas ejecutables, etc, se reduce a n§ binarios), por ejemplo 1234 (en la practica es un valor de 128 bits lo que hace que el n§ tenga casi 40 dígitos), nuestra clave va a ser de solo 11 bits de modulo (el máximo del PGP son 2047) y de 7 bits de exponente (no se cual es el máximo). Supongamos (todo ha sido elegido al azar como ejemplo): Mensaje a cifrar: 1234 Modulo: 4313 Exponente: 97
Lo que haremos (mas o menos) es cojer el 1234 y multiplicarlo por si mismo un 97 veces, el resultado puede ser superior al n§ de gotas de agua que hay en el mar. A este resultado lo dividimos por 4313 hasta que el resultado sea menor de 4313 y no podamos dividir mas, entonces nos quedaremos con el resto de la división, supongamos que es 739.
Fijaros que ni siquiera sabiendo el valor del modulo y del exponente se puede saber cual fue el n§ que se cifr¢, puede ser casi cualquiera, desde 0 hasta el supuesto n§ de gotas del mar uno de cada 4313 valores dará el mismo resultado, calcularlos todos es tarea de dioses y es imposible discernir cual es el autentico.
Tu, viendo la salida, sabes que un n§ elevado a 97 y con un modulo de 4313 da 739, lo único que puedes hacer es cojer y suponer que ese n§ es 1 hacer la operación, ver el resultado, si no es 739 suponer que es 2 y así sucesivamente, pero te vas ha encontrar con que a lo mejor con el 2 va y te da 739, y con el 27 y con el 149 también, ¨como saber cual es el bueno?, y eso que aquí los n§ son sencillos, en el caso del PGP que son 128 bits tardarias trillones de gigaenios Si lo pensáis, os diréis, que entonces es imposible descifrar un mensaje cifrado con este sistema, este es el secreto del RSA, esos valores que he puesto como ejemplo (el del modulo y exponente) en realidad no se eligen tan al azar, el PGP en base a valores aleatorios (si no todos tendríamos la misma clave ¨no?) calcula una pareja modulo-exponente en base a la cual y a un sistema que ya no soy capaz de explicar (ni es la intención de este texto explicar el RSA en profundidad), determina otra pareja modulo-exponente que ES LA INVERSA de la anterior, es decir que si tu cojes el 739 y lo multiplicas por si mismo (lo elevas a la potencia) del exponente inverso del que hablamos antes y le restas el n§ inverso hasta que no puedas mas (es decir: le calculas el modulo) TE DARA EL VALOR ORIGINAL, me explico:
Supongamos que las inversas son: Modulo: 3727 Exponente: 31
Cogeremos el 739 lo elevamos a 31 (es decir, lo multiplicamos por si mismo treinta y una veces) y el resultadillo lo dividimos por 3727 y nos quedamos con el resto de la división (es decir: calculamos el modulo, o dicho de otra forma: le restamos 3727 hasta que no se pueda hacer mas y nos quedamos con el resultado), el resultado será 1234.
Naturalmente quien conozca la pareja modulo exponente publica NO puede calcular la privada sin dejarse la vida en ello, claro, o por lo menos de momento nadie lo ha logrado, y no hablo de hakers de 16 años, hablo de expertos matemáticos de la comunidad internacional, todos lo buscan (si lo encuentran se forran) y nadie ha logrado encontrar un sistema que no requiera morirse calculando.
Después de esto queda explicar, mas o menos, como funciona el IDEA.
El IDEA:
Aquí explicare mas o menos lo que hace, para que te hagas a la idea, si quieres enterarte bien, píllate el libro electrónico de Alfonso Martín.
El IDEA combina 3 operaciones matemáticas reversibles:
El OR exclusivo. (XOR) (se representa con un '$') La suma. (se representa con un '+') La multiplicación. (se representa con un 'x')
Primero divide el texto a cifrar el bloques de 64 bits, lo divide en 4 trozos de 16 bits y empieza la fiesta: Todas las operaciones se hace sobre 16 bits y el resultado es de 16 bits siempre. (la multiplicación de dos operadores de 16 bits dará un resultado de 16 bits)
Al primer cacho se le multiplica una subclave (luego cuento de donde salen), al segundo le suma otra subclave, al 3 lo mismo y al cuarto le hace lo mismo que primero, Luego se coge el resultado de la operación 1 y 3 y se les hace una XOR, lo mismo hacemos con el resultado de las operaciones 2 y 4, al resultado de la OR del 1-3 le multiplicamos otra subclave y el resultado lo sumamos al resultado del OR de los operandos 2-4 y también le hacemos una suma con el resultado del OR de los operandos 2-4 después de haberles sumado el resultado de la OR de el resultado de la op. OR con la ultima subclave mencionada, aquí hemos llegado a la mitad de la explicación de la primera ronda (son 8) y como me imagino que nadie se esta enterando, mejor lo dejamos y miramos el dibujito.
El algoritmo esta muy bien estudiado, si por ejemplo tu metes todo AAAAAAAAAA's con una clave cualquiera, por ejemplo todo AAAAAAA's también, el resultado será como un fichero comprimido, completamente aleatorio.
Las X1,2,3,4 son los 4 trozos del primer bloque de 64 bits. Las Z1,2,3,4,5,6 son las subclaves que se obtienen de la clave.
X1 X2 X3 X4 ³ ³ ³ ³ Z1Ä> x Z2Ä>+ Z3Ä>+ Z4Ä>x ³ ³ ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ >$<ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ ³ ³ ³ ³ ³ ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ>$< ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ Z5Ä>xÄÄÄÄÄÄÄÄÄÄÄ>+ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ +<ÄÄÄÄÄÄÄÄÄ x<ÄZ6 ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ ³ $<ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄ>$ ³ ³ ³ ³ ³ ³ ³ $<ÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ> $ ³ ÀÄÄÄÄÄÄÄĨ ÚÄÄÄÄÄÄÄÙ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĨ ³ ³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ ³ X'1 X'2 X'3 X'4
Esto se hace 8 veces, volviendo a meter la salida por la entrada y canbiando las subclaves, despues se aplica la transformacion de salida:
X'1 X'2 X'3 X'4 ³ ³ ³ ³ ³ ³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ ³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĨ ³ ³ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÙ ³ ³ Z'1Ä> x Z'2Ä> + Z'3Ä> + Z'4Ä> x ³ ³ ³ ³ Y1 Y2 Y3 Y4
Para obtener las subclaves se "cifra" clave original de 128 bits de una manera similar a como se hace con el mensaje.
Los bloques de 64 bits resultantes pueden ser usados para cifrar los bloques siguientes de varias formas para que todos se afecten a todos pero no si hace esto el PGP ni como lo hace.
El mensaje queda hecho un churro que no lo reconoce ni su padre, pero conociendo la clave no es ningún problema deshacer el proceso. Y si no conoces la clave solo tienes que ponerte a probar hasta que te salga algo lógico, como solo hay 2 elevado a 128 posibilidades si tienes una maquina capaz de resolver mil millones de IDEAS por segundo (vamos, ni el HAL 9000) tardaras 1.079.020.000.000.000 millones de años en encontrarlas todas, así que en la mitad de tiempo como media podrán encontrártela, pero siempre habrá algún gilipollas que dirá que el PGP se puede descifrar y no es seguro.
El PGP cambia la clave en cada mensaje eligiendo una aleatoriamente, excepto cuando se le usa como cifrador convencional, ese caso solo usa el IDEA y el MD5 únicamente y la clave la eliges tu.
El MD5.
Otro algoritmo que usa el PGP es el MD5, este algoritmo debe ser conocido para cualquier hacker que halla intentado crakear alguna password de linux o de otros sistemas ya que es un sistema muy usado. El MD5 no sirve para cifrar un mensaje ya que lo destruye completamente, el MD5 (o su hermano menor el MD2 o el MD4) "cifran" una entrada de forma irreversible, la información no es recuperable de ninguna manera ya que hay perdida de información. El PGP lo usa para firmar y para añadir un "CRC" de alta seguridad a los mensajes para que estos en caso de alteración sean rechazados.
EL mensaje entero se pone en la entrada del MD5, y la salida (normalmente 128 bits) se cifra con clave secreta del RSA y se pone al final. El destinatario como tiene la clave publica puede deshacer lo que hizo la clave secreta (leer mas arriba) y ver el "CRC" del MD5 no tiene mas que descifrar el mensaje, pasarlo también por el MD5 y comprobar que son iguales para saber si alguien ha cambiado un solo bit del mensaje original.
El MD5 divide la entrada en bloques de 512 bits (si es mas pequeño lo rellena con ceros) y les hace una serie de operaciones que dejan en ridículo al IDEA ya que estas no tienen por que ser reversibles se aplican con mucha mas fuerza, todos los bits de la entrada determinan los bits de salida, todos se afectan a todos, si varias uno solo de los bits de la entrada, la salida no tendrá nada que ver con la anterior.
Si alguien quiere alterar un mensaje firmado lo tiene muy fácil, solo tiene que cambiarlo y calcular el MD5, como no será igual que el que firmo con el RSA el autor original tendrá que cambiar algo del mensaje alterado y repetir el proceso, así hasta que lo encuentre, como SOLO tardara unos pocos miles de millones de años le será suficiente con un poco de paciencia.
FIN
Este texto es de libre distribución siempre que no se altere su contenido ni el nombre del autor, sé PROHIBE TOTALMENTE su traducción al ingles salvo expresa autorización del autor, la cual solo se dará si un ingles traduce un texto similar al Español. El autor ni se hace responsable de nada, ni ha sido él, ni nadie le ha visto, además, no tenéis pruebas...
EB4CAK Packet: EB4CAK@EA4EEN.EAM.ES.EU eb4cak@nos.ea4rct.ampr.org agalvezc@nexo.es PGP: 68 3A 7B 4E BC 6A 59 68 C6 82 36 BD FF 54 65 1E
|