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.