Con el auge de las criptomonedas, y la popularidad de tecnologías como la blockchain, se ha generado un gran interés y curiosidad por la criptografía.
La criptografía es una rama de las ciencias de la computación enfocada en desarrollar e implementar esquemas seguros para enviar y recibir mensajes en entornos adversariales. Entornos adversariales es una manera elegante de decir “entornos donde hay participantes que te quieren fregar”. El internet es un ejemplo de entorno adversarial, ya que tienes hackers, estafadores, usurpadores de identidad y demás delincuentes tratando de sustraer o modificar información.
A grandes rasgos, los sistemas criptográficos se dividen en dos ramas principales: los basados en criptografía simétrica y los basados en criptografía asimétrica. Los basados en criptografía simétrica son fáciles de conceptualizar. Los documentos o mensajes se “cierran” con una llave y sólo quienes tengan copia de esa llave pueden abrirlos y leerlos. Para una analogía podemos imaginarnos una caja con candado en donde guardamos documentos, cartas, etc. Esta caja solo puede ser abierta y su contenido leído por las personas que cuenten con una copia de la llave.
Las criptomonedas, la blockchain y el servicio de Mifiel están basados en criptografía asimétrica. A diferencia de la criptografía simétrica, la asimétrica es más compleja de visualizar por lo que es útil plantear una analogía.
Imaginemos una caja con dos cerrojos (uno del lado izquierdo y otro del lado derecho) y dos llaves que corresponden a cada uno de ellos. Una de las llaves la bautizamos llave pública y la otra, llave privada. La llave privada corresponde al cerrojo de la izquierda y la llave pública al de la derecha.
Esta caja tiene un funcionamiento especial. Si cierro la caja con el cerrojo de la izquierda (la llave privada) la única manera de abrirla es usando el cerrojo de la derecha (el que corresponde a la llave pública). No es posible abrirla volviendo a utilizar la llave privada en el cerrojo de la izquierda, forzosamente debo usar la llave pública en el cerrojo de la derecha. En cambio, si cierro la caja con el cerrojo del lado derecho, la única manera de abrirla es con la llave privada en el cerrojo izquierdo.
Además, es imposible fabricar un cerrojo a partir de alguna de las llaves.
Con mi caja lista y funcionando, procedo a hacer muchas copias de la llave pública y las reparto entre mis amigos, familiares, compañeros de trabajo, socios, mi contador, mi abogado y a toda persona que considere necesario.
De la llave privada no hago ninguna copia. Al contrario, la guardo muy bien en un lugar seguro donde sólo yo —y nadie más— tenga acceso a ella.
¿Qué podríamos hacer con esta peculiar caja, las llaves públicas que repartí y la llave privada?
Principalmente dos cosas:
1) Supongamos que mi contador no puede entregarme un mensaje personalmente pero por su naturaleza quiere asegurarse que sólo yo pueda leerlo. Podría ponerlo en un sobre cerrado y mandármelo por paquetería, pero aunque el sobre esté cerrado, un atacante con determinación podría abrirlo con mucho cuidado, leer el mensaje y volverlo a cerrar. Yo nunca me enteraría que alguien lo leyó.
Usando la caja especial que acabamos de describir, mi contador introduce el mensaje en ella. La cierra usando la copia de la llave pública (cerrojo derecho) que le entregué y envía la caja por paquetería. Al haberse cerrado la caja usando una de las copias de la llave pública en el cerrojo derecho, el único que puede abrir la caja es el poseedor de la llave privada (cerrojo izquierdo). La llave privada únicamente puede ser accesada por mi, por lo que mi contador sabe que sólo yo podré abrir la caja y leer el mensaje.
¿Cuáles son algunos ataques que se podrían intentar para burlar este esquema?
El atacante podría obtener una de las copias de la llave pública y hacerse pasar por mensajero para que mi contador le entregue la caja cerrada. Sin embargo, al haber sido esta cerrada con una llave pública (cerrojo derecho), el atacante podría introducir la llave en dicho cerrojo pero no podría abrir la caja ya que si se cerró usando una llave pública, únicamente puede ser abierta usando la llave privada en el cerrojo izquierdo.
2) Imaginemos que quiero enviar un mensaje a mi abogado de tal manera que él pueda estar seguro —sin duda alguna— de que el mensaje viene de mi parte aunque yo no le entregue la caja personalmente y esta le sea entregada por un desconocido (posiblemente con malas intenciones).
¿Qué tendría que hacer yo?
Escribo el mensaje para mi abogado en un papel y lo meto en la caja. La cierro usando el cerrojo de la izquierda (el que solo acepta la llave privada) y la envío por paquetería a mi abogado.
Cuando mi abogado la reciba, buscará la llave pública que anteriormente le compartí y procederá a insertarla en el cerrojo de la derecha. Si la caja abre, mi abogado puede estar totalmente seguro de que el mensaje fue puesto dentro por mi. Que él haya podido abrir la caja con el cerrojo del lado derecho implica que necesariamente la caja fue cerrada usando el cerrojo del lado izquierdo. Este cerrojo corresponde a la llave privada de la cual sólo hay una copia y la tengo yo.
Al igual que para el ejemplo anterior, exploremos un par de escenarios de ataque y como la caja y las llaves los prevendrían.
Pretendamos que alguien le quisiera enviar un mensaje a mi abogado intentando suplantar mi identidad. Tendría dos opciones:
- Utilizar una caja con sus llaves, meter un mensaje y enviarla a mi abogado. Al recibir esta caja mi abogado trataría de usar la copia de mi llave pública, no entraría en ninguno de los cerrojos por lo que no podría abrir la caja.
- El atacante es alguien cercano a mi o a alguien de los conocidos a quienes entregué copias de la llave pública, por lo que tiene acceso a una de estas llaves y por lo tanto puede cerrar la caja usando el cerrojo de la derecha. Mi abogado recibe la caja, inserta su llave en el cerrojo del lado derecho y aunque la llave sí entra en el cerrojo, no es posible abrirla ya que al haber sido cerrada con una llave pública (cerrojo derecho), únicamente puede ser abierta con la llave privada (cerrojo izquierdo). Mi abogado sabe inmediatamente que yo no fui quien cerró esa caja.
Buen intento, señor impostor, pero mi esquema de llaves frustró su intención de hacerse pasar por mi.
¿Cómo se relaciona la criptografía asimétrica al servicio de Mifiel?
La firma electrónica avanzada está basada en el segundo escenario, en el que yo quiero mandarle un mensaje a alguien de tal manera que el receptor pueda estar inequívocamente seguro de que el mensaje fue enviado por mi. A diferencia de las llaves físicas que usamos como ejemplo, en el mundo digital la llave privada y la llave pública son archivos digitales. En el caso de la FIEL o e.firma del SAT, la llave privada es el archivo tipo .key y la llave pública está contenida en el archivo tipo .cer. También, a diferencia de la llaves físicas, la llave pública contenida en el archivo .cer puede ser descargada por quien sea de tal manera que yo no tenga que entregar personalmente una llave pública a cada persona con la que quiero interactuar.
Cuando firmas con tu e.firma en Mifiel, usas tu llave privada/archivo.key (cerrojo izquierdo en la analogía) para cerrar la caja de tal manera que si los demás podemos abrirla usando una copia de tu llave pública en el cerrojo derecho, podemos saber que fuiste tú —y nadie más— quien metió el mensaje en la caja y la cerró. En el mundo digital esto se llama firmar.
Es por esto que cuando tramitas tu FIEL, firmas una carta responsiva donde te responsabilizas a informarle al SAT en cuanto sospeches que tu llave privada ha caído en las manos de un tercero. Cualquier uso que se le dé a esta llave es imputable a ti (por ley), por lo que es tu responsabilidad no compartirla con nadie y en caso de extravío, robo o entrega voluntaria debes reportarla inmediatamente al SAT. Este reporte se hace por internet.
Otro ejemplo práctico de este esquema es el de la facturación electrónica. El proveedor genera un documento (la factura), lo mete en la caja y la cierra con su llave privada (cerrojo izquierdo). Todos los que tengan una copia de la llave pública del proveedor pueden abrir la caja usando el cerrojo derecho y estar seguros de que la factura la emitió el proveedor. Por ello no es posible que un fulano se ponga a emitir facturas en nombre de Bimbo. No tiene la llave privada requerida para hacerlo.
En conclusión, la criptografía asimétrica o de llave pública permite construir sistemas de intercambio de información altamente seguros para recibir o enviar mensajes de la siguiente forma:
1) Usando mi llave pública cualquiera puede enviarme mensajes con la seguridad de que nadie más que yo podrá leerlos. Aún si el mensajero o el medio por el que se manda el mensaje no es confiable.
2) Usando mi llave privada puedo enviar mensajes a cualquier persona y los receptores pueden verificar —usando una copia de mi llave pública— que el mensaje fue enviado por mi y únicamente por mi. Esto sin importar que el mensaje haya sido enviado usando un método no confiable. La criptografía asimétrica es el esquema utilizado en la firma electrónica avanzada y la facturación electrónica.