Firma electrónica

Autor:
Ricardo Naranjo Faccini
Fecha de publicación:
Friday 05 July 2024
Tema:
Seguridad de la información, seguridad informática y cibernética
Revisado por :
Ricardo Naranjo Faccini
(Friday 05 July 2024)

Resumen

¿Qué significa firmar electrónicamente un documento?, ¿cómo se hace?, ¿por qué es una garantía? En éste artículo brindamos solución a éstos cuestionamientos.


La firma escaneada

Recientemente, en un foro de discusión, alguien preguntó sobre una forma para firmar digitalmente un documento. Con muy buena voluntad uno de los participantes le sugirió consultar el siguiente enlace https://www.youtube.com/watch?v=BAcD8m5Pk8g, analizando el contenido del video se nota que no está relacionado con el concepto de firma electrónica sino con el de incrustar una imagen o fotografía de una firma en un documento y por supuesto son dos cosas muy diferentes.

Este mecanismo se denomina firma escaneada” y debido a la cuarentena suscitada por la enfermedad causada por el virus COVID-19 su uso se volvió frecuente e incluso en Colombia se expidieron los decretos 491 de 2020 y 806 de 2020, mediante los cuales se autorizó el uso de la firma escaneada. (El decreto 806 de 2020 tuvo vigencia hasta el 5 de junio de 2022, el 491 no indica final de su vigencia, estará vigente hasta ser derogado).

Posteriormente, la Corte Suprema de Justicia indicó que una firma electrónica sólo producirá efectos jurídicos si cumple con determinados procesos de seguridad y fiabilidad los cuales serán generados a través de un método técnico previamente establecido. Entonces el uso de la firma escaneada está amparado por la ley, pero no tiene la misma confiabilidad ni validez probatoria que aporta una firma digital o una electrónica, dado que cualquiera puede incrustar la foto de una firma para falsificar un documento.

Una persona que tenga acceso a un documento que previamente haya sido firmado puede fotografiar la firma y utilizando cualquier programa básico de computador de manipulación de imágenes podrá falsificar la firma de un nuevo documento mediante un sencillo proceso de cortar/pegar la firma en el documento que quiere hacer pasar como firmado. Es decir que una imagen de tu firma en un documento no genera confianza suficiente en que fuiste TÚ quien lo firmó.

Una firma electrónica es un procedimiento para que un tercero certifique la identidad de la persona que remite un mensaje o que expide documento. Ésto se hace cifrando el mensaje y anexándole un archivo llamado firma electrónica en donde el tercero certifica que la única persona que pudo producir el documento o mensaje fue el autor y no fue suplantado por nadie. Es como una notaría pero digital y automática, a la que se accede por internet en tiempo real.

Generalmente se utilizan dos algoritmos de cifrado, uno llamado mecanismo de hash y otro llamado esquema de llaves pública-privada.

¿Qué es posible firmar?

Pueden firmarse cartas, documentos, contratos y facturas utilizando ésta metodología, también pueden firmarse mensajes enviados por email. Un desarrollador puede firmar actualizaciones del software enviadas a un repositorio de git, en fin hay múltiples aplicaciones para la firma electrónica.

El procedimiento es muy sencillo y sólo requiere, al momento de firmar, que se ingrese la clave de protección de la firma. Para que todo ésto funcione es importante que se guarde la firma muy bien protegida, con una clave que únicamente conozca el titular (propietario o dueño de la firma).

Mecanismo HASH

Con el mecanismo de hash se genera un archivo que contiene una cadena de caracteres, resultado de aplicar el algoritmo de hash al mensaje o documento original. Ésta cadena de caracteres se considera como la huella digital del archivo, puesto que (si el algoritmo de hash es bueno) la probabilidad de que existan 2 documentos con cadenas hash iguales debe ser minúscula.

Así pues, con éste mecanismo hash se garantiza que si se le cambia una tilde al documento original o tan siquiera un bit, la huella digital no coincidirá con el documento y el procedimiento finalizará indicándole al receptor que el documento no es auténtico y fue alterado.

Para ilustrar el mecanismo se construyó un archivo de texto con los dos párrafos anteriores y se les aplicó el algoritmo hash SHA256 con el cual se obtiene la siguiente huella digital:

3d65541b18c8456af1682e49d0d75457dcfdae59439532a24a49aa759bfe15d2

Posteriormente se sacó una copia al archivo de texto y se alteró la primera letra, de C a D, es decir que en vez de iniciar con la palabra “Con” el documento alterado empieza con la palabra “Don”. En la práctica yendo a la forma como se almacenan los archivos sólo se cambió un byte. La huella digital del archivo alterado utilizando el mismo algoritmo SHA256 queda así:

c283ec92e030e5d8c91194911a256f0d1af420a21e838541d07c9910883a6ca8

Como se puede observar las cadenas son totalmente diferentes, a pesar de que el cambio fue mínimo.

Por supuesto si el cambio es más grande, como la modificación de una firma escaneada o la manipulacion de las cifras en una propuesta, el mecanismo hash puede probar que el archivo original fue alterado.

És muy fácil de replicar el procedimiento descrito para constatar el correcto funcionamiento obteniendo el mismo resultado en las huellas digitales. Hay programas para generar las huellas SHA256 y de otro tipo disponibles en internet para todos los sistemas operativos al igual que hay múltiples páginas web que gratuitamente permiten realizar el cálculo de las huellas. (Particularmente he utilizado fácilmente y sin inconvenientes: https://emn178.github.io/online-tools/sha256_checksum)

Generalmente el checksum se utiliza para validar la integridad del contenido de un archivo sin necesidad de tener que copiar su contenido en otro documento. Por ejemplo: en un contrato, en lugar de copiar todo el contenido de una propuesta comercial, se puede indicar: Hace parte integral de éste contrato la propuesta comercial plasmada en el archivo en formato PDF cuya suma SHA256 corresponde con 3d65541b18c8456af1682e49d0d75457dcfdae59439532a24a49aa759bfe15d2“. Con ésta cláusula se garantiza que se hace referencia a ése y únicamente ése archivo de principio a fin.

Esquema de llaves pública-privada

Ésto se asemeja a los mecanismos que se utilizaban durante las guerras, cuando cerraban un maletín con dos candados, la llave de un candado la tenía el mensajero y la del otro la tenía el receptor, de tal forma que únicamente cuando el mensajero llegaba, abría su candado y el receptor podía abrir el de él para conocer el contenido del maletín.

En éste esquema de llave pública-privada, cada individuo que lo utiliza genera dos archivos, uno llamado la llave pública y el otro la llave privada. La llave pública será un archivo de conocimiento público (como su nombre lo sugiere) y la privada sólo la debe conocer el dueño de la llave.

La llave pública puede ponerse en una página web y anunciarse al universo que es la llave pública del individuo que está compartiendo su información. La llave privada debe incluso almacenarse cifrada con una palabra clave que únicamente conozca la persona que la generó.

La magia del asunto está en que lo que se cifra con la llave pública únicamente se puede descifrar con la llave privada y viceversa (lo que se cifra con la privada se descifra con la pública).

Así las cosas, si se cifra un documento o mensaje con una LLAVE PRIVADA, cualquiera podrá descifrarlo, porque la LLAVE PÚBLICA cualquiera la puede conocer pero con la salvedad que el mecanismo garantiza que quien generó el documento solamente pudo ser la persona que conoce la LLAVE PRIVADA. Es decir que es un mensaje FIRMADO, la única persona que pudo haber generado el mensaje es el dueño de la llave privada.

En sentido contrario, si se le desea enviar un documento confidencial a una persona en particular, y que ella sea la única que lo pueda conocer (descifrar), hay que tomar de su sitio web su LLAVE PÚBLICA, cifrar el documento con ella y enviarle el mensaje cifrado. De ésta forma nadie, excepto el destinatario, podrá decodificar el mensaje puesto que se necesita la LLAVE PRIVADA para hacerlo.

Ni siquiera el remitente del mensaje, quien cifró un mensaje con la LLAVE PÚBLICA del receptor, puede descifrar el mensaje.

Para que todo el mecanismo funcione solamente el emisor de una LLAVE PRIVADA la debe conocer y la debe tener guardada y protegida para que nadie pueda descifrar los mensajes destinados únicamente a sus ojos y tampoco nadie pueda firmar los mensajes a su nombre.

Para proteger las llaves se utiliza otro mecanismo de cifrado, denominado “simétrico” con el cual el contenido de la LLAVE PRIVADA queda cifrado con una clave que únicamente debe conocer el dueño.

Cómo se ven las llaves

Generalmente no se ven. Son archivos que se almacenan en tu computador y que un usuario no requiere ver. Éso si, se almacenan protegidos con una palabra clave que hay que recordar. Pero, si aún tienes curiosidad de conocer, corresponde con una serie de caracteres incomprensibles similares a lo siguiente:

-----BEGIN PGP PUBLIC KEY BLOCK-----
mQENBFriM8kBCADCC+/1OPIugz2viBlMRWBHNFfPnUTTlBTGMwyxG/6IrsupY9YL
ooKANupTRKcwx4WOooVq9nmyOjg2LzzuY1LXa0BAn/dxFYaVugOIds/ti2MTASUF
8hVmBbIWP8dGM013mirDwtCLQQsTLgQCPMZ9oSIRc9puvOY5bS3tiXrFx2/hfFsu
bzCnju6bN8e2KoU8vCpVKZLkyVrBdOHpumlwqvZnt/qVthNF2A4CPb9oDAwlP1qX
abwTj/C8HFFtc8te9FpXh2OOMzsrbc6Q4bP1PIcVbAOSnru0wq3yz4I2JP52pejQ
fPSO8z9/oClnpD/2FlvDxn05clCunDMUt03jABEBAAG0QFJpY2FyZG8gTmFyYW5q
byBGYWNjaW5pIChJbmcuIE0uU2MuKSA8cmljYXJkby5uYXJhbmpvQGdtYWlsLmNv
bT6JAT4EEwECACgCGwMGCwkIBwMCBhUIAgkKCwQWAgMBAh4BAheABQJfA0V4BQkH
43iqAAoJEH7qlnFvdQnIPf0IAJsX82iZ8mizk0Vd88C8A28aS4HdzRT3xauOTBe3
eeMNnFwzzwsEIfTgiT5e7wgfjFx2RU5XxqZPWTaauJHpYhBjiMpe+np8NcUAxtOR
wInMt4y+L08nKaV+xpr9/vX0Ket24OqfeXMvLftDNqUmGByVkpTR6QXArDB7gbbV
/dKU71aDAWzS3i+0SWRpLl0d1AYEmUCjbZIMHuAVjWKCSQTZSik+KjOAVSKb5Q1u
mJKCNQ6nJ/l4WQpgKLx83pNwho+1obyPBRVM0ePRJ6swzoPBLfbcFhlIqaQWrmBy
hdQ+WZJ90MJ6JikEdXKKqfAsl1GAXITYNZdL3TWFXPuSPIm5AQ0EWuIzyQEIALPW
aOi5xjXGTMZlSJ6QljIIGkMXQyYr1NWOm2Fu4DIGjSiMyaWOsIW4DVsi9e60k8fp
Dv3PY74/xQ4yloVNXgcl/Fi85YYfWXrz9fpLU++Cb7ccMM0sdz+DPWyqOizOUmAA
xwViv0tpI1kM9QrDboeIiaAPRVGE+RCDv7pyOuUVz42WFUuVUbHkEorHue1rikDg
zOGSCiAG/zSqFWeFT809LOcY48ISoc/G2cxMrbApUm3qczwTiJoaKohDOC0El5y9
jJIQP+c09zromzFj0PZ2PjKVJyq+xKJBVEID4XDr/wASZjXv7W0BzVltDfjFK5y0
ni54bxF24oDvuLfYUb8AEQEAAYkBJQQYAQIADwIbDAUCXwNF5gUJB+N5GgAKCRB+
6pZxb3UJyJnKB/91HKttbvTz6B68yzkPN6Cwc2f/vj4zgkQSyGUIAzAhHtRJnQ5f
QnNDnVW5dUPk1Iz7YM7UjTTBu0VtSXQweOK1W8uZqD89sfy4OOB7fsMEmNpDkb7k
ZkDi3klb+O7QSzg6Ukbq4YmKnh4wqhpqUW4BOfHEtaEYdnRjJI9Nt57SBt01MHCg
qHsMctYlP58i8B8497cPAkSDFgOV7hjyGn2f+nLEwmuSE7JOp4RVZ5Gj8ydpMcW8
xbWA4QDO5TrAXuwIPN2pvNluE5msdZjxTGJCjgo44B4fNS7PlSYSt7cL37Wqgx5v
4267y495Spe+t9W4oKO+QpMP0x2h+XwJhneB
=s3n8
-----END PGP PUBLIC KEY BLOCK-----

La llave privada, es muy similar, pero inicia con:

-----BEGIN PGP PRIVATE KEY BLOCK-----
Version: GnuPG v1

y finaliza con

-----END PGP PRIVATE KEY BLOCK-----

Entidades de certificación (Certification authorities CA)

Existe un problema con el esquema relacionado con la intercepción de la transmisión por un delincuente que falsifique las llaves públicas en el momento en que se inicia la comunicación. A éste problema se le llama man-in-the-middle (hombre en el medio), y sucede cuando un delincuente genera dos nuevos pares de llaves públicas-privadas, engaña a las partes cambiando las llaves públicas por las que generó y así poder recibir los mensajes de una parte, los descifra, altera cifra nuevamente y reenvía a la otra parte.

Para solucionar éste problema se crearon las CAs (Certification Authorities) que son empresas que cumplen con una plétora de requisitos que garantizan que manejan altos estándares de seguridad. Y éstas CAs actúan en el mundo digital como un notario en el múndo físico, certificando que tu llave pública es la tuya (mediante unos certificados llamados X-509).

De ésta forma las personas que desean comunicarse, en lugar de buscar en la página web del receptor la LLAVE PÚBLICA le preguntan por ella a las entidades de certificación (las cuales también establecen comunicación con llaves públicas y privadas para enviarte los certificados).

En seguridad informática no existe el riesgo 0% ni la seguridad 100%, sino niveles aceptables de seguridad, con éste esquema de llaves públicas-privadas se obtiene un nivel bastante alto de confianza en que se mitiga la perdida de confidencialidad, integridad o disponibilidad, los pilares fundamentales de la seguridad de la información.

Es válido el uso de firmas digitales en Colombia

Si, la Ley 527 de 1999 "Por medio de la cual se define y reglamenta el acceso y uso de los mensajes de datos, del comercio electrónico y de las firmas digitales, y se establecen las entidades de certificación y se dictan otras disposiciones" brinda un marco jurídico en donde se establece la norma que contempla tanto la validez jurídica de las firmas digitales como de las entidades de certificación.

Igualmente establece que el Organismo Nacional de Acreditación en Colombia – ONAC será el ente encargado de autorizar a las entidades de certificación para actuar como tal. En la página web https://onac.org.co/directorio-de-acreditacion-buscador se encuentra el listado de entidades de certificación autorizadas de acuerdo con la ley Colombiana.

En el Decreto 2364 de 2012 (ahora Decreto 1074 de 2015) se define la firma electrónica como los códigos, contraseñas, datos biométricos o claves criptográficas privadas que permiten identificar a una persona en relación con un mensaje de datos, siempre y cuando este sea confiable y apropiado respecto de los fines para los que se utiliza.

Inclusive en casos como la DIAN es obligatorio el uso de la firma electrónica para firmar documentos y formularios. https://www.dian.gov.co/Prensa/Aprendelo-en-un-DIAN-X3/Paginas/Paso-a-Paso-Generacion-Firma-Electronica.aspx

Diferencias entre digital, electrónica, escaneada y checksum

La forma de diferenciar se basa en el proceso de creación de la firma.

Firma digital

Solo puede ser obtenida a través de una entidad certificadora que previamente ha sido autorizada por el Gobierno Nacional.

Firma electrónica

Puede ser emitida por cualquier entidad competente para tal fin.

Firma escaneada

Puede ser creada por cualquier persona natural o jurídica sin que se den los protocolos de seguridad que cumplen las firmas anteriores.

Mecanismo Hash o Checksum

Es un algoritmo matemático que genera una cadena de caracteres (generalmente un número hexadecimal) que es único y comprobable para el documento con el que se generó.

Herramientas

Gnu Privacy Guard - GPG

En software libre el programas estrella para la generación de llaves y cifrado se llama Gnu Privacy Guard o gnupg, es fácil de usar y lo pueden descargar desde https://gnupg.org/

Algoritmos hash

Hay que evitar el uso de algoritmos como MD5 o SHA1, se ha demostrado que no son suficientemente efectivos en la generación de huellas digitales. Se recomienda el uso de los algoritmos SHA256 o SHA512 que son abiertos y de fácil consecusión.

Firma electrónica

Existen muchas empresas que proveen software que hace todo el trabajo de la firma electrónica de empaquetado de los mensajes con sus huellas digitales y llaves de cifrado/descifrado como Docusign, Adobe y Wondershare, las cuales son gratuitas o tienen unos costos bastante reducidos para el público en general.

CA gratuitos

Si se desean publicar las llaves para firmar correos electrónicos y documentos, se puede hacer uso de los siguientes servidores:

gpg4win.org

Para los usuarios de Windows está disponible la aplicación gpg4win en el sitio web https://gpg4win.org, ésta herramienta tiene una interfaz gráfica de fácil uso en la forma como se presenta a continuación:

Kleopatra es el administrador de llaves tanto propias como de terceros:

Al abrir la herramienta se presentan las alternativas de firma o cifrado de archivos:

Pero, igualmente mediante los íconos de los archivos, presionando el botón derecho del ratón se obtiene un menú contextual que permite realizar las operaciones de firma o cifrado.

Uso de gnupg en línea de comandos

En Linux y sistemas operativos compatibles como MacOS, tras instalar gnupg, se puede utilizar de la siguiente forma:

  • Generar llaves:

    gpg --gen-key

  • Generar listado

    gpg --list-keys

    De ahí se obtiene el código de identificación de la clave de 8 caracteres que llamaremos [GPGKEY] para cargar en los clientes de correo electrónico, en los procesadores de palabra, hojas de cálculo, GIT y en los siguientes ejemplos.

  • Obtener la llave pública:

    gpg --armor --export correo@dominio.com

  • Obtener la llave privada:

    gpg -ao emailpersonal-private.key --export-secret-keys [GPGKEY]

  • Obtener la huella digital de la firma

    gpg --fingerprint [correo@dominio.com]

  • Eliminar una llave:

    gpg --delete-secret-key [GPGKEY]

    gpg --delete-key [GPGKEY]

  • Enviar las llaves a los CA del MIT y de Ubuntu:

    gpg --send-keys --keyserver pgp.mit.edu [GPGKEY]

    gpg --send-keys --keyserver keyserver.ubuntu.com [GPGKEY]

  • Revisar que las llaves estén en los keyservers:

    gpg --keyserver pgp.mit.edu --search [correo@dominio.com]

    gpg --keyserver keyserver.ubuntu.com --search [correo@dominio.com]

  • Añadir una clave de otra persona en la que confío a mi llavero:

    gpg --keyserver pgp.mit.edu --recv [GPGKEY]

    gpg --keyserver keyserver.ubuntu.com --recv [GPGKEY]

    gpg --edit-key emailotro@servidor.com

    Al final se indica la palabra trust.

  • Cifrar un documento para enviarlo a [correo@dominio.com]:

    gpg --output cifrado.gpg --encrypt --recipient [correo@dominio.com] original.png

  • Descifrar un mensaje para obtener el documento original:

    gpg --output descifrado.txt --decrypt cifrado.gpg

    gpg --output doc.gpg --symmetric doc

  • Firmar un documento

    gpg --output archivo.sig --detach-sig archivo

  • Verificar que el documento esté firmado adecuadamente:

    gpg --verify archivo.sig archivo.png

Bibliografía