|
v.1.0
25.10.2000 |
|
Criptografía |
|
La criptografía está de moda. En el mundo de hoy se
escucha hablar cada vez más de encriptación, de conexiones seguras y
contraseñas. Ya sea en el cajero automático o cuando el explorador nos
anuncia que estamos entrando a una "conexión segura", cada
día usamos sistemas encriptados sin darnos cuenta.
Para los profesionales que trabajan en informática
se va haciendo indispensable aprender los conceptos detrás de las
comunicaciones seguras, la encriptación y todo eso. En éste artículo
divulgativo colocaré algo de la teoría y la práctica de los métodos de
encriptación más conocidos, sus fortalezas y debilidades.
Algo particularmente atractivo de la criptografía es
que nunca será una disciplina más de la ingeniería. Se trata de un
arte por definición incierto, siempre existirá la posibilidad
de que un matemático, un linguista o un simple aficionado a los
acertijos rompa los criptosistemas más seguros, se trata de una continua
guerra de ingenio entre criptografos que hacen sistemas y
criptoanalistas que intentan romperlos.
Para comenzar algunos conceptos de la Teoría de la
Información del gran Claude Shannon, mencionados de la manera mas
concisa y simple posible.
|
|
1.- Cantidad de información |
|
Se considera como
información aquello que no es predecible, el ejemplo
clásico para ilustrar
este concepto es el siguiente: supongamos que tengo una bolsa con 9
bolas negras y una blanca. Sacando una bola quiero predecir el color de
la bola siguiente: Si saco una negra esto me dará mínima información, si
saco una blanca la información obtenida será máxima, ya que puedo
asegurar que la siguiente bola va a ser negra. Desde otro punto de
vista, después que saco la bola blanca la información contenida dentro
de la bolsa es cero. Hay certeza, sin necesidad de mirar, que todas las
demás bolas son negras.
Conocemos más información sobre un hecho
mientras mayor sea el número de posibilidades distintas de ocurrencia,
por ejemplo si sabemos el número ganador de la lotería conoceremos más
información que si sabemos el número que saldrá en la ruleta y mucha más
que si conocemos si una moneda saldrá cara o sello. Es decir que la
información es una medida de disminución de incertidumbre sobre un
proceso. En otras palabras la cantidad de información es cuantificable,
mientras más incertidumbre, más información contiene el objeto,
mientras menos incertidumbre, más información posee el sujeto que
observa.
Pasemos ahora a
un ejemplo de criptografía. Supongamos que tenemos un texto plano (sin
codificar) y su correspondiente texto codificado por un método que use
una clave K para hacer la transformación. si tuviéramos una máquina de
capacidad ilimitada que pudiese analizar estadísticamente todas las
posibles transformaciones y si repitiéramos el proceso con distintos
mensajes cifrados con la misma clave, podríamos encontrar la clave más
probable por análisis estadístico. Hay sin embargo ciertas claves que
hacen este análisis teóricamente imposible, son las que cumplen la
condición del Criptosistema Seguro de
Shannon.
Sin embargo estas
claves no tienen utilidad práctica ya que deben ser igual o más largas
que el propio mensaje lo que las haría vulnerables a su vez al igual que
al mensaje original. Conclusión, el Criptosistema Seguro de
Shannon no es útil en la práctica y todos los sistemas reales son,
al menos en teoría, vulnerables ante un análisis estadístico como el
descrito |
|
2.-Redundancia |
|
Supongamos que leemos el siguiente
texto
e_ _u_stro ej_mplo
a_ter_or
no es difícil deducir que la frase original
era "en nuestro ejemplo anterior" simplemente lo hacemos sacando
información del contexto, de las letras adyacentes. Todos los lenguajes
naturales son redundantes, es decir trasmiten más información que la
estrictamente necesaria y esta redundancia puede ser matemáticamente
medida y estadísticamente analizada. Esta redundancia es lo que se
aprovecha en los programas que comprimen la información como por ejemplo
el Winzip, podríamos almacenar, por ejemplo, los trozos de palabras que
más se repiten como un solo símbolo de manera similar a como hacen los
taquígrafos, etc.
Otro uso de la redundancia son los chequeos de
redundancia cíclica (CRC) que permiten chequear si un bloque de
información ha sufrido o no cambios durante su transmisión (errores de
transmisión por ejemplo)
Los ataques a texto cifrado por fuerza
bruta se basan en gran medida en análisis de la redundancia (se sabe que
letras o combinaciones son las que más se repiten en un determinado
idioma por ejemplo), pero si comprimimos el texto antes de cifrarlo lo
hacemos invulnerable a esta clase de análisis
|
|
3.- Confusión y difusión |
|
Por definición existe una relación entre el
texto plano y el cifrado, esta relación está dada por la clave, la
confusión consiste en ocultar esta relación y hacer que sea muy difícil
de encontrar. El mecanismo básico de confusión es la sustitución donde
un caracter se sustituye por otro, para esto pueden emplearse métodos
simples o muy complejos.
La difusión consiste en disminuir la
significancía del texto adyacente mediante trasposiciones, esto se logra
básicamente cambiando de orden trozos dentro de un texto para que no
puedan ser deducidos a partir del
contexto.
|
|
4.- Números grandes y aritmética modular |
|
Los números grandes son usados en los
sistemas de clave pública para hacer difícil que pueda determinarse una
clave privada a partir de la publica. Hay una relación matemática
conocida entre ambas claves el punto es que es muy difícil de calcular,
particularmente en el algoritmo RSA se trata de factorizar un número
primo grande, hasta el momento no se conocen medios prácticos para
hacerlo dado un número lo suficientemente grande.
Factorizar es un problema inverso a multiplicar,
dado un número N se trata de encontrar un conjunto de números primos p1,
p2...pn tales que multiplicados den N, no existen en matemáticas
algoritmos eficientes para determinar estos factores primos dados
ciertos valores de N.
La aritmética modular se usa en las
operaciones de cifrado y descifrado por la característica de tener
algoritmos perfectamente reversibles, es decir que tienen su
correspondiente función inversa lo que es ideal para
codificar-decodificar.
|
|
5.-
Números al azar |
|
El azar es, en palabras simples, lo
que no podemos predecir. Nuestra idea intuitiva del azar se relaciona
con tirar una moneda al aire o la bolita de la ruleta, debemos
comprender sin embargo, que si creemos en un mundo regido por causas y
efectos el verdadero azar no existiría en la naturaleza. La moneda al
aire o la bolita de la ruleta dado un número suficientemente grande de
registros terminan marcando alguna tendencia significativa. Con la
llegada de los computadores y su gran capacidad de cálculo se hace más
fácil determinar estas tendencias sobre largas series.
¿Que tienen que ver las secuencias al azar con la
criptografía?. En los sistemas criptográficos modernos no se usa siempre
la misma clave, sino que se genera una clave de sesión, al azar, cada
vez que se encripta un mensaje. Es indispensable que esta clave sea
realmente impredecible, ya que si alguien externo pudiera dar con la
secuencia de generación toda la seguridad del sistema quedaría
comprometida.
Es teóricamente imposible generar una
secuencia completamente aleatoria (al azar) por medio de un programa en
un computador, a lo más se pueden generar series largas muy dispersas
pero llegado cierto punto siempre terminan repitiéndose por la
naturaleza determinística de todo algoritmo.
Para solucionar este problema y crear secuencias lo
más aleatorias posibles se tiene que disponer de un número inicial (o
semilla) que se genere por un proceso genuinamente al azar, a partir del
cual se genere el resto de la serie. Puede entonces escribirse un
algoritmo que partiendo de esa semilla genere una buena serie
seudo-aleatoria y que resulte prácticamente imposible de predecir para
quien no conozca la semilla o número inicial.
Para generar esta semilla se ocupa normalmente las
posiciones registradas por el movimiento del mouse durante unos
segundos, el reloj interno del computador o el "ruido blanco" generado
por la tarjeta de sonido; con cualquiera de estos fenómenos se puede
crear un número aleatorio que sirve como semilla.
|
|
6.- Claves débiles |
|
Como
hemos visto un criptosistema produce un texto cifrado a partir de un
texto plano, la relación que permite cifrar y descifrar es un tercer
texto o número llamado clave. No debe confundirse la clave con el
password que da acceso al usuario para generarla, normalmente la clave
es generada automáticamente por el sistema y en sistemas de clave
pública como PGP es distinta y aleatoria para cada mensaje. El password
solo da acceso al usuario para "encender" el proceso.
Algunos
criptosistemas tienen, sin embargo, claves débiles, que generan cifrados
de muy baja seguridad, o semi-débiles que generan cifrados vulnerables,
puede darse el caso extremo que una clave deje el texto plano tal cual y
no lo encripte en lo absoluto. Estas claves débiles son, sin embargo,
conocidas y existen mecanismos para evitar su uso en caso de que sean
generadas |
|
7.-
Algoritmos asimétricos o de clave pública |
|
En un algoritmo de clave pública
cada parte tiene dos claves, una privada que usa para desencriptar
los mensajes que recibe y también para firmar los que envía y
una clave pública, conocida por todos, que permite que los demás
encripten los mensajes que le envían, estos mensajes así
encriptados solo él pueden ser descifrados por el destinatario,
quien posee la correspondiente clave privada.
Ejemplo: Juan tiene
las claves (Cpriv_Juan) (Cpub_Juan) y Pedro tiene las claves (Cpriv_Pedro) (Cpub_Pedro), además Juan tiene (Cpub_Pedro) y Pedro tiene (Cpub_Juan)
Juan le envía un mensaje a
Pedro, lo encripta con (Cpub_Pedro) y Pedro
lo descifra con (Cpriv_Pedro)
También podría mandarle
un mensaje firmado, para ello lo encripta con (Cpub_Pedro) y lo firma con (Cpriv_Juan), Pedro leería la firma con (Cpub_Juan) y podría estar seguro que solo Juan
pudo mandar ese mensaje (ninguna otra persona sabría como generar la
firma de Juan)
En resumen es el medio ideal para enviarse
mensajes encriptados entre dos personas que no se conocen y no tienen
forma segura de enviarse una clave secreta común, por eso estos sistemas
resultan tan útiles en Internet. Los inventores del concepto de clave
pública (o asimetrica) fueron Diffie y Hellman en 1990.
El algoritmo estrella de encriptación asimetrica hoy
es el RSA (por sus inventores Rivest, Shamir, Adleman) es a la vez el
más sencillo, fácil de implementar y hasta el momento ha soportado todos
los ataques conocidos cuando se usan claves lo suficientemente largas
(por ejemplo 1024 bits o más)
La mayor vulnerabilidad conocida del algoritmo RSA
tiene que ver con el largo de las claves, el propio Shamir presentó en
1999 un método que ponía en peligro al RSA con claves de 512 bits o
menos, hoy se considera "muy seguro" al RSA con claves de 1024
bits.
RSA es un cifrador de bloque, es decir crea bloques
de longitud fija, si faltan datos para completar un bloque usualmente el
faltante se rellena con ceros.
|
|
8.- Firmas
digitales |
|
La firma digital sirve, como dijimos antes,
para autentificar un mensaje, o sea para asegurar que el que lo mandó
tenía acceso a la clave privada que firma. La firma digital se genera
creando un resumen del mensaje, comprimiéndolo en un bloque pequeño de
longitud fija
La particularidad de este resumen (o función Hash)
es que resulta único para cada texto plano: no importa que el texto
tenga varios miles de bits, basta con cambiar un bit cualquiera para que
se genere un resumen distinto. Esta es una propiedad sorprendente pero
está matemáticamente demostrado que es posible y, de hecho se usa
ampliamente para las firmas digitales.
Esta firma o resumen se encripta con nuestra clave
privada y es desencriptado y chequeado por el que tiene nuestra clave
pública. Solo nosotros, con nuestra clave privada podemos crear un
resumen (o firma digital) que puede ser desencriptado por cualquiera que
tenga nuestra clave pública. Así, si un mensaje tiene nuestra "firma
digital" el destinatario podrá estar seguro que solo alguien con acceso
a mi clave privada (yo) pudo enviarlo. El algoritmo estrella para
producir firmas digitales hoy es el SHA, creado por la Agencia de
Seguridad Nacional de USA, que se considera seguro y libre de "puertas
traseras" (brechas ocultas de seguridad, que, eventualmente,
permitirían a la NSA romper la codificación)
¿No podría falsificarse una firma digital
simplemente copiando y pegando el bloque de texto a otro mensaje?. No.
Porque la firma contiene información (el "resumen del mensaje" o "hash
de una vía") acerca del texto que está firmando. Si el mensaje es
distinto en un solo bit del que fue usado para originar la firma esta
será rechazada. Así vemos como la firma digital nos da una seguridad
mayor aún que una firma en papel porque garantiza la integridad del
contenido, no podemos firmar digitalmente un documento en blanco y
después llenarlo, como tampoco podemos "cortar y pegar" una firma
digital.
Incluso se puede firmar un texto no encriptado, como
en el ejemplo siguiente:
-----BEGIN PGP SIGNED MESSAGE----- Hash:
SHA1
Este es un ejemplo de documento firmado, sin encriptar.
cualquier cambio que se le haga con un editor causará un error de
verificación al pasar por PGP
-----BEGIN PGP
SIGNATURE----- Version: PGPfreeware
6.0.2i
iQA/AwUBOfiSiynKvl3sv06mEQK5MgCdHJgD8Bh5sIJfSLPEg2HFmLdyen4AoMuv YqwdJXq892sNh3xJL/pKo+L3 =5pIW -----END
PGP SIGNATURE-----
Cualquiera que tenga mi clave pública y el PGP
`puede verificar el bloque anterior, si le cambian aunque sea un
espacio, la firma no se verificará correctamente
|
|
9.-
PGP |
|
Aquí llegamos a la
parte práctica. Todos los conceptos vistos anteriormente tienen su
expresión práctica en el programa Pretty Good Privacy (Privacidad
Bastante Buena) creado por Phill Zimmermann, que es el estándar de facto
usado para la encriptación de e-mails, discos duros, comunicaciones de
voz y muchas otras aplicaciones.
PGP puede descargarse gratuitamente de http://www.pgpi.com y sus versiones más populares son la 2.6i (para MS-DOS) y la
actual 6.0.2i (para Windows 9x). También existen versiones de PGP para
Macintosh, Unix, Linux y para casi cualquier sistema operativo actual
medianamente popular.
Desde el punto de vista del usuario PGP tiene un
sistema muy cómodo para gestionar las claves (que es lo que más enredos
causa en los sistemas de clave pública), almacenándolas en dos archivos:
secring.skr (que almacena las claves privadas) y pubring.pkr (que
almacena las claves públicas). Podemos pensar en estos dos archivos como
"llaveros" donde guardamos nuestras llaves privadas, públicas y las
llaves públicas de los demás. Obviamente si se nos pierde secretring.pgp
(por ejemplo si se nos borra) no podremos desencriptar ni encriptar
ningún mensaje, por lo que es buena idea guardar una copia en un lugar
seguro.
También PGP guarda la "semilla" para generar
nuestras claves aleatorias en el archivo randseed.bin, ese es otro
archivo importante que no debiera quedar expuesto al robo. Si
randseed.bin se borra PGP creará otro automáticamente usando el reloj
interno del PC, igual es recomendable guardar una copia en un lugar
seguro.
PGP tiene además la utilísima función llamada
"armadura ASCII" que consiste simplemente en convertir los archivos
encriptados de cualquier tipo en ficheros de texto ASCII. Por ejemplo un
archivo binario como un programa puede encriptarse y convertirse en
texto ASCII que se puede enviar como simple texto por correo
electrónico
Una clave de PGP contiene:
- la secuencia binaria creada para la sesión
específica
- la identificación del dueño de la clave
(nombre+e-mail)
- un número que identifica a la clave
- la fecha de expiración
- la versión de PGP con que fue
generada
- la "huella digital" que es un número hexadecimal
como, por ejemplo:
17AF BAAF 2106 4E51 3F03 7E6E 63CB 691D FAEB
D5FC
¿Para que sirve la huella digital? supongamos que yo
recibo una clave pública de Juan Pérez y no estoy seguro si es realmente
la suya o me la envió un impostor que lo suplanta (esto se conoce como
el "ataque del hombre de en medio"). Para asegurarme puedo llamar por
teléfono a Pérez, por ejemplo, y pedirle que me dicte la huella digital,
si coinciden ambas entonces puedo saber que la clave que he recibido es
auténtica
|
|
10.- Como
funciona el PGP |
|
Curiosamente, recién me doy cuenta que no
he hablado de la criptografía de clave privada (o simetrica). Bueno, esa
es más sencilla porque se trata de que tanto el emisor como el receptor
usan la misma clave para encriptar y desencriptar. Este método tiene
varias ventajas respecto de los pares de clave privada/pública, la
principal es que se obtiene mayor seguridad con claves mas cortas (de
menos bits) y una desventaja básica: que no se puede enviar la misma
clave por un medio inseguro como es Internet sin correr el riesgo de que
alguien la intercepte y se la apropie, con lo que podría leer todos
nuestros mensajes.
PGP es un sistema mixto, pues cada vez que se
codifica un mensaje, primero se comprime el texto plano (para evitar la
redundancia), luego se genera una clave de sesión (aleatoria) y
con esta clave de sesión se encripta el mensaje. La clave luego se
encripta usando la clave publica del destinatario. Este paquete de clave
de sesión (encriptada con la clave pública del destinatario), texto
(comprimido y encriptado con la clave de sesión) y a veces firma
(encriptada con la clave privada de quien envía) se llama ciphertext y
es lo que se envía por Internet. El receptor desencripta la clave de
sesión con su clave privada y usando esta clave de sesión desencripta el
mensaje, se descomprime y queda listo para ser leído.
O sea el mensaje se encripta y desencripta con la
misma clave de sesión (método simétrico o de clave privada) pero para
enviar las claves de sesión se encriptan con el par de claves
pública-privada.
Si usamos PGP 5x o superior, el algoritmo simétrico
(el de la clave de sesión) usado por PGP puede ser cualquiera de estos
tres:
- CAST: clave de 128 bits, rápido, bien diseñado,
su desventaja: es relativamente nuevo y no ha sido sometido a ataque
durante mucho tiempo. Tiene patentes pendientes pero existe el
compromiso de sus creadores de dejar una versión libre en cualquier
caso.
- Triple-DES: clave de 168 bits, el algoritmo DES,
publicado por IBM en los 70s aplicado tres veces lo hace un sistema
muy robusto, tal como los otros dos algoritmos no se sabe de nadie que
haya logrado romperlo a la fecha. No está protegido por patentes, es
el más lento de los tres
- IDEA: clave de 128 bits. el algoritmo fue
publicado en 1990 y ha soportado toda clase de ataques desde esa
fecha, probablemente obtenga patente lo que podría ser un problema
para su uso futuro
Por defecto se usa CAST pero podría escogerse
cualquiera de los tres con Launch PGP Keys, Edit, Preferences,
Advanced
A su vez, según el tamaño de nuestra clave será la
clave pública usada para encriptar la clave de sesión
- RSA key pair para claves pequeñas, por ej. 768
bits (seguridad débil), esta funciona con PGP 2.xx
- DH/DSS key pair para claves grandes, por ej.
1024/2048 bits. El PGP 5.xx y superiores generan por defecto estas
claves, pero también aceptan y generan claves RSA por razones de
compatibilidad
Para la firma digital PGP usa el algoritmo SHA que
crea la función Hash requerida.
Finalmente podemos preguntarnos ¿que son al fin y al
cabo las claves?, en PGP las claves son números enormemente grandes, por
ejemplo una clave de 1024 bits es un número binario ¡de 1024
cifras! o sea su cifra máxima es 2 elevado a 1024 lo que equivale
a un número decimal con varios cientos de cifras, solo como ejemplo, se
estima que el número de átomos que contiene la Vía Láctea es de 2
elevado a 223, creo que sobran comentarios.
|
|
11.- El
enredado problema de la confianza |
|
Una de las principales virtudes del PGP (así como de
todos los sistemas de clave pública) es que permite establecer un canal
de comunicación seguro entre dos personas que no se conocían
previamente, que están físicamente distanciados y que no pueden
intercambiar una clave "por mano". O sea puedo establecer una
comunicación encriptada con personas que uno solo conoce por
e-mail.
Sin embargo sabemos lo fácil que resulta suplantar a
alguien con un e-mail falso, esto hace posible el "ataque del hombre de
en medio" donde, por ejemplo, juan me envía una falsa clave públñica
haciéndose pasar por Pedro y puede leer cómodamente todos mis mail que
envío (según creo yo) a Pedro, pues tiene la clave privada
correspondiente.
Para evitar este ataque, que es imposible de tratar
por medios computacionales se han ideado una complicada serie de
validaciones y certificados digitales para asegurarse que las claves son
realmente de quienes dicen ser. Así hay distintos niveles de "validez" o
"confianza" (Trust) en una clave. Si yo recibo la clave de Pedro por
correo electrónico, por ejemplo, y no trae ninguna firma en la que yo
tenga "confianza" la clave aparecerá en mi llavero como "no válida"
(barra de Trust transparente).
Eso no significa que no funcione sino que solo
indica que no hay nadie de confianza que me certifique que esa clave es
realmente la de Pedro (en el llavero mostrado en la figura de más abajo
la clave de Jorge Figueroa aparece marcada como "no
válida").
Si, por ejemplo yo llamo por teléfono a Pedro y
confirmo que la "fingerprint", el número de identificación y el
tamaño de la clave que tengo coincide con la que él me dicta,
entonces tendré confianza en la validez de esa clave y yo mismo la puedo
firmar (Keys, Sign) con lo que la clave quedará "validada" con mi firma
y alguien que tenga confianza en mí o me conozca personalmente tendrá
también confianza en que la clave de Pedro es auténtica. El mecanismo es
bastante enredado pero todavía no se inventa un medio mejor de eliminar
el riesgo del "hombre de en medio"
¿Es posible que alguien genere un par de claves
falsas con mi nombre? claro que si, cualquiera puede crear un par de
claves y ponerle el nombre que se le ocurra, también, si tiene los
medios y conocimientos suficientes podría replicar cualquiera de los
otros atributos de la clave auténtica tales como el identificador o la
fingerprint (huella digital).
Si embargo no es posible
modificarlos todos a la vez, así al verificar la autenticidad de una
clave (chequeandola por ejemplo por teléfono con el dueño) debemos
comparar: * el identificador * el fingerprint * el tamaño Si
coinciden estos tres puntos podemos estar seguros que la clave no es
falsificada |
|
12.-
Debilidad del párrafo secreto en PGP |
|
Actualmente, el mejor ataque posible contra
PGP consiste en atacar con diccionario buscando el párrafo secreto. En
este tipo de ataque un programa toma palabras de un diccionario y las
junta de diferentes maneras intentando adivinar el párrafo
secreto.
Por esto es fundamental escoger un buen párrafo, muchos
de estos programas son muy sofisticados y toman ventaja de los dichos,
refranes populares y reglas de la gramática para armar sus frases, las
frases de una sola palabra, nombres propios (especialmente si son
famosos), frases célebres, etc. son usualmente crackqueables por uno de
estos programas.
En http://www.voicenet.com/~markm/pgpcrack.html
se puede encontrar más información sobre uno de estos programas que
intentan adivinar el párrafo secreto.
Algunas características de un buen párrafo secreto
son:
- Evitar el uso de idioma inglés - Mínimo 12
caracteres - Incluir letras, números, espacios y signos de
puntuación - Mayúsculas y minúsculas - Frases que contengan
palabras indígenas o poco conocidas - Evitar significados
convencionalmente conocidos (frases o nombres famosos, referencias
personales, etc.) -Evitar a toda costa las referencias personales a
uno mismo (nombres propios de familiares, fechas de nacimiento, número
de teléfono etc.)
Siempre existirán métodos para obtener párrafos
secretos sin recurrir al criptoanálisis. Por ejemplo la "ingeniería
social" para averiguar las claves, captar la radiación electromagnética
de los computadores (los ataques Tempest), el chantaje o por
ultimo la "Criptografía de Goma" que consiste en golpear a
alguien con una cachiporra de goma hasta que finalmente nos diga su
párrafo secreto ;-).
|
|
¿Se ha podido
descifrar un mensaje con PGP? |
|
Se han roto públicamente dos mensajes encriptados
con RSA (el algoritmo usado para encriptar las claves
públicas)
Primero la clave RSA-129. Los inventores del RSA
publicaron un mensaje encriptado con una clave pública RSA de 129
dígitos (430 bits), y ofrecieron U.S. $100 al primero que lograse
desencriptar el mensaje. En 1994, un equipo internacional coordinado por
Paul Leyland, Derek Atkins, Arjen Lenstra, y Michael Graff factorizaron
con éxito esta clave pública y recobraron el texto plano, que
decía:
THE MAGIC WORDS ARE SQUEAMISH
OSSIFRAGE
Ellos encabezaron un enorme esfuerzo voluntario
en el cual el trabajo fue distribuido vía e-mail, fax y correo a
trabajadores en Internet cada uno de los cuales procesó su parte y
devolvió los resultados. Se usaron alrededor de 1600 computadoras, con
diverso poder de cálculo, desde maquinas de fax a supercomputadoras
Cray. Ellos usaron el mejor algoritmo de factorización conocido a la
fecha; desde entonces han aparecido otros mejores pero los resultados
son aún instructivos sobre lo que costaría desencriptar un mensaje
cifrado con RSA.
Los coordinadores estimaron que se gastó
unos ocho meses de tiempo real y uso aproximadamente 5000 MIPS-años de
tiempo computacional.
¿Que tiene esto que ver con PGP? la
clave RSA-129 es aproximadamente igual de segura que una clave PGP de
426-bit . PGP recomendaba claves de 384-bit keys para un nivel de
seguridad "casual"; las versiones modernas ofrecen un mínimo de 512 bits
para sus claves. Note que todo este esfuerzo logró descubrir solo una
clave, no un método general que permitiera romper otras
claves.
Para más información sobre el proyecto RSA-129 project,
vea: ftp://ftp.ox.ac.uk/pub/math/rsa129/rsa129.ps.gz
Un
año después, por primera vez una clave real de PGP fue rota. Se trató de
una clave de 384-bits que fue crackeada por una entidad anónima llamada
"Blacknet". Un equipo formado por Alec Muffett, Paul Leyland, Arjen
Lenstra y Jim Gillogly se las arreglaron para conseguir tal poder de
computación (aproximadamente 1300 MIPS) para factorizar la clave en tres
meses. Luego se usó para desencriptar algunos mensajes de dominio
público que se encontraban encriptados para tal efecto.
Lo más
importante de este ataque es que fue realizado en secreto y no se
divulgó hasta que se obtuvo la clave desencriptada. La mayoría de los
computadores se usaron durante el tiempo libre y la potencia
computacional requerida estaba al alcance de una organización grande a
media.
Estos ataques han consistido en determinar la clave
secreta de alguien a partir de su clave pública, resolviendo el problema
de la factorización de grandes números que es clave en el algoritmo RSA
que se usa para encriptar las claves de
sesión. |
|
13.- PGP
práctico, como se usa un keyring |
|
Supongamos qué ya instaló el PGP en su
computador y creó exitosamente su par de claves privada y pública (el
proceso es bastante intuitivo como para que lo obviemos en esta
explicación), por experiencia propia, lo que más me costó entender fue
el uso del keyring (llavero) llamado "PGP keys" que queda instalado en
el tray del sistema, por ejemplo mi llavero es algo así:
Lo primero en extrañarme fue una cantidad
de claves de gente que yo no conozco que aparecían en el llavero,
partiendo por la del propio Phillip Zimmermann y de varios empleados de
Network Associates la empresa que distribuye el PGP (las borré todas
¿para que tener claves de personas con las que no intercambiare nada
encriptado?). En la ayuda del PGP (disculpe Mr.
Zimmermann por el pirateo) aparece el significado de los iconos que es
lo que se muestra a continuación:
En realidad lo único que me parece
relevante aquí es que las claves que tienen una barra con líneas
diagonales indican que en el llavero está el par completo de clave
pública y privada, las demás son solo claves públicas. Algunas
operaciones útiles son Keys, Import (para agregar al llavero una clave
pública que esté en texto ASCII por ejemplo), Keys, Add (para agregar
una foto a nuestra clave pública), Keys, New key (para crear un nuevo
par de claves). En verdad el uso del PGP es bastante
intuitivo.
Si después que generamos un nuevo par de
claves no nos aparece la barra con diagonales en el llavero entramos a
Keys, Key propierties y le chequeamos el casillero "implicit
trust" como muestra la figura:
Esta clave pública de 2048/1024
bits (con foto incluida) se puede traspasar a un archivo ASCII, con lo
que se convierte en::
-----BEGIN PGP PUBLIC KEY
BLOCK----- Version: PGPfreeware
6.0.2i
mQGiBDnvt9gRBADbuYXMcdZal3cfOqmaMemMCXnE0UYniXFbAhDxx9Uw5sYqyo14 6s28+kzFwm3k8GAewBw8YuME3+sYDschZ8GnNVDwjE1FffKSpEe+aE8IRQ34CFu0 tdjvMvTRn8coTWvjG7Yu+vcry73ACIdqPI67EYwV/uXY8gQm7eWnfruiSwCg/+WK EXu7czMqY02b1KMUPD03kSED/1Rj5G6vwRAKorBglTDX+52k2DnNl7Sx2GC7EQQc fpH2xYctFr2a9fVffjWO9VCqGd6CLxJXKt6oN0b73lFBgZGyZsFLGvaUHfoATf/b qi7O1Rto3rVf2NhLXdQF//qRRhYbvc4CBCPHBQAKRLRckKfXoD5j4ZzIii0CMCQr mDnGA/9KwgueEf0105tLnHXXbEsAUitVaZi/kc2jDPPfze0+sIDxSNe27Nrn5JGN U/ZIEy+pk07oi9ydkTjiJWeih5kUt/gDwfEyp02q6hQ14lnq0M1wUQVNoqJ2q7ic Gn9C4aJYr/Q6tmPlDkEFOzDtgnJcf6jmrEvHUDIWYQfvmg4QFbQlVG9t4XMgQnJh ZGFub3ZpYyA8dG9tYnJhZEB3ZWJob3N0LmNsPokASwQQEQIACwUCOe+32AQLAwIB AAoJECnKvl3sv06maa4AnjpQGrtt8LaeOZkzx4yzqUP9TEXDAJ0UxRSeZlQ5ND36 XtMuq2n6+MbcgrkCDQQ577fZEAgA9kJXtwh/CBdyorrWqULzBej5UxE5T7bxbrlL OCDaAadWoxTpj0BV89AHxstDqZSt90xkhkn4DIO9ZekX1KHTUPj1WV/cdlJPPT2N 286Z4VeSWc39uK50T8X8dryDxUcwYc58yWb/Ffm7/ZFexwGq01uejaClcjrUGvC/ RgBYK+X0iP1YTknbzSC0neSRBzZrM2w4DUUdD3yIsxx8Wy2O9vPJI8BD8KVbGI2O u1WMuF040zT9fBdXQ6MdGGzeMyEstSr/POGxKUAYEY18hKcKctaGxAMZyAcpesqV DNmWn6vQClCbAkbTCD1mpF1Bn5x8vYlLIhkmuquiXsNV6TILOwACAggAudvP62rs 7rGRuWSMTiTzEckZMifLCqAv15V6VjLVEjnFRUi/43hCIBKOKkHiGHUVhHfjc22h wZZIVw+NsMJtdOFfYM8/KT4tYYZy02vRcIfY77dxj/Dz3Ewrf4Dw5ee5S/nBKQvZ xw6KbMaAdayMaO/sN8eicECwpO2z3ZMLIEuUNed8Cmgm8/AzDbSWicYAfrrWtEki mQutI1ttNpjgpR89ahKRUXx4S5u5cOQV33i+W1QwyaNmc4zxk6A0LXfhDnVZCUsP GgZ5MPQ1fhFBJRLjIjmkMMq8Nhp5bp8sHwMs1dFK3wA7deyFoE9UeziLOLb4lBqM 46Vq4lCbQ8bkEYkARgQYEQIABgUCOe+32QAKCRApyr5d7L9OpmtxAKCRI9C3jGLg mxWqnS9iYJ+HfbjUCQCgk5M7HFZLpG4T/FF+NHfnAFw72JQ= =wLGv -----END
PGP PUBLIC KEY BLOCK-----
El archivo ASCII se puede enviar en el
cuerpo de un e mail, el que la recibe la copia al notepad y la importa
con keys, Import
Mi otra clave pública es de 768 bits lo
que la hace mucho más corta, además es compatible con versiones del PGP
para DOS:
-----BEGIN PGP PUBLIC KEY
BLOCK----- Version: PGPfreeware
6.0.2i
mQBtAzg78rcAAAEDAKwCJYL7IJZl+dsJ2EvC8Ii/YsVYmjASNjgQK9buKmq2Zms2 T/vTFAoRi6Gw1dtZ1L+pZN1yKd3iYu0hEp0uUzABX59EYjB2Y0kSsoBTG+7yEQ9n rUwepu3gHyJ2D6S1pQAFEbQlVE9NQVMgQlJBREFOT1ZJQyA8dG9tYnJhZEB3ZWJo b3N0LmNsPokAdQMFEDg78rrgHyJ2D6S1pQEB14QC/i+7vF7kbmZ4AttQ6s5EoLt4 4cjB/5Viw45iyIBkbsmmww11Oh7srcwvxvHPugIlm/xiEG7kg+EQuxkB0k2bRPbP Qx2FfM8QRyiMbkv6gnDcuqSE+FfXmMXAnfxtwx6UKA== =Oopq -----END
PGP PUBLIC KEY BLOCK-----
Cuando encriptamos un mensaje y lo
empaquetamos en armadura ASCII queda algo más o menos así:
-----BEGIN PGP
MESSAGE----- Version: PGP
6.0.2i
qANQR1DBwU4DKkRM7vetPh0QCACSDygYk29v6I2kTGimsUk8Yn6O4jiHFfsk2hSa pNxtnBf34JVt724ZSPg8RiACsbORdPx0CD955ueu760lqKzjhQ54cJs1Z8jQMdT3 8ChnRV3fJOa304X0e9//hPUzDqKCMiL2H00ZxmVhc4C+u0nvXJq2Tnwlsd2nBjUb yEZmi+sLzlL8KCXrBCFgaY6paJFZQvpnupxGOLAoGqHerElxPFdUIxnHBvPFeInd 0RofQzlnMZPREQ7+O+5wGMlxI0E2lOG8jcFWcg8YCKFv9XIIyanxVJ2nLL40y7qD 5WJdt2w8SOMAaJ/pjgdTT6eiswDYqx9J5z4+TeTVAt0jMUs/CACUcrK4g0zCNPCU tj8ydfq9EvlpI0rSztoAtxGyCYCNnoLiaVdugClseC++IyefIHpKxs4PH0xWBGPV P1OgXp7thGRlzxuNYKog1M6LyNDrdllr/uzVWpuEmIRRExEtl8MKf2Sx77fXxO+G NyhnsB27RYk1Z6N+6814Vu4DCj43QMGGowmzORu43t4RpcAjcnLjH0/qTxa9DugV jnu9Mw2bbPi2Zy6lAodZjAzg1rfBPFhoacPL73XSJAbF85YJkUR8/tND694XpCZ6 646G8WbcKha2PwGkz0OsGxEEis8fwBBKjePofwOk46O3Dngl+cgfdSETyCcDBcYM VmP+IzVzycJyoGGLtjOCk9RETvkV1jbz79kH/ND+EWtlrpv0Sz2UP0J1cXihBoso xhEpDqHEgR1O6KaDMsPXwR075WqAbqhwgHGIjjcc7C52wKWigo/R8Cx/+f1RF9K2 YzbcWqKapO5vVehnHwWYQpj7/fec+Gcuw1eS+FacAaxrLwboQYcLLVIVQmt9ornf Ra1fdcr9XMo1SSQherkIj4C1XRYD2pZj3YWUVO8t7TL8EvZXyLwXFBucI1xDfAtg Y2iAA8R+Ll7cBkyPI3DdA1OIHUa1cKs67LCd+G0LzSzvl2A1nr80FK6VuCD8Uqng QCDUaTqoiaqRTAgtdED3DrtqhFRz6m+wu+xq4EJdxwYAS11d79ViIzZx8KhEQUJo HNEuOiaLMN2Uula7fYgBa9zpoZgf/BYDJPa6hP7yzRgZRXxJqfZg4jM068RnaWnt Q/VnJQyBJNthb59MjLBukPkdwjSYojlPBkugoy6EpYboQZlz/jdpDfmCH1FQhPRp cxqDQvf8zRMTrqdhAMrzR2gwyugF7T6mU6IzWWRDP1h1j+Tw/ZCWuwpQ7zZtIYgN IDo7i9x9WarGcq2C4nDdm1wzqdW3R0mBxyy3hINeUxvlepg1sy0L4LjWBRHZBp1b FEq+nawmNr+KT4OC78fwNyuaauQQUCC0N0tPKk8+mEyCa8eY2SpDeLMm4oYjmlNq pqJKtsD3T98Qzowc31FLoAWFjAVoLKjlR+ljkghlTibf4R6BcLgmp+hfhRdnf/xb Gc77dknjGv6Xg8is9qSc6jNq8nt4WpFwnmUrrduUfiZBK2guTK/qNPHDQ5fFu7H+ PxWPL49gN24fgAiXReoCggdJFBEkfJPmYRCkzRF1PYhfjlOYM1bAVmjfEPBmrqRF Rn1MWT9dBeCt6jrsaKIxVQspPB6uXQKuI1xBX48CrLvHEPl02Q72ZqXxRasXV70Y h+UnggO6Ha/S6WtU/dDU8psCm+LMSETG/OEW4vHJ0BygUtvkJ0X+jxwEMNgZwAKF tearJEg0FcCRYd7782Gst57+RxxVBEf0V9w4U5dP4n5EOUDy5NQR2R0nE6nL7QPq 4AJI9iEZmFyBM/8= =JOYJ -----END
PGP MESSAGE-----
La ventaja de tenerlo es ASCII es que
puede copiarse, cortar, pegar en el notepad, inclusive podríamos copiar
el texto escribiéndolo letra a letra o leerlo con un OCR y, por supuesto
enviarlo en el cuerpo normal de un e-mail
|
|
14.- PGP para
DOS y para Windows |
|
Las dos versiones más populares del PGP son la
2.6i para MS/DOS y las versiones 5x a 5x para Windows. La versión para
DOS consiste únicamente en un pequeño programa .exe y funciona con
argumentos de línea de comandos, por ejemplo con instrucciones tales
como:
pgp -e <archivo_a_encriptar>
<identificador_clave_destino>
Un listado completo de comandos para PGP 2.6i puede
verse en Conceptos básicos
sobre el PGP. La ventaja de esta versión es que resulta muy fácil
hacer funcionar al PGP desde dentro de otro programa, ya que pueden
enviarse los comandos por una función tipo shell o algo por el
estilo.
La desventaja del PGP 2.6xi es que solo trabaja con
claves cortas y algoritmos actualmente considerados débiles, a pesar de
ello para ambientes donde no abunden los code-breakers esta es una
versión todavía bastante segura, siempre y cuando se use
correctamente.
El PGP 5xi - 6xi para Windows no trabaja con línea
de comandos así es que si queremos usar sus funciones desde dentro de
otro programa tendremos que usar DLLs especiales como las PGPDLLS.ZIP
que se encuentran en mi Sitio de
Descargas
|
|
15.- Usando
PGP con criptografía convencional |
|
Algo que me intrigó por un tiempo fue la opción del
PGP de usar "criptografía convencional", es decir usando la misma clave
a ambos lados para encriptar y desencriptar el mensaje. ¿Cual era la
idea de usar tal opción?
En pocas palabras si conocemos a la persona con que
vamos a intercambiar mensajes y tenemos acceso personal para ponernos de
acuerdo en un párrafo secreto (hablando personalmente, sin transmitir
ese párrafo por ningún medio), el cifrado convencional es, lejos, mucho
más seguro que la transmisión usando la clave pública. esto
elimina las debilidades del RSA y la posibilidad de averiguar la clave
privada por algún (improbable) algoritmo desconocido que permita
factorizar grandes números.
El uso más seguro del PGP sería entonces poniéndose
personalmente de acuerdo con la otra parte en un párrafo secreto común,
usando criptografía convencional y firmando el mensaje con nuestra clave
privada
|
|
16.- La
seguridad no se basa en secretos |
|
En la época de la criptografía clásica la seguridad
se basaba en mantener el algoritmo o el dispositivo encriptador bajo el
más estricto secreto. Con el tiempo esto demostró ser una muy mala
política, a Alemania por ejemplo la creencia de que su máquina
encriptadora "Enigma" no era conocida le dio un falso sentido de
seguridad que permitió a los aliados conocer sus comunicaciones en clave
desde el principio de la guerra.
Otro ejemplo de antología es la "clonación" de los
teléfonos celulares; a las 48 horas de descubrirse el algoritmo
"secreto" empleado por los GSM, lo que obligó la migración a la
tecnología a PCS a escala mundial
Los secretos son difíciles de guardar y cuando hay
muchas personas involucradas, guardar un secreto es tarea casi
imposible. La criptografía moderna (es decir la de la época de los
computadores) usa algoritmos conocidos por todos, los algoritmos se
difunden a toda la comunidad interesada en el tema de manera que puedan
ser sometidos públicamente a toda clase de ataques, ahora la situación
se ha invertido y para el que logra romper un sistema le resulta muy
difícil mantenerlo en secreto.
Por ejemplo tal como vimos en las secciones
anteriores el algoritmo usado por PGP es conocido por todos, y no solo
eso, el propio código fuente del programa está disponible para quien se
interese en analizarlo, puede bajarse de Internet libre y gratuítamente.
¿Como puede ser el PGP un sistema tan seguro si cualquiera conoce su
funcionamiento?.
La respuesta está en el nuevo enfoque
introducido a la criptografía desde la aparición de los computadores: la
seguridad ya no se basa en el algoritmo mismo sino en encontrar
funciones matemáticas irreversibles, que no tengan solución conocida
como es el caso de la factorización de grandes números. Los nuevos
métodos dependen más de la investigación y el avance científico que del
conocimiento de alguna clase de "secreto"
|
|
17.-
Criptografía no es igual a seguridad |
|
Este es un punto muy importante de entender, la
criptografía es un subconjunto de algo mucho mayor; la seguridad
informática, Tener instalado el PGP no soluciona problemas de
seguridad en las estaciones de trabajo.
Cualquiera que tenga libre acceso a nuestro PC donde
están los archivos secring.skr y pubring.pkr podría, por dar solo un
ejemplo, sacarles copia, instalarlos en su propio PC y usando un poco de
"ingeniería social" averiguar nuestro párrafo con lo que nuestro
(supuestamente) perfecto canal confidencial, ya no valdría nada. PGP
protege nuestra confiabilidad mientras los mensajes encriptados viajan
por Internet, ni antes ni después por lo que no debemos confiar ni menos
descuidar el acceso de extraños o potenciales atacantes a nuestros
PC.
PGP, tal como cualquier otro esquema criptográfico,
parte del supuesto de que la integridad física de la información en el
equipo está asegurada, que nadie tendrá acceso al disco donde se guardan
los keyrings,, el randseed, que nadie podrá copiar o apropiarse de algún
modo de estos archivos (por ejemplo si el equipo está conectado en red,
si se tiene acceso a archivos swap, si se tiene equipamiento para captar
e interpretar la radiación electromagnética emitida por el computador,
etc.)
Entre las medidas de seguridad informática posibles
estaría la creación de una partición encriptada del propio disco duro
usando (como no) PGP Disk.
|
|
18.- PGP
Disk |
|
Un problema de seguridad clásico de Windows 95, 98 y
ME es que no tienen forma de restringir el acceso a los directorios.
Existen muchas utilidades como Magic Folders, Candado etc. que permiten
ocultar carpetas pero la verdad es que ninguna de estas resulta muy
satisfactoria ni menos segura en términos de encriptación, de hecho para
casi todas estas utilidades podemos encontrar programas que permiten
crackearlas.
Dentro del paquete freeware
PGP 6.xi que se puede bajar de http://www.pgpi.com/ se encuentra la
utilidad PGP Disk que permite crear volúmenes encriptados y, entre
las medidas de seguridad informática que protegen al disco de acceso no
autorizado, esta es la mejor que conozco.
PGP Disk simplemente encripta un espacio del disco y
crea un archivo llamado PGP Disk volume donde podemos guardar
nuestros archivos sensibles fuera del alcance de intrusos. El volumen
usa un método de encriptación fuerte (de grado militar) llamado
CAST (el mismo algoritmo simétrico que se usa por defecto en el PGP
normal). Para "montar" el volumen se debe entrar el párrafo que le
hayamos asignado, una vez montado para todos los efectos prácticos el
volumen PGP disk se comporta tal como si se tratara de una nueva unidad
de disco, con su propia letra, carpetas etc.
Algunas características interesantes son que además
del párrafo principal podemos asignar párrafos de acceso secundario, así
varias personas pueden tener acceso al volumen usando un párrafo
distinto y personal. Sin embargo el poseedor del párrafo maestro podrá
administrar, permitir o negar accesos a los párrafos secundarios.
Además podemos asignarle claves públicas de PGP a un
volumen, de manera que el poseedor de los párrafos de esas claves puedan
tener acceso al volumen.
Algunas aplicaciones útiles del PGP Disk pueden ser
para respaldar nuestros archivos confidenciales en alguno de los lugares
de la web que nos ofrecen ese servicio, para mantener nuestros archivos
confidenciales dentro de un ambiente de red, para proteger el acceso no
autorizado a nuestro disco duro (o parte de el) etc.
Importante: aunque
es prácticamente imposible que alguien que no tenga el párrafo pueda
ingresar a un volumen encriptado si podría borrarlo, recuerden
que se trata simplemente de un archivo.
|
|
19.- Secure
Socket Layer (SSL) |
|
El protocolo SSL es el que funciona cuando
en el explorador de Internet aparece el mensaje "Esta entrando a una
sesión de comunicaciones seguras" o bien aparece un símbolo con un
candado cerrado. Se trata simplemente de una codificación trasparente
para el usuario que efectúa el browser (Explorer, Netscape, etc.) antes
de enviar los datos por Internet, al llegar a su destinoi también son
desencriptados de manera transparente.
Una sesión SSL comienza con una etapa de saludo
(handshaking) donde se generan las claves de sesión y luego una de
comunicación sonde se envían los datos encriptados. Debido a las
restricciones legales en USA los exploradores usan claves de solo 40
bits para sesiones SSL, lo que constituye una notable debilidad en la
seguridad de la comunicación. El SSL se usa principalmente para evitar
que información como los password por ejemplo, viajen por Internet
abiertamente, al alcance de cualquiera que tenga acceso a los
servidores.
|
|
20.-
Esteganografía |
|
La esteganografía o uso de canales subiliminales
consiste en esconder información dentro de otra aparentemente
inocente, por ejemplo dentro de una imágen de bitmap que represente un
paisaje bien podríamos ocultar un texto secreto u otra imagen
confidencial por ejemplo.
Una técnica empleada para ocultar la información
consiste en cambiar el bit menos significativo en algunos puntos de la
imagen , así los puntos cambiarían su valor en solo una unidad lo que
resulta indetectable al ojo humano (como los colores se representan por
números el color 850 por ejemplo es casi idéntico del 801), los puntos
que se cambian se escogen al azar con un generador de números seudo
aleatorio, y la semilla de este generador se determina a partir del
password. Finalmente antes de diseminar la información en la imagen
"portadora" es encriptada lo que aumenta la dificultad de recuperar sin
conocer el password.
La limitación es que la imagen portadora debe ser a
lo menos 8 veces mayor que la información que deseamos ocultar. Otra
limitación obvia es que si cambiamos o editamos la imagen de algún modo
perderemos la información que estaba oculta en ella.
El procedimiento mencionado arriba es usado por el
programa esteganográfico llamado Winhip.exe que es freeware y puede
bajarse de mi Sitio de
Descargas
|
|
22.-
Créditos |
|
Este artículo debe buena parte de
su contenido al libro "Criptografía y Seguridad en Computadores"
de Manuel José Lucena López. El libro completo, sin ningún tipo de
restricciones o cortapisas, puede ser descargado TOTALMENTE GRATIS
desde:
http://www.kriptopolis.com/libro.html
También saqué información (y un par de
snapshots) de la propia documentación del PGP que viene junto con el
programa, además del FAQ sobre PGP escrito por Arnoud Engelfriet Pido
disculpas de antemano por haber omitido las comillas donde
corresponda.
|