Criptografía asimétrica o de clave pública – Certificados, RSA, etc.

1
12724

En este artículo vamos a ver qué es y en qué se basa la criptografía de clave pública o criptografía asimétrica. También veremos algunas de las aplicaciones que tiene, RSA (el más usado), qué son las firmas digitales, etc.

Índice de contenidos

1. Criptografía asimétrica o de clave pública.

Este tipo de criptografía se basa en una función de un sólo sentido. Esto significa que el cálculo de la función en una sentido es relativamente sencillo, sin embargo, para deshacer ese cálculo, en el otro sentido, el coste computacional requerido es muy alto.

Existen dos claves: una pública y una privada. Como ejemplo, si nos basamos en las claves de Alice, cualquiera puede usar la clave pública de Alice, por ejemplo Bob, para enviarle un mensaje cifrado, pero únicamente Alice puede ver ese mensaje gracias a la clave privada que sólo ella posee.

Imagen extraida de wikipedia
Imagen extraída de Public-key cryptography, Wikipedia

Además, un mensaje puede ser firmado (lo que se conoce como firma digital) por Alice. Este mensaje estará cifrado con su clave privada, ya que únicamente Alice la tiene. Por esta última premisa tiene validez como firma: sólo Alice la tiene. Mientras que cualquiera con acceso a la clave pública de Alice puede verificar el mensaje firmado (cifrado) por Alice.

Dicho esto, podemos concluir que el uso de la firma privada está ligado al concepto de no repudio, es decir, como sólo Bob puede tener su clave privada, si algo está firmado con su clave se tiene la certeza de que la ha firmado Alice.

Por esto último es muy importante tener claro que la clave que se debe compartir es la clave pública, no la clave privada.

A continuación veremos brevemente cómo funciona el sistema criptográfico más utilizado: RSA.

2. RSA

RSA debe su nombre a sus presuntos inventores: Rivest, Shamir y Adleman. RSA se apoya en el problema de la factorización de números muy grandes al que, por el momento, no se ha encontrado una solución eficiente. Si tenéis curiosidad en saber cómo funciona podéis seguir leyendo. Si no, ¡al siguiente apartado!

Para generar dos claves RSA pública y privada, es necesario elegir dos números primos p y q para después multiplicarlos. De esta forma tenemos que N = p · q.

Lo siguiente es elegir e, primo relativo al producto (p – 1)(q – 1) y d, tal que ed = 1 mod (p – 1)(q – 1). En este punto tenemos N, que es el producto de p y q. Llamamos a N el módulo, el número e que hemos elegido será el exponente de cifrado y el número d es el exponente de descifrado. El par de claves RSA se corresponde con:

Clave pública: (N, e)

Clave privada (secreta): d

Para cifrar un mensaje M, dando como resultado el mensaje cifrado C, se calcula:
C = Me mod N

Para descifrar C, dando como resultado nuestro mensaje M, se calcula:
M = Cd mod N

La forma que tiene un atacante de romper este sistema criptográfico es factorizar N, y usar e, que es público, para determinar d. Señalar que esta forma puede no ser la única.

Vamos a ver ahora un ejemplo con números muy pequeños para ver cómo funciona.

  • Seleccionamos dos primos, p = 11 y q = 3
  • Calculamos el módulo N: N = p · q = 33.
  • Calculamos también (p – 1)(q – 1) = 20 para elegir el exponente de cifrado e, que es un primo relativo con 20. Por ejemplo, 3. (e = 3)
  • Ahora calculamos el exponente de descifrado d tal que e · d = 1 mod 20. Despejando determinamos que es 7. (d = 7)

Llegados a este punto, tenemos una clave pública (N, e) = (33,3) y una clave privada (d=7). Vamos a cifrar un mensaje, que puede ser M = 15.

C = Me mod N = 153 = 3375 = 9 mod 33

Por tanto tenemos que C = 9, que es el mensaje que enviaríamos. Para descifrarlo, aplicaríamos la otra fórmula:
M = Cd mod N = 97 = 4782969

Dividimos entre nuestro módulo, 33, y el resto determinaría el mensaje:
4782969 = 144938 · 33 + 15 = 15 mod 33

Señalar que este ejemplo no sirve en el mundo real ya que sería computacionalmente sencillo de factorizar. En el mundo real los primos que se eligen al principio son inmensos: normalmente usando un módulo N de 2048 bits o mayor. ¡Ponte tú a factorizar eso! E incluso después, para mensajes muy pequeños, es posible llegar a determinar el mensaje. Esto se consigue mediante la llamada búsqueda exhaustiva (o de fuerza bruta), que consiste en cifrar todos los valores de nuestro mensaje hasta que uno coincida con el mensaje cifrado que tratamos de averiguar. Para evitar esto se añade un relleno a ese tipo de mensajes muy pequeños.

Para acabar este apartado mencionar que existen más tipos de sistemas criptográficos asimétricos. Por nombrar algunos: Diffie-Hellman, Curvas Elípticas (ECC), etc.

Veremos finalmente qué usos tiene y problemáticas surgen en las criptografía asimétrica.

3. Usos y problemáticas de las claves públicas.

Los sistemas criptográficos de clave pública se pueden utilizar para los mismos propósitos que las claves simétricas, que no cubrimos en este post, sin embargo son más lentos, y destacan en los aspectos en los que las claves simétricas no se pueden utilizar. Como hemos introducido al principio, principalmente tienen dos usos: confidencialidad y autenticación.

Confidencialidad porque como hemos dicho antes, si se quiere enviar un mensaje a Bob, se cifra con la clave pública de Bob y sólo Bob puede descifrar el mensaje, aunque este mensaje cifrado se almacene o transmita por un lugar inseguro.

Este tipo de sistemas criptográficos se utilizan como firmas digitales, que proporcionan integridad, es decir, se sabría si el mensaje ha sido modificado, y no-repudio, es decir, sólo el que posea la clave privada puede ser el autor de la firma. Aquí entran en juego los robos de claves, pero en estos casos las firmas pueden ser revocadas por una autoridad certificadora en la que se confíe o haber caducado. Utilizamos estos conceptos a diario, por ejemplo, mediante los certificados que proporciona el FNMT, la Fábrica Nacional de Moneda y Timbre.

3.1. Firmar – cifrar

A estas alturas deberíamos saber la diferencia entre firmar y cifrar: firmar sólo se puede hacer con la clave privada, mientras que cifrar se suele referir a cifrar con la clave pública. Antes de empezar con ejemplos, vamos a aclarar la terminología a usar:

  • Para cifrar M a Bob, es decir, cifrar un mensaje M con la clave pública de Bob, usaremos {M}Bob.
  • Para firmar M como Bob, es decir, cifrar un mensaje M con la clave privada de Bob, usaremos [M]Bob.

Mezclando los conceptos que acabamos de comentar, se consigue confidencialidad y no repudio. ¿Pero de qué forma hay que mezclarlos? ¿Firmar y cifrar, o cifrar y firmar? Pongamos ejemplos.

Alice envía un mensaje amenazante a Bob, y quiere asegurarse de que sabe quién se lo envía, así que firma el mensaje primero y luego lo cifra con la clave pública de Bob para que sólo él pueda abrirlo.

Criptografía Asimetrica 1

Bob, al percatarse del mensaje, decide jugársela a Alice aprovechando la forma en que Alice ha cifrado el mensaje. Bob descifra con su clave privada el mensaje obteniendo [M]Alice y lo vuelve a cifrar con la clave de Charlie para luego enviarselo. Charlie lo descifra y descubre la amenaza de Alice, por lo que entra en pánico.

Vamos a poner otro ejemplo con la situación contraria. Alice tiene una idea genial y se la quiere transmitir a su jefe Bob, así que la cifra con la clave pública de su jefe y luego la firma con su clave privada.

Criptografía Asimetrica 2

Charlie, su compañero de trabajo, ha interceptado el mensaje, lo ha descifrado con la clave pública de Alice y lo ha firmado con su clave privada, apropiándose de la idea de Alice y enviándosela a Bob, el jefe. El jefe felicita a Charlie y Alice llora.

¿Y ahora? ¿Ambas situaciones son malas? Hay que hacer algunas aclaraciones. En el primer ejemplo Charlie cree que Alice le ha enviado el mensaje. Realmente lo único que sabe es que Alice ha firmado ese mensaje en algún momento. Las claves públicas son públicas, puede haberlo enviado cualquiera.

En el segundo ejemplo, Bob asume que Charlie ha cifrado el mensaje con la clave pública de Bob. Es cierto que Charlie lo firmó, pero no implica que el mensaje lo cifrara él o incluso que supiera lo que contenía el mensaje. Se caer en este tipo de errores por no tener claro cómo funciona este tipo de criptografía, puede ser una fuente de confusión si no anda con ojo.

Aún así, se puede concluir que el uso más apropiado es el del segundo ejemplo, aunque en el mundo real se aplican otras medidas adicionales.

4. Autoridades certificadoras (CAs)

Retomando el tema de las revocaciones de firmas digitales, para un uso seguro de las claves públicas en el mundo real se requiere una infraestructura por detrás que asegure la gestión de los pares de claves, la autenticidad de las mismas y su posible revocación, ya sea por caducidad o por otros motivos.

Esta labor la realizan las autoridades certificadoras (en nuestro caso por ejemplo la FNMT). Un certificado emitido por este tipo de autoridades se compone de la clave pública de la persona que lo ha solicitado, con algún dato más, todo firmado con la clave privada de esa autoridad certificadora. De esta forma cualquiera puede verificar el certificado de esa persona verificando con la clave pública de la entidad certificadora.

Certificado emitido = [clave pública de la persona, algún dato más]Autoridad Certificadora, es decir, un conjunto de datos firmados por la entidad certificadora.

Este sistema evita que alguien malintencionado use la clave pública de otra persona, ya que le sería imposible firmarlo con la clave privada de la entidad certificadora, y por tanto fallaría en la verificación que hemos comentado. Vemos un ejemplo: Como la clave de Alice es pública, Bob «emite» un certificado, que firma con su clave privada (Bob hace de entidad certificadora).

Falsificado = [clave pública de Alice, algún dato más]Bob

Emitido por autoridad = [clave pública de Alice, algún dato más]Autoridad Certificadora

Para verificar un certificado, comprobamos la firma con la que está cifrado. Si confiamos en la entidad certificadora que lo firma, perfecto. Si por el contrario no confiamos (como es el caso de Bob, en quien no confiamos), podemos tomar ese certificado como no válido.

Las autoridades certificadoras proporcionan una firma propia en cada clave pública emitida (los certificados) que valida esas claves, además de probar que se ha provisto de la respectiva clave privada a la persona a la que se ha emitido el certificado.

Entre los datos que se pueden incluir en los certificados emitidos, además de la clave, se suele proporcionar una fecha de expiración o revocación, para prevenir la vigencia del certificado en el tiempo debido a la naturaleza cambiante de los datos que pueda incluir el mismo, como por ejemplo un teléfono. Sin embargo, puede darse el caso de que se necesite revocar de inmediato un certificado, ya sea por robo, una emisión por error, etc. Para esto la autoridad certificadora proporciona listas de revocación, que son consultadas como parte de la verificación de los certificados.

5. Referencias

  • Mark Stamp. Information Security: Principles and Practice. Capítulo 4.
  • El magnífico personal del departamento de automática de la UAH.
  • FNMT, Fábrica Nacional de Moneda y Timbre.
  • Public-key cryptography, Wikipedia

1 Comentario

  1. Esto es ¡sorprendente! No he leído algo como esto antes . Es agradable hallar a alguien con algunas ideas nuevas sobre este tema. Esta web es algo que se necesita en la red , alguien con un poco de dominio. Un trabajo útil para traer algo nuevo a Internet. Gracias de todos lo que te leemos.

Dejar respuesta

Please enter your comment!
Please enter your name here