Hace unas semanas una amiga de Letras me preguntó cómo podía firmar un documento de forma segura con su e.firma del SAT. Me comentó que en internet la gente recomienda usar servicios en línea, pero que después de tanto escucharme hablar sobre ciberseguridad, no estaba segura de que fuera confiable subir los documentos del SAT a un portal en línea.
Parece ser que de algo sirve hablar como merolico sobre la seguridad informática, porque, en efecto, subir esos archivos a un página web es una terrible idea. Todo tiene que ver con cómo funciona la firma electrónica avanzada del SAT (la e.firma, pues).
Al tramitar la firma, salimos de las oficinas del SAT con una memoria USB con tres archivos, hartas dudas y ninguna respuesta (más adelante hablaremos del peligro que es que el SAT confíe en nuestra bondad al pedirnos llevar una USB a sus instalaciones). Lo único que sabemos es que son archivos que en algún momento necesitaremos para hacer trámites en el portal oficial del SAT o para pedir una cédula profesional; sin embargo, la utilidad de esos archivos va mucho más lejos (y su funcionamiento es harto interesante).
Los archivos importantes son dos: uno que termina con .key que es una clave privada, y otro que termina con .cert que es un certificado público. El certificado (.cert) es un archivo que contiene la llave pública (más adelante hablaremos sobre esto), los datos de identificación de la persona que solicitó la firma (nombre, RFC, vigencia) y una especie de firma digital del SAT que verifica que la llave pública es original y válida.
EL otro archivo es una secuencia de números secretos* cifrados (por decirlo de alguna forma) con una contraseña que funciona como una huella digital única, validada por el certificado. Esta secuencia de números, en conjunto con el certificado y la contraseña, puede servir para todo lo que sirve la firma autógrafa y, por ello, es muy mala idea ceder estos archivos a una web.F
¿Cómo funciona la e.firma?
Al firmar un documento digitalmente, documento pasa por una serie de procesos matemáticos más parecidos al terror de un examen de cálculo que a hacer un garabato en un cheque.
- Primero, se calcula el hash del documento. Es decir, se genera una cadena de números y letras llamado “hash”, este hash contiene toda la información del documento. Es como una especie de huella digital, de tal modo que si el documento cambiara hasta en el menor de los detalles (un espacio, por ejemplo) el hash completo sería diferente.
- El hash se cifra con la llave privada (que necesita de la contraseña para poder ser leída). El resultado de esto es la firma digital: otra cadena que sólo puede generarse con esa versión específica del documento y la llave privada. De esta forma se asegura la tanto la autenticidad del firmante como que el documento no sufrió ningún cambio después de ser firmado.
- A esta firma se le adjunta el certificado público (el archivo .cer) que, como ya dije, contiene la llave pública y los datos de identidad del firmante.
Ahora bien, cuando otra persona recibe el documento se debe realizar el proceso inverso: se calcula el hash del documento recibido; luego se usa la llave pública del certificado para descifrar la firma y obtener otro hash; al final, ambos resultados se comparan. Si los resultados coinciden significa que el documento no fue alterado y que lo firmo quien tiene la llave privada correspondiente. En pocas palabras, la e.firma es una combinación de un sello notarial, una huella digital y un candado matemático.
¿Y, cómo firmamos de forma segura?
hora que tenemos una noción de lo que es y cómo funciona la firma electrónica, podemos imaginar lo peligroso que puede resultar que alguien copie estos archivos. No quisiera pensar mal de la buena gente que ofrece servicios en línea por la pura bondad de su corazón. Quiero decir que es posible que haya programadores amables que hayan decidido publicar un código que permita a las personas firmar documentos digitales, pero, por ahí dicen que el infierno está lleno de buenas intenciones.
¿Qué nos asegura que no hay algún actor malicioso interceptando los archivos de una web, esto contra los buenos sentimientos del programador? La respuesta es: nada. Como usuarios comunes, no tenemos forma de saber si una web está comprometida. De hecho, ha pasado muchas veces y con empresas muy grandes como Telmex o instituciones como la misma SEDENA que tuvo actores maliciosos exfiltrando información por meses.
Entonces, la forma más segura de utilizar la e.firma es aislar el entorno tanto como sea posible, sin llegar a ponernos un gorro de aluminio en la cabeza. Lo ideal es hacerlo offline, es decir, en nuestra propia máquina con programas que no requieran intercambiar información vía internet.
Existen varias alternativas para hacerlo como Kleopatra o OpenSSL. A mi amiga le recomendé las dos que me parecieron más sencillas: Adobe Acrobat y JsignPdf. Estas dos utilidades permiten firmar documentos electrónicos desde nuestra máquina. Adobe está respaldada por la enorme empresa que la desarrolla. JsignPdf, por otra parte, es una herramienta de código abierto desarrollada en Java y con una muy buena reputación dentro del mundo de GitHub, por lo que podríamos decir que está respaldada por la comunidad (y, definitivamente, la comunidad no permitiría que una utilidad así tuviera una puerta trasera).
*Precisión: no se trata simplemente de “números secretos”, sino de un algoritmo de cifrado llamado RSA que se basa en la generación de un producto coprimo a partir de dos factores primos. A esta primera etapa le siguen otros cálculos que quedan fuera del enfoque de este artículo, pues está etiquetado como “informática para no informátiques”. Si requieres más precisión sobre las matemáticas detrás de esto, espera el artículo sobre RSA.
