Publicado por vez primera en: Kriptópolis, 25 julio 2.001


Cifrando y firmando: pequeños grandes detalles
Arturo Quirantes Sierra




Un tal Don Davis, de Shym Technology, ha tenido la ocurrencia de hacernos creer lo siguiente: existe un fallo de implementación que permite re-enviar un mensaje cifrado y firmado digitalmente, de tal forma que el destinatario final crea erróneamente que el mensaje ha sido escrito para él. Es decir, podemos engañar a una persona con respecto a la procedencia de un mensaje. Este fallo, según Davis, está latente nada menos que en los protocolos de cifrado y firmado digital S/MIME, PKCS#7, MOSS, PEM, PGP y XML ... y no incluyó más porque no se le ocurrió. El problema de este "hoax" es que es cierto. Davis tiene razón, y sus afirmaciones están adecuadamente demostradas y documentadas. Ningún protocolo o programa de los mencionados nos protege contra el fallo de "remisión subrepticia".


Pero no corran a desinstalar sus programas de cifrado. El problema de la remisión subrepticia no es el fin del comercio electrónico ni de las comunicaciones digitales seguras. En realidad, no es tanto un fallo (flaw) como una pillería inteligente que igual se puede dar en el mundo digital. Nos permite ilustrar un principio muchas veces olvidado: la tecnología ayuda a resolver muchos problemas, pero no es una varita mágica.


El hecho de cifrar y firmar digitalmente nos asegura tanto la confidencialidad como la autenticidad. Si yo cifro un e-mail, tengo garantizado que nadie más que el remitente que comparte la clave pueda leerlo. Si además lo firmo, garantizo que yo he escrito ese mensaje. El problema es que no tengo garantizado quién envió el mensaje. Por lo general, apelamos a la lógica. Se supone que, si yo cifro y firmo un mensaje, también lo enviaré, ¿no?


Pues no siempre. Y para demostrarlo, usaremos un ejemplo de carne y hueso (o mejor dicho, de papel y bolígrafo). Supongamos dos empleados, Benito y Manolo, que trabajan en la misma empresa. Benito trabaja duro y no se queja nunca. Por contra, Manolo no da un palo al agua, no sabe ni hacer la o con un canuto y es la desesperación de su jefe Joaquín. Por ello, éste decide despedirle. Para comunicárselo, el jefe escribe "Estás despedido.", firma la carta y se la envía a Manolo por sobre cerrado. Éste recibe el sobre y abre la carta, pero cae en la cuenta de que en ningún lugar de la carta se hace referencia a él. Así que se le ocurre la siguiente idea: coge la carta, la introduce en otro sobre, lo cierra ... y se lo envía a su compañero Benito.


Esto es perfectamente aplicable en el mundo digital. Los protocolos de firmado y cifrado usan el sistema denominado "firmar y cifrar": es decir, se firma el mensaje y después el conjunto se cifra, en ese orden. Ambos pasos son independientes. Eso significa que podemos jugar con el cifrado y la firma igual que en el caso de papel. Cuando el jefe envía el e-mail, primero lo firma y después lo cifra. Manolo, al recibirlo, comienza por descifrarlo gracias a su clave pública. Pero una vez que lo ha leído, puede remitir el mensaje a cualquier persona. Puede hacerlo "en claro" o bien cifrando con la clave pública del destinatario, en este caso el pobre Benito. Éste descifra el mensaje y lee un texto que dice "Estás despedido". Ha de ser una broma, piensa Benito, así que verifica la firma digital adosada al mensaje ... y comprueba aterrado que es la de su jefe, y que es correcta. Nadie ha podido recrear esa firma ni alterar el mensaje, de manera que el pobre Benito se ve en la cola del paro.


¿Representa esto un fallo? Tal vez, pero no es ningún "bug" de programación. Es simplemente resultado de una presunción incorrecta: que la persona que ha cifrado y firmado el mensaje es la misma que nos ha enviado el mensaje. Pero muy a menudo nos olvidamos que ese mensaje que firmamos digitalmente puede ir más allá de la bandeja de entrada del destinatario. Puede que Cameron Díaz, al firmar el mensaje "te deseo, no puedo vivir sin tí, siempre tuya Cameron", pretendiese que solamente su novio lo leyese. Pero si éste fuera un guasón, podría remitirlo a mi propio buzón. Y a ver cómo le demuestro a mi esposa que yo soy bueno e inocente. Peor aún, algunos países hacen al firmante responsable legal de cualquier uso que se haga de su firma. De manera que el jefe de Benito podría verse con una demanda de éste por despido improcedente... y esperemos que Manolo no haya remitido copias a los otros quinientos empleados de la fábrica.


¿Cómo puede evitarse este problema? Hay muchas formas. Por ejemplo, el jefe podría firmar la carta, introducirla en sobre cerrado y firmar también el sobre. Es decir, un proceso de firma-cifrado-firma. También podría quitarse de preocupaciones, simplemente, detallando en su mensaje a quién va dirigido. Un simple "Manolo, estás despedido" sería suficiente.


Más allá del nivel de usuario, sería deseable que los procesos de cifrado y firma digital estuviesen interconectados, de forma que no se pudiese descifrar y re-cifrar un mensaje firmado sin que tal alteración fuese detectable. El problema es que esta solución conllevaría graves problemas de programación. En la actualidad, los programadores que desean introducir opciones de cifrado/firmado en sus aplicaciones echan mano de paquetes tipo API, en una especie de "tome este producto, caliente cinco minutos en el microondas y listo para servir". Una interconexión entre cifrado y firmado complicaría las cosas en muchos sistemas donde la seguridad no es un fin en sí mismo, sino simplemente una opción.


En cualquier caso, esta pillería de la remisión subrepticia es un buen ejemplo de que para encontar fallos en un sistema no hay que buscar desbordamientos de búfer o sofisticados errores de bajo nivel. En palabras de un experto en cifrado, "no es un fallo de cifrado, es un fallo de ingeniería". Es como decir que un sistema de acceso controlado es inseguro porque el usuario se deja la contraseña apuntada encima de la mesa. Los "bugs" cometidos por usuarios humanos sobrepasan en imaginación e ingenuidad cualquier fallo que podamos esperar del resto del sistema. Así que Cameron, cielo, no me firmes más mensajes, que mi esposa no va a tragarse dos veces lo de la remisión subrepticia.


http://world.std.com/~dtd/sign_encrypt/sign_encrypt7.html "Defective Sign & Encrypt in S/MINE, PKCS#7, MOSS, PEM, PGP and XML" (Don Davis).



© Arturo Quirantes Sierra.  Algunos derechos reservados según Licencia Creative Commons