VR16: Privacidad + encriptación = PGP
por Daniel Sentinelli
Cuando uno comprende el funcionamiento y los alcances de PGP, sufre una experiencia casi mística. Es común ver a los nuevos adeptos con la mirada perdida en el vacio imaginando aplicaciones del sistema, o explicándolo eufórico a quien se le cruce por delante.
Desde la noche de los tiempos el hombre tuvo necesidad de guardar un secreto o intercambiar información sin que caiga en manos de terceros indeseables. Los militares y los niños aman intercambiar mensajes "en clave", los empresarios temen que ciertos datos caigan en manos de sus competidores de la DGI, o de sus mismos socios, los bancos mantienen confidencial la información de sus clientes, y los organismos de inteligencia y seguridad estampan el sello TOP SECRET hasta en el papel higiénico. Por motivos legales o ilegales, éticamente legítimos o no, todos sentimos en algún momento la necesidad de resguardar la privacidad de nuestra información. Para ello se han inventado diversas técnicas que permiten codificarla haciéndola incomprensible a quien no tenga la clave correcta. La disciplina que estudia y desarrolla estos métodos recibe el nombre de criptografía y ha alcanzado niveles de complejidad sorprendentes. La mayoría de las técnicas de encriptación consisten en aplicar un algoritmo con operaciones matemáticas a los datos, utilizando en estas operaciones alguna variable que actúa como "clave". Para recuperar la información original, se aplica el algoritmo inverso utilizando la misma clave. Un ejemplo burdo podría ser: tomo cada letra de un texto y a su código ASCII le sumo 8, con lo que obtengo un mensaje incomprensible. Para desencriptarlo, tomo cada letra del texto en clave y le resto 18, con lo que vuelvo a obtener el mensaje original. La operación de sumar un cierto valor al código ASCII de cada letra es el algoritmo, y el valor que elija es la clave, en este caso "8".
ENCRIPTAR
Mensaje original Mensaje encriptado
-------------
-------- | Algoritmo | --------
| MAMA | -----> | | -----> | UIUI |
-------- | + clave | --------
-------------
DECRIPTAR
Mensaje encriptado Mensaje original
-------------
-------- | Algoritmo | --------
| UIUI | -----> | inverso | -----> | MAMA |
-------- | + clave | --------
-------------
Dado que la operación matemática en este ejemplo es muy sencilla, y que los valores posibles para la clave son muy limitados, es suceptible de ser atacado por "fuerza bruta", esto es, probando todas las claves hasta dar con la correcta. Por este motivo las técnicas criptográficas reales usan claves mas largas y algoritmos mucho mas complejos, para que probar todas las combinaciones lleve millones de años aún con supercomputadoras. El principal inconveniente de estos métodos es que hacen necesaria la existencia de un "canal seguro" para intercambiar la clave, ya que si esta cae en manos del "enemigo" este estaría en condiciones de descifrar todos los mensajes. Muchas veces esto resulta muy difícil o directamente imposible; y en el caso de que pueda establecer fácilmente un canal a prueba de espias, ¿para que necesito mandar los mensajes en clave?
Por otra parte, aunque un algoritmo no pueda ser atacado por fuerza bruta, puede tener debilidades internas que hagan posible "violarlo" a través de estudios matemáticos.
Aquí es donde aparece una nueva técnica radicalmente distinta y aparentemente inviolable llamada RSA (por sus autores Rivest, Shamir y Adleman) que revoluciona el campo, y su implementación en un programa llamado PGP, iniciales de Pretty Good Privacy, desarrollado por Philip Zimmerman.
El sistema que utiliza PGP es completamente diferente de los métodos clásicos, y consiste en lo que se conoce como "sistema de claves publicas y privadas".
Cada usuario corre por única vez un proceso que genera un par de claves. Este es lo suficientemente complejo como para que a partir de una de las claves no sea posible calcular la otra. Las claves son complementarias, de forma tal que al aplicar el algoritmo adecuado, la información que se encripta con una de ellas solo puede ser desencriptado con la otra, y viceversa.
Una de estas claves queda en poder del usuario y no sera entregada nunca a nadie. A esta clave la llamaremos "clave privada". La otra, a la que llamaremos "clave publica", se difunde abiertamente a todo el mundo. Ahora, si el señor A quiere enviarle un mensaje al señor B, lo encripta con la clave PUBLICA de B, conocida por todos. Este mensaje solo puede desencriptarse con la clave complementaria, que es la clave PRIVADA de B, conocida solo por B. De la misma manera, B puede encriptar su respuesta con la clave publica de A, y solo desencriptarse con la clave privada de A.
ENCRIPTAR
Mensaje de A a B Mensaje encriptado para B
-----------------
-------- | Algoritmo + | --------
| MAMA | -----> | clave publica | -----> | X0wR |
-------- | de B | --------
-----------------
DECRIPTAR
Mensaje encriptado Mensaje Original
para B
-----------------
-------- | Algoritmo + | --------
| X0wR | -----> | clave privada | -----> | MAMA |
-------- | de B | --------
-----------------
Como puede notarse, este sistema no exige que A y B intercambien una clave secreta por un canal seguro, sino que por el contrario, las únicas claves que se intercambian son las claves publicas, que deben difundirse lo mas posible. Este solo hecho amplia enormemente la utilidad de un sistema criptográfico. Pero este método permite una posibilidad que es quizás aun mas interesante. Si A encripta un mensaje con su clave PRIVADA, este no tiene nada de confidencial ya que todo el mundo posee la clave PUBLICA de A y por lo tanto cualquiera puede decriptar el mensaje. Pero justamente por el hecho de la clave PUBLICA de A desencripta el mensaje, quiere decir que este fue encriptado con la clave PRIVADA de A, y por lo tanto podemos estar seguros que fue A quien encriptó el mensaje.
Si el señor A escribe algo, y luego lo encripta con su clave PRIVADA, el desencriptarlo con su clave PUBLICA nos da la seguridad de que quien lo escribió es efectivamente A, y no alguien que se hace pasar por el. En la vida cotidiana, nuestra firma caligráfica cumple esta función de certificación, y es por eso justamente que a esta forma de encriptación se la llama FIRMA PGP.
ENCRIPTAR
Mensaje de A Mensaje con firma PGP de A
-----------------
-------- | Algoritmo + | --------
| MAMA | -----> | clave privada | -----> | z3Yk |
-------- | de A | --------
-----------------
DECRIPTAR
Mensaje con firma Mensaje Original
PGP de A
-----------------
-------- | Algoritmo + | --------
| z3Yk | -----> | clave publica | -----> | MAMA |
-------- | de A | --------
-----------------
Como cualquiera puede notar, este mecanismo puede ser aplicado a transacciones comerciales informáticas, operaciones bancarias, certificaciones notariales, y una lista interminable de etcétera. De hecho este es el sistema de validación de identidad electrónica mas perfecto que conozco hasta el momento.
Para evaluar hasta que punto puede ser confiable PGP, tengamos en cuenta algunos hechos. En primer lugar, el algoritmo RSA ha sido estudiado profundamente por matemáticos y criptógrafos, sin que hasta ahora se le haya encontrado ninguna debilidad intrínseca. En segundo lugar, el código fuente del programa PGP es de acceso publico, con lo que cualquiera puede verificar que no existan "backdoors" o defectos evidentes de implementación.
Por supuesto, siempre existe la posibilidad de problemas debidos al uso incorrecto o descuidado del sistema, pero esto depende exclusivamente del usuario. Quienes deseen comenzar a utilizar e investigar PGP pueden obtenerlo de diversas fuentes, incluyendo varios BBS locales. Existen versiones de PGP para distintas plataformas, incluyendo DOS, OS/2, MAC, varias versiones de UNIX (incluyendo Linux), etc. Es altamente recomendable leer atentamente la documentación, ya que en ella se explican claramente todos los aspectos operativos y de seguridad necesarios para usar correctamente PGP.
Las capacidades y posibilidades de PGP exceden el espacio de una nota, y posiblemente continuemos tratándolas en artículos futuros.
Daniel Sentinelli dirige la consultora DATAFRONTier especializada en comunicaciones, redes y seguridad informática; y es un ferviente entusiasta de PGP y su clave publica se encuentra disponible en varios "PGP pubkey servers" locales y mundiales. Puede ser contactado por e-mail en Internet en daniel@ubik.satlink.net, o en Fidonet en 4:900/131.
Su PGP fingerprint es
14 fe 06 10 f2 7b b3 3b e0 cb 5e 53 a7 d3 5b a9