Soluciones Avanzadas No.31 15 de Marzo96

 

Usos de la Criptografía de Llave Pública


Daniel M. Germán y Alejandro López-Ortiz
dmg@csg.uwaterloo.ca y alopez-o@neuman.uwaterloo.ca

Como describimos el mes anterior, la criptografía de llave pública utiliza dos llaves, la privada conocida solamente por su dueño, y la pública que puede ser conocida por cualquiera. Un mensaje que se desea enviar debe ser cifrado (encriptado) utilizando la llave pública del destinatario. Al recibirlo, el destinatario utilizará su llave privada para descifrarlo (desencriptarlo). El sistema de llave pública tiene las siguientes ventajas: a) es muy seguro si las llaves son suficientemente grandes, b) por cada persona es necesaria sólo una pareja de llaves, y c) la llave pública de una persona puede y debe ser publicada. En cambio, el sistema de llave única requiere que cada pareja de corresponsales comparta una llave única y que ésta se mantenga siempre en secreto. Desgraciadamente cifrar un mensaje con el sistema de llave pública es lento.

Normalmente un mensaje se cifra primero con la llave pública y después se descifra con la llave privada. Sin embargo, se pueden utilizar la llaves en orden inverso: primero la privada y luego la pública. Supongamos que el usuario X codifica un mensaje con su llave privada. Cuando dicho mensaje llega a su destinatario, éste utilizará la llave pública de X. Si el resultado es un mensaje legible, entonces sólo X pudo haberlo codificado, pues nadie más conoce su llave privada. Si, en cambio, el mensaje que resulta parece una secuencia de bytes aleatorios, el mensaje no fue codificado utilizando la llave privada de X. Este proceso sirve dos propósitos: autentificar que X envió el mensaje y que éste no ha sido modificado en tránsito. Si el mensaje hubiera sido modificado, el resultado de la decodificación sería basura. Sin embargo, como ya mencionamos, codificar un mensaje completo es una tarea lenta, especialmente para documentos largos. Para evitar este cuello de botella, se aplica una función de dispers ión (hash) al documento (Un ejemplo de funciones de dispersión de este tipo es MD5, que por cada documento genera una secuencia de bytes, llamada huella digital; si el documento es modificado, su huella digital cambia.) y sólo el resultado, al que se le llama firma digital, es cifrada como ya antes se describió. Dicha firma digital se agrega al documento, el cual es enviado. El destinatario separa la firma digital del mensaje y aplica a este último la misma función de dispersión. Posteriormente decodifica con la llave pública de X la firma digital del mensaje y la compara con la calculada. Si son diferentes entonces, o bien el contenido del mensaje fue modificado después de ser firmado, o X no lo envió. Este tipo de transacciones son de especial utilidad para el cierre de contratos por medios electrónicos.

Aguila o Sol electrónico


Otro uso importante de la criptografía de llave pública es el volado electrónico. El problema es el siguiente: ¿Cómo pueden echar un volado dos personas a través de correo electrónico, asegurando que ninguna de las partes hace trampa? Las dificultades son numerosas: ¿Quién arrojará la moneda? ¿En qué momento la arroja uno y en qué momento pide el otro? Si ya de por si éste es un proceso delicado en persona, imagínelo en el mundo de las comunicaciones.



El algoritmo para resolverlo se basa en criptografía de llave pública y funciona de la siguiente manera: Llamemos Alicia y Benito a los contendientes (representados en el diagrama por A y B, respectivamente). Ambos generan una pareja de llaves públicas y privadas. Benito genera dos mensajes, A y S; cada uno de éstos contendrá una cadena aleatoria y, uno águila y el otro sol.Cifra ambos con su llave pública Apub, y envía ambos [E( A, Apub),E( S, Apub )]a Benito. Benito, quien no puede entender ninguno, elige uno al azar, descifrándolo con su llave pública Bpub y enviándolo [E(E( X, Apub) , Bpub), donde X es A, o S], de regreso a Alicia. Alicia, lo "descifra" utilizando su llave privada Apriv y lo envía a Benito, esto produce E( Y, Apriv), donde Y es A o S. Benito hace lo propio con su llave privada Bpriv, en ese momento el mensaje es legible y por lo tanto conoce el resultado del volado. Regresa el mensaje a Alicia, quien autentifica que el mensaje, efectivamente, es uno de los dos que envió inicialmente, siempre y cuando la cadena aleatoria que utilizó en la primera etapa se mantenga intacta. La figura 1 muestra el intercambio de mensajes. Benito regresa el mensaje a Alicia y ambos intercambian sus llaves públicas y privadas, para verificar que cada mensaje que recibieron fue el correcto. Un ejercicio interesante es intentar hacer trampa (es decir, "voltear la moneda" después que cayó, o cambiar lo que uno pidió) y verificar cómo se daría cuenta el otro.

Otras aplicaciones de la criptografía de llave pública en el ciberspacio son el firmado simultáneo de contratos (en que ambas partes aceptan un contrato simultáneamente, algo que frente a frente es también trivial), y el envío y recepción de correo certificado (asegurándose que el destinatario acepta haber recibido un mensaje antes de leerlo). Aún cuando parezca extraño, estos tres protocolos tienen fuertes implicaciones en el comercio electrónico del futuro.

Una historia complicada


Antes de discutir las implementaciones de criptografía pública, es necesario hacer un breve paréntesis histórico. Desde su invento, la criptografía ha sido una poderosa herramienta para el espionaje y la guerra. Por ello los EUA imponen restricciones para la exportación de software que incorpore criptografía avanzada. Rivest, Shamir y Adelman desarrollaron, en 1977, un algoritmo extremadamente seguro y simple para criptografía de llave pública, al cual se le conoce ahora como RSA. A pesar de presiones por parte del gobierno de EUA para evitarlo, el algoritmo fue publicado en 1977 y en 1978 [1]. En 1983, el MIT obtuvo la patente sobre el algoritmo. Esta patente es inválida fuera de EUA y Canadá, pues, excepto en este país, al publicarse el algoritmo, éste se vuelve del dominio público y por lo tanto no es patentable (en EUA hay un periodo de gracia de hasta un año después de su publicación). Más tarde, el MIT cede la patente a un grupo llamado Public Key Partners (PKP), que incluye a RSA Dat a Security, la cual es también dueña de otras patentes que cubren otros algoritmos de criptografía de llave pública. En esencia, la patente da a PKP el derecho a ser un monopolio que controla la criptografía de llave pública en EUA y Canadá por 17 años, el periodo de duración de las patentes.

En 1991, Phil Zimmermann autoriza publicar en múltiples BBSs y foros de USENET un programa de dominio público llamado Pretty Good Privacy (PGP), que incluye una implementación del algoritmo de RSA, pero basándose en la información pública que se hizo disponible 10 años antes. RSA amenaza con demandarlo, por lo que para evitarlo, Zimmermann promete no continuar con el desarrollo de PGP. Sin embargo, programadores en diversas partes del mundo continúan con su desarrollo, portándolo a múltiples arquitecturas y sistemas operativos. Por si fuera poco el código de PGP puede ser obtenido desde cualquier país por lo que el gobierno de los EUA inició una investigación para decidir si Zimmermann violó las restricciones de exportación. Apenas en enero pasado Zimmermann es notificado que se decidió no continuar con la investigación. El MIT decide negociar con Zimmermann y RSA una licencia para el uso no comercial de PGP, y nace así la versión 2.5, la cual no puede ser exportada. Sin embargo, la secciones no relacionadas con criptografía si pueden ser exportadas, y en ellas se basa Stale Schumacher para crear la versión internacional de PGP, la cual es, a partir de ese momento, compatible con la de MIT.

Implementaciones


PGP es el programa más utilizado en el mundo para criptografía de llave pública. La versión más actual es la2.6.3i, donde la i identifica a la versión internacional. Es ilegal en México utilizar la versión del MIT (2.6.3) no porque viole la patente, sino porque contiene código protegido por derecho de autor, además que es ilegal exportar desde EUA una copia de 2.6.3. PGP 2.6.3i es gratuito para fines no comerciales, pero es necesario pagar una licencia para su uso comercial (debido a que utiliza un algoritmo llamado IDEA, patentado por Ascom Systec, en Suiza); su precio es relativamente bajo: US$15, por usuario. Contrariamente a lo que mucha gente supone, PGP 2.6.3i es tan seguro como su contraparte estadounidense. ViaCript publica una versión comercial de PGP que sólo puede ser exportada a compañías transnacionales estadounidenses que cumplan con ciertos requisitos. Existen paquetes que permiten conectar PGP con programas de correo electrónico para firmar, autentificar, cifrar (encript ar) y descifrar (desencriptar) mensajes electrónicos.

Netscape Communications utiliza RSA para autentificar conexiones a nivel de sockets. El protocolo es llamado Secure Sockets Layer(SSL). Netscape Navigator utiliza SSL para realizar transacciones comerciales entre él y Netscape Commerce Server. Desgraciadamente, de nuevo debido a restricciones de exportación de los EUA, la versión internacional de Netscape permite solamente llaves de 40 bits máximo, que es en órdenes de magnitud más débil que la versión estadounidense, que utiliza llaves de 128 bits. Netscape asegura que se necesitan 64 MIPS-años para romper una llave de 40 bits. Si la información vale la pena, puede ser decodificada. Esto no pasaría con una llave de 128 bits (con una de 256 bits sería virtualmente imposible lograrlo aun utilizando toda la energía del universo).

El próximo mes comentaremos más sobre Netscape, Digicash y otros mecanismos desarrollados para realizar comercio electrónico.

Referencia

[1] Rivest, R.L.; Shamir, A., y Adelman, L., "A method for obtaining digital signatures and public-key cryptosystems", Communication of the ACM, vol. 21, Número 2, 1978, pp. 120126.