En el presente artículo se explica cómo utilizar el software Kleopatra para cifrar y firmar documentos. Se explica cómo funciona el estándar OpenPGP y en que se basa la seguridad de los sistemas de criptografía híbrida.
Qué es PGP, OpenPGP y GPG?
PGP “Pretty Good Privacy” es un sistema de cifrado que combina algoritmos simétricos y asimétricos para el cifrado y la firma digital. Fue originalmente diseñado y desarrollado por Phil Zimmermann en 1991 en los EE.UU. Entre sus principales características es que permite que la información sea cifrada y firmada digitalmente antes de enviarse. Luego se envía por el canal de comunicación y es descifrada en el destino. Para cifrar y descifrar no es necesario estar conectado a ningún servidor ya que esas operaciones se realizan con un software que se instala en la computadora personal de cada usuario.
Debido a que las leyes existentes en EE.UU en ese entonces prohibían la exportación de software criptográfico fuera de su país PGP no podía ser exportado fuera de los EE.UU. Sin embargo, su código fuente si podía estudiarse y publicarse como artículos de investigación. El software PGP ha sido comprado por diferentes compañías variando los permisos y derechos sobre el mismo.
El IETF (Internet Engineering Task Force) se encargó de crear un estándar libre basado en PGP que denomina OpenPGP descrito en el rfc4880 ttps://www.ietf.org/rfc/rfc4880.txt bajo licencia GPL. En dicho estándar se describen las especificaciones para desarrollar software para cifrar y firmar información basado en el funcionamiento de PGP.
GPG “GNU Privacity Guard” que también se conoce como GnuPG es un proyecto que implementa el estándar OpenPGP.
Contiene varios softwares compatibles con OpenPGP bajo licencia de software libre. Cuenta con instaladores para varios sistemas operativos. El sitio de oficial es http://gnupg.org. GPG es posible instalarlo desde los repositorios oficiales de varias distribuciones de linux. En el caso de la implementación para Windows se puede descargar GPG4Win del sitio https://www.gpg4win.org/.
Ejemplo de uso de OpenPGP mediante Kleopatra
Para ejemplificar se utilizará el software Kleopatra que es una interfaz visual implementada por KDE y facilita la interacción del usuario con las herramientas criptográficas. Forma parte de las herramientas que instala el paquete de GPG4Win. Todo lo que se va a exponer también se puede realizar mediante líneas de comando.
OpenPGP combina varios algoritmos de criptografía simétrica y asimétrica para la firma y cifrado de la información. En el artículo “Conceptos generales para estudiar la criptografía” se escriben las características que definen ambas familias de algoritmos y se explica cómo pueden combinarse para sacar el máximo provecho a cada una.
Generación de claves para usar OpenPGP
Antes de poder utilizar OpenPGP cada usuario debe tener generada su clave pública y privada. Esto puede realizarlo utilizando la propia herramienta Kleopatra. El funcionamiento de los sistemas asimétricos como se explica en el artículo recomendado se basa es que lo que se cifra con una clave se descifra con la otra, la cave publica la conoce todo el mundo y la privada solo el propietario, esa relación es lo que permite firmar y cifrar el documento.
Al seleccionar que desea generar su par de claves le va a pedir datos personales como el nombre y la dirección de correo. Si selecciona las opciones avanzadas le va a permitir escoger el algoritmo de clave pública de sea utilizar.
Yo utilizo RSA porque en el artículo “Funcionamiento de los algoritmos asimétricos y la firma digital” explico en que se basa su seguridad y hasta el momento de la publicación del presente artículo no he hablado de los otros 2 algoritmos listados. De cualquier forma tanto DSA como ECDSA/EdDSA que es la implementación para curvas elípticas de DSA también se consideran seguros. En todos los casos recomiendo utilizar la mayor longitud de llave que ofrezca el software para el algoritmo escogido. Utilizar una longitud de clave mayor implica que se demora más tiempo en cifrar y generar las claves pero incrementa considerablemente la seguridad del cifrado.
Las parejas de llaves asimétricas se consideran “llaves de larga duración”, es recomendable que se renueven cada 2 años a menos que ocurra un problema que obligue renovarlas antes.
También recomiendo proteger la clave con una contraseña. El software ofrece esa opción y se la solicitara cada vez de desee cifrar o firmar algún mensaje.
Intercambio de claves públicas con Kleopatra
Para que el sistema funcione cada usuario debe tener la clave pública de las personas a quienes desea enviarle la información. Cuando se cifra utilizando PGP, GPG, OpenPGP o cualquier otro sistema de “criptografía híbrida” que es como se denominan este tipo de sistema se debe escoger para quien se desea cifrar la información y solo esa persona podrá descifrarlo. Para ello es necesario tener el certificado digital de esa persona en el listado de destinatarios del software que se esté utilizando. Un certificado contiene la información de un usuario y su clave pública. Teniendo el certificado digital se cifra la información con destino a esa persona y se envía por alguna vía como por ejemplo el correo.
La persona que recibe el fichero cifrado también debe tener el certificado de quien se la envió para poder comprobar la firma. Para publicar y compartir esas clave se pueden utilizar repositorios de clave publicas donde se comparten las claves públicas de los usuarios. También existen las listas de revocación de certificados donde se listan los certificados o claves públicas que han sido revocados por algún motivo.
Si las dos personas se conocen pueden sencillamente enviarse la clave pública por correo e incorporarla al listado de claves públicas de la aplicación. De esa forma cada usuario tiene el listado de certificados de las personas con quien desea comunicarse.
Kleopatra permite exportar los certificados para compartirlos con los destinos e importar certificados para poder cifrar y comprobar la firma digital. En el panel superior se encuentran los botones “Importar” y “Exportar” para la importación exportación de certificados digitales. También aparece la opción al dar clic derecho sobre un certificado que se esté utilizando. El fichero con extensión “.asc” generado es el que debe enviarse.
Cifrado y firma de información con Kleopatra
Después de haber intercambiado los certificados digitales el proceso de cifrado es muy sencillo. En la esquina superior izquierda aparece el botón “Firmar/Cifrar…”.
Al presionarlo mostrará una ventana donde podrá escoger con que identificación desea firmar el fichero cifrado y para quien desea cifrarlo.
En firmar como: debe seleccionar la identidad que desea utilizar para firmar el fichero. Usted puede tener varias identidades o llaves privadas creadas.
En cifrar para otros: debe seleccionar el certificado de la persona o personas a quienes desea enviar el fichero. Cuando lo envíe solo esas personas podrán revisarlo y comprobar la firma del mismo.
Cuando termine de cifrar se va a crear un fichero con extensión “.gpg” que es el fichero cifrado para enviar.
Descifrar y verificar firma digital con Kleopatra
Para poder descifrar el fichero y verificar la firma digital es necesario tener en su listado de certificados el certificado del emisor. Si no lo tiene, cuando verifique le va a salir un cartel alertándolo que la firma no es válida.
En la esquina superior izquierda junto al botón de cifrar aparece el de descifrar.
El software le va a pedir que escoja el fichero que desea descifrar. Cuando lo haga va a comprobar la validez del certificado utilizado para firmar. Si todo funciona correctamente le va a mostrar un mensaje similar a este.
Si ocurre algún error en el proceso de descifre o verificación de la firma entonces se lo notificará.
Los errores más comunes son que le envíen un mensaje que no fue cifrado para usted y no pueda descifrarlo o que usted no tenga el certificado en su lista de certificados válidos y el software le diga que no puede comprobar la identidad del emisor.
Funcionamiento interno de OpenGPG
Kleopatra y los demás programas que integran GPG y Gpg4win están implementados utilizando el estándar OpenPGP.
En el rfc4880 se describe al detalle los parámetros para la implementación, algoritmos, mensajes y requisitos de OpenPGP. A continuación, se va a explicar de forma general su funcionamiento.
OpenPGP establece el estándar para la implementación de sistemas de criptografía híbrida y esta publicado bajo licencia GPL. Los sistemas de criptografía híbrida combinan algoritmos de criptografía simétrica, asimétrica y funciones hash para cifrar y firmar el contenido que se desea proteger. En el artículo “Conceptos generales para estudiar la criptografía” se explica de forma general el funcionamiento de estos algoritmos. En el artículo “AES y GOST: Criptografía simétrica moderna” se detallan los de criptografía simétrica y en el artículo “Funcionamiento de los algoritmos asimétricos y la firma digital” los de criptografía asimétrica.
Según el rfc4880 cuando un usuario A desea enviar un mensaje a un usuario B se deben realizar las siguientes operaciones.
A: escribe el mensaje en texto claro (M).
Luego genera una clave secreta (S) de uno solo uso para M.
La clave secreta es un valor aleatorio de una longitud definida generada por el propio sistema criptográfico en función del algoritmo de cifrado simétrico que se vaya a utilizar. Luego utilizando un algoritmo de cifrado en bloques y la clave secreta se cifra el mensaje.
A: cifra M con un algoritmo simétrico utilizando la clave S obteniendo el mensaje cifrado (Mc).
Cifra la calve S con un algoritmo asimétrico utilizando la clave pública de B obteniendo (Sb).
Calcula el hash (H) del fichero que tiene el mensaje cifrado Mc y la clave Sb.
Firma el hash H con su clave privada obteniendo (Hf).
Envía fichero (F) que contiene Mc, Hf y Sb.
El emisor envía el fichero cifrado, el hash del mensaje firmado y la clave secreta que se utilizó para cifrar el mensaje. La clave secreta se encuentra cifrada con la llave publica del receptor para que solo este tenga acceso a ella y pueda descifrar el mensaje.
Con esta información el receptor puede con su clave privada descifrar la clave secreta que recibió. Luego utiliza la clave pública del emisor para comprobar la firma que se realiza al Hash Hf. Con el hash verifica que el cifrado no haya sido modificado. Si todo está en orden entonces utiliza la clave secreta que recibió para descifrar el mensaje.
Descrito por pasos queda de la siguiente forma
B: recibe F.
Extra Hf de F y comprueba la firma digital utilizando la calve pública de A y comprueba la identidad de A.
Utiliza H para comprobar que los datos no hayan sido modificados.
Con su clave privada descifra Sb y obtiene S.
Utiliza S para descifrar el mensaje Mc y obtiene M.
Algoritmo de compresión
En este tipo de sistema es posible utilizar algún algoritmo de compresión con el objetivo de que el fichero a enviar sea lo más pequeño posible. En el rfc4880 se menciona el tema pero no se describe el algoritmo. Se recomienda que el algoritmo de compresión se utilice después que el fichero está cifrado. Se explica que el proceso de compresión y descompresión puede provocar errores y afectar el descifre del fichero.
Si se utiliza un algoritmo de compresión cómo se propone después que el fichero ha sido cifrado, la compresión no es muy eficiente. Los algoritmos de compresión se basan en encontrar patrones en el fichero a comprimir y sustituirlos por patrones que ocupen menos espacio. Luego para descomprimir se realiza el proceso inverso. Uno de los objetivos de los algoritmos de cifrado es que el resultado no tenga patrones y así dificultar el criptoanálisis.
Si un fichero se cifra y luego se comprime, el tamaño va a ser prácticamente el mismo ya que no debe presentar patrones que posibiliten su compresión. Si un fichero cifrado tiene un elevado grado de compresión entonces es probable que haya que revisar el algoritmo de cifrado.
Resumen sobre funcionamiento de los sistemas de criptografía híbrida
Los sistemas de criptografía híbrida como GPG utilizan las potencialidades de las diferentes familias de algoritmos para cifrar y firmar los mensajes. Para cifrar el contenido se usan algoritmos simétricos porque son rápidos para cifrar y descifrar grandes volúmenes de datos. El problema que presentan es que usan la misma clave para cifrar y descifrar por lo tanto la clave es secreta y es un problema distribuir esa clave. Ese problema lo resuelven los algoritmos asimétricos ya que tienen una clave pública y una privada. Distribuir la clave pública no es problema porque cualquiera puede conocerla. El problema es que son lentos y solo son eficientes al cifrar pocos datos.
Por ese motivo en OpenPGP se utilizan algoritmos simétricos para cifrar la información y algoritmos asimétricos para cifrar la llave con que se protegió esa información, es decir para intercambiar las claves. Para la firma digital se utiliza una función hash y se firma el hash ya que generalmente es mucho mas pequeño que el mensaje original. En principio si se firma el hash de un mensaje es equivalente a firmar el mensaje origina. En el artículo “Funciones Hash criptográficas y HMAC” se describe el funcionamiento de las funciones hash.
Aunque en teoría los sistemas híbridos son complejos hay implementaciones como Kleopatra que facilitan mucho su empleo ya que solo es necesario tener nociones básicas de criptografía para su uso. Este tipo de sistemas cifra la información antes de enviarla por cualquier vía de comunicación así que el usuario no tiene que confiar en una entidad externa para la protección de sus datos.