PublicidadEn esencia, una firma digital es un esquema criptográfico que permite la verificación de la autenticidad e integridad de un mensaje o documento digital. Implica el uso de algoritmos matemáticos para generar una huella digital o firma única para un dato específico. Hemos analizado los conceptos básicos de la firma digital en nuestros artículos anteriores. En el caso de las firmas digitales, debería ser prácticamente imposible falsificar una firma, o generar un segundo mensaje para el cual esta firma también sea válida. Esto supone que la clave privada no se puede calcular a partir de las firmas digitales y la clave pública generada con ellas. En el panorama en constante evolución de las comunicaciones y transacciones digitales, garantizar la autenticidad, la integridad y el no repudio de los documentos digitales es primordial. Las firmas digitales desempeñan un papel fundamental en el logro de estos objetivos al proporcionar un mecanismo para verificar la identidad del firmante y confirmar la integridad del contenido firmado. Procedimientos conocidos utilizados para generar una firma digital Con diferencia, el método de firma digital más conocido y utilizado es RSA, para el cual se pueden utilizar varios métodos para purgar el valor hash (relleno), como el PSS estandarizado en PKCS#1. La seguridad de RSA se basa en la dificultad de descomponer números grandes en sus factores primos (factorización). Esta es también la base de la seguridad del proceso de firma de Rabin. Muchos métodos de firma digital se basan en el logaritmo discreto en campos finitos, como DSA, El-Gamal, la firma Schnorr, la firma en estrella de Pointcheval, XTR o la firma Cramer- Firma de la tienda. El logaritmo discreto en curvas elípticas es la base para la seguridad de las firmas ECDSA, ECGDSA o Nyberg-Rueppel; estos métodos pertenecen a los criptosistemas de curvas elípticas. Todos los métodos basados ​​en el logaritmo discreto (en campos finitos o en curvas elípticas) son probabilísticos y utilizan otros parámetros públicos además de la longitud de la clave. Otros métodos de firma digital se basan en códigos lineales, como la firma McEliece-Niederreiter, o en rejillas, como la firma Goldreich-Goldwasser-Halevi o NTRU. La firma Merkle utiliza árboles hash y se basa únicamente en la seguridad de la función hash utilizada. Algunos métodos de firma digital tienen ciertas características, como firmas digitales no confiables o firmas ciegas, donde el firmante no sabe lo que está firmando; otros permiten recuperar el mensaje firmado a partir de la firma (recuperación de mensaje), como la firma Nyberg-Rueppel o RSA utilizando el método de relleno ISO 9796. En principio, cualquier método de firma digital se puede combinar con cualquier función hash, siempre que la longitud de los valores hash es adecuada para los parámetros seleccionados del método de firma. Sin embargo, los estándares nacionales e internacionales definen a menudo la función hash con el procedimiento de firma (p. ej. FIPS-PUB 186-2) o al menos proporcionan recomendaciones (p. ej. ANSI X9.62). Uso en la práctica de los sistemas PGPPGP significa Pretty Good Privacy. PGP en sí no es un algoritmo de cifrado, sino un producto de software que combina muchos métodos, a veces bastante complejos, de cifrado simétrico y asimétrico, así como firmas electrónicas. Los sistemas PGP permiten a cada interlocutor generar un par de claves en cualquier momento. La confianza en la asignación de claves a una persona debe garantizarse mediante una especie de certificación electrónica mutua. Esto crea una red de confianza basada en relaciones de confianza transitivas. Si una persona A confía en una persona B y esa persona B confía en una tercera persona C, esto significa que la persona A también confía en la persona C, sin una relación explícita de confianza. La ventaja de este método es el bajo nivel de requisitos para el usuario individual. Ésta es también la gran debilidad de PGP. Las claves y la información de autenticidad de la clave deben intercambiarse bilateralmente con cada participante de manera confiable. No hay forma de retirar de la circulación las claves “perdidas” o conocidas. Las variantes comunes del software desarrollado originalmente por Phil Zimmermann son PGP (comercial) y GnuPG (GNU GPL). El Proyecto de Privacidad GNU se encargó de una interfaz gráfica basada en GnuPG para todos los sistemas operativos comunes. Desde 2003, el proyecto no parece mostrar mucha actividad. El programa WinPT (Windows Privacy Tools), también basado en GnuPG, ofrece también en Windows una interfaz gráfica de usuario para un manejo más cómodo de las firmas digitales. Para los clientes de correo Mozilla Thunderbird, Mozilla Mail y Netscape Mail existe el cómodo complemento -en Enigmail, que permite al usuario utilizar las funciones de cifrado y firma proporcionadas por GnuPG directamente en el programa de correo. El complemento es de código abierto y tiene la licencia GNU GPL y la licencia pública de Mozilla. El programa Bat también puede ofrecer funciones de cifrado y firma correspondientes utilizando OpenPGP. Las funciones de cifrado y firma de GnuPG también se pueden utilizar directamente y sin complemento con el cliente de correo y software colaborativo Novell Evolution, que se utiliza principalmente en Linux. Evolution también es de código abierto y tiene la licencia GNU GPL. La suite de escritorio KDE también permite el uso de GnuPG en muchos de los programas incluidos (por ejemplo, Kopete y KMail). Para el entorno de escritorio Gnome, que se utiliza en Ubuntu, entre otras cosas, existe un frontend para GnuPG llamado Seahorse. Sistemas basados ​​en certificados En los sistemas basados ​​en certificados, cada usuario recibe un certificado digital que contiene información sobre su identidad y clave pública. Cada certificado está certificado por un organismo emisor, que a su vez puede ser certificado por autoridades superiores. El sistema de confianza de esta PKI es estrictamente jerárquico. La raíz común de confianza es el llamado certificado raíz. Los sistemas basados ​​en certificados encajan bien en las jerarquías corporativas. La desventaja son los altos costes de construcción y operación, así como la complejidad técnica de una infraestructura de clave pública (PKI). El estándar S/MIME se basa en certificados digitales. Un certificado vincula datos de una clave criptográfica (o par de claves, que consta de de una clave pública y una clave secreta) a datos del titular y de una autoridad certificadora, así como otras especificaciones como versión, período de validez, uso previsto y huella digital. En el intercambio de datos web, el servidor transmite su certificado con la clave pública al cliente. El cliente, en este caso el navegador web del usuario, comprueba si puede confiar en el certificado recibido. Para ello, mira la lista de certificados que le entregaron durante la instalación o que el propio usuario instaló e intenta verificar la firma del certificado del servidor con uno de los certificados integrados en el navegador. Si se pudo verificar el certificado, se inicia una transferencia de datos cifrada. En caso contrario, se pregunta al usuario mediante un cuadro de diálogo si desea comprobar y aceptar el certificado. Es fatal que un certificado que en realidad no es confiable sea declarado confiable por descuido. Ejemplo de generación de firma digital en sistemas PGP Para generar una firma digital usando PGP (Pretty Good Privacy) en la línea de comando, asegúrese de que GnuPG (que incluye la funcionalidad PGP) esté instalado en su sistema. Normalmente puedes instalarlo usando tu administrador de paquetes. Por ejemplo, en sistemas basados ​​en Debian, puede usar: sudo apt-get install gnupgsudo apt-get install gnupg. Si aún no ha generado un par de claves PGP, puede hacerlo usando el comando gpg. Ejecute el siguiente comando y siga las indicaciones: Este comando lo guiará a través del proceso de creación de un par de claves, incluida la selección del tipo de clave, el tamaño de la clave, la fecha de vencimiento y el suministro de una identificación de usuario (generalmente su dirección de correo electrónico). Una vez que tenga su par de claves generado, puede firmar un archivo usando su clave privada. Suponga que tiene un archivo llamado ejemplo.txt que desea firmar. Ejecute el siguiente comando: gpg –detach-sign example.txtgpg –detach-sign example.txt Este comando generará un archivo de firma separado llamado example.txt.sig. La opción –detach-sign indica que la firma debe estar separada del archivo original. Para verificar la firma usando la clave pública correspondiente, puede usar el siguiente comando: gpg –verify ejemplo.txt.sig ejemplo.txtgpg –verify ejemplo.txt.sig ejemplo.txtSi la firma es válida y coincide con el archivo, usted Verá un mensaje indicando que la firma es buena. Sistemas basados ​​en certificados Ya hemos mostrado los pasos para firmar digitalmente usando el sistema RSA en este artículo. El intercambio de claves Diffie-Hellman es un método utilizado para intercambiar claves criptográficas de forma segura a través de un canal público. Se utiliza principalmente para acuerdos de claves más que para generar firmas digitales. Sin embargo, Diffie-Hellman se puede utilizar junto con otros algoritmos criptográficos, como DSA, para crear un esquema de firma digital. A continuación, proporcionaré un ejemplo de cómo se puede utilizar el intercambio de claves Diffie-Hellman con DSA para la generación de firmas digitales en la línea de comando: Primero, debe generar los parámetros Diffie-Hellman. Ejecute el siguiente comando: openssl dhparam -out dhparams.pem 2048openssl dhparam -out dhparams.pem 2048Este comando genera parámetros Diffie-Hellman con un módulo principal de 2048 bits y los guarda en un archivo llamado dhparams.pem.A continuación, debe generar una clave privada DSA. Ejecute el siguiente comando: openssl dsaparam -genkey -out dsaprivate.pem -nooutopenssl dsaparam -genkey -out dsaprivate.pem -nooutEste comando genera una clave privada DSA y la guarda en un archivo llamado dsaprivate.pem. Ahora, extraiga la clave pública de la clave privada. Ejecute el siguiente comando: openssl dsa -in dsaprivate.pem -pubout -out dsapublic.pemopenssl dsa -in dsaprivate.pem -pubout -out dsapublic.pemEste comando extrae la clave pública de la clave privada de DSA y la guarda en un archivo llamado dsapublic .pem. Supongamos que tiene un archivo llamado data.txt que desea firmar. Ejecute el siguiente comando: openssl dgst -sha256 -sign dsaprivate.pem -out Signature.bin data.txtopenssl dgst -sha256 -sign dsaprivate.pem -out Signature.bin data.txtEste comando calcula el hash SHA-256 del data.txt archivo y lo firma usando la clave privada DSA, generando un archivo de firma llamado firma.bin. Para verificar la firma, necesitará la clave pública correspondiente a la clave privada DSA. Ejecute el siguiente comando: openssl dgst -sha256 -verify dsapublic.pem -signature Signature.bin data.txtopenssl dgst -sha256 -verify dsapublic.pem -signature Signature.bin data.txt Este comando verifica la firma con el archivo data.txt utilizando el Clave pública DSA.