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:

  1. 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.
  2. 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
  3. 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

  1. RSA key pair para claves pequeñas, por ej. 768 bits (seguridad débil), esta funciona con PGP 2.xx
  2. 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.