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
aberracion para el "experto".
El motivo por el que esto existe es la
cantidad de tonterias que se
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 calculos por cada mensaje. La
ignorancia produce el
miedo, lee, aprende, y sientete seguro,
tienes motivos para ello.
(Esto no quiere decir que fies, pero si dudas
hazlo con fundamento)
Si quieres mas y mejor informacion te
recomiendo el LIBRO de Alfonso
Martin 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)
matematicos, 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 manipulacion. (usa el MD5)
El PGP permite que dos o mas personas se
comuniquen de manera cifrada
sin que tengan que pasarse claves por vias
seguras (como el tlf o
similar), tambien permite "firmar
digitalmente", ¿como logra esto?,
no es sencillo.
Empecemos por lo mas sencillo, todo el mundo
conoce los clasicos
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 rapido,
el solito elige
la clave aleatoriamente en cada mensaje
(tambien 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.
Aqui es donde entra el RSA, este algoritmo no
funciona con una clave
como la del algoritmo antes mencionado, si no
que usa dos. Podria
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
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 digitos), nuestra clave va a ser de
solo 11 bits de modulo
(el maximo del PGP son 2047) y de 7 bits de
exponente (no se cual
es el maximo).
Supongamos (todo ha sido elegido al azar como
ejemplo):
Mensaje a cifrar: 1234
Modulo: 4313
Esponente: 97
Lo que haremos (mos 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
division, 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 dara 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 unico que puedes hacer es
cojer y suponer que ese nº
es 1 hacer la operacion, ver el resultado, si
no es 739 suponer que
es 2 y asi 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 tambien, ¿como
saber cual es el bueno?, y eso que aqui los
nº son sencillos, en el
caso del PGP que son 128 bits ¡tardarias
trillones de gigaenios¡
Si lo pensais, os direis, 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 tendriamos 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 intencion 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
Cojeremos 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 division (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 sera
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 matematicos de la
comunidad internacional,
todos lo buscan (si lo encuentran se forran)
y nadie ha logrado
encontrar un sistema que no requiera morirse
calculando.
Despues de esto queda explicar, mas o menos,
como funciona el IDEA.
El IDEA:
Aqui explicare mas o menos lo que hace, para
que te hagas a la idea,
si quieres enterarte bien, pillate el libro
electronico de Alfonso
Martin.
El IDEA combina 3 operaciones matematicas
reversibles:
El OR exclusivo. (XOR) (se representa con un '$')
La suma. (se representa con un '+')
La multiplicacion. (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 multiplicacion de dos
operadores de 16 bits dara
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
coje el resultado de
la operacion 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
tambien le hacemos una
suma con el resultado del OR de los operandos
2-4 despues de
haberles sumado el resultado de la OR de el
resultado de la op. OR
con la ultima subclave mencionada, aqui hemos
llegado a la mitad de
la explicacion 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
tambien, el resultado sera 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 ningun problema
deshacer el proceso.
Y si no conoces la clave solo tienes que
ponerte a probar hasta que
te salga algo logico, 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, asi
que en la mitad de tiempo
como media podran encontrartela, pero siempre
habra algun gilipollas
que dira 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 unicamente 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 ireversible, la
informacion no es recuperable de
ninguna manera ya que hay perdida de
informacion.
El PGP lo usa para firmar y para añadir un
"CRC" de alta seguridad a
los mensajes para que estos en caso de
alteracion 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 tambien 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 ridiculo 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 tendra
nada que ver con la
anterior.
Si alguien quiere alterar un mensaje firmado
lo tiene muy facil, solo
tiene que cambiarlo y calcular el MD5, como
no sera igual que el que
firmo con el RSA el autor original tendra que
cambiar algo del
mensaje alterado y repetir el proceso, asi
hasta que lo encuentre,
como SOLO tardara unos pocos miles de
millones de años le sera
suficiente con un poco de paciencia.
FIN
Este texto es de libre distribucion siempre
que no se altere su
contenido ni el nombre del autor, se PROHIBE
TOTALMENTE su
traduccion al ingles salvo expresa
autorizacion del autor, la cual
solo se dara si un ingles traduce un texto
similar al Español.
El autor ni se hace responsable de nada, ni
ha sido el, ni nadie le
ha visto, ademas, no teneis 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
No hay comentarios:
Publicar un comentario
Deja tus opiniones y/o comentarios, nos sirven para mejorar nuestro blog, gracias