Curso sencillo de PGP
Capítulo 2: Firmas y certificados


por Arturo Quirantes Sierra



2.1 - La firma digital

Cuando se desarrolló la criptografía de clave pública, tardó poco en hacerse evidente que sus posibles aplicaciones iban más allá del cifrado de mensajes o de datos. No solamente se puede cifrar la información, sino que también se puede autentificar. Es decir, puede crearse una firma digital.

¿Por qué firmamos documentos en el mundo real? Básicamente para conseguir alguno, o varios, de estos resultados:

Sea larga o corta, sencilla o con rúbrica, y cualquiera que sea el motivo que da lugar a su generación, una firma tiene una característica inalterable: es producida por un solo firmante, es decir, es algo inherente a la persona que la produce. De modo similar, para producir una firma digital necesitamos algo relacionado con el firmante y solamente con él. Recordemos que la clave pública es conocida por todos pero la clave privada es conocida solamente por su dueño. Así que para producir una firma digital, usaremos la clave privada. Firmar digitalmente un documento no es sino cifrar dicho documento (o una parte de él) con la clave privada.

Puede que el lector haya quedado confundido al leer la última palabra del párrafo anterior. ¿No quedamos que se cifraba con una clave pública? ¿Cómo se puede cifrar con una clave privada? Quizá hubiese sido mejor decir "aplicar la clave privada" en lugar de "cifrar con la clave privada." Recordemos que las claves pública y privada forman un par y son complementarias. Pero no hay nada esencialmente distinto entre ambas. Si usamos una para cifrar y la otra para descifrar, es solamente por convenio; igual podríamos cifrar con la otra y descifrar con la una. Lo que una clave hace, la otra lo deshace.

De manera que es factible aplicar el algoritmo de cifrado usando la clave privada, en lugar de usar la clave pública como hacíamos en el proceso de cifrado. Eso permite al destinatario verificar la firma, es decir, comprobar que es realmente la del remitente. Esto es posible porque dicho destinatario tendrá la clave pública del remitente. Supongamos que Ana es la remitente/firmante y Belén la destinataria/verificante. Durante la firma Ana usa su clave privada para firmar el mensaje. Cuando llega a Belén, ésta aplica la clave pública de Ana al documento. Si el mensaje proviene realmente de Ana, la operación realizada por Belén le devuelve el documento original. Pero si la clave pública con la que se ha verificado el mensaje no es complementaria a la clave privada que se ha usado para firmarlo, resultará tan evidente como una patada en el ojo. Resumiendo: si la información puede ser descifrada con la clave pública de Ana, es porque la ha firmado Ana y nadie más.

Fantástico, ¿no? En teoría sí. En la práctica, hay que modificar algo este esquema.



2.2 - La función resumen (hash)

El sistema de firma digital tal y como se acaba de describir tiene algunos problemas. En primer lugar, recordemos que la criptografía de clave pública es muy poco eficiente. Firmar (es decir, aplicar un algoritmo de clave asimétrica, usando la clave privada) produce un documento de mucho mayor tamaño que el original. También puede ser el origen de ciertos ataques criptoanalíticos: si un atacante consiguiese que Ana firmase un mensaje cuidadosamente compuesto, podría obtener mucha información sobre la clave privada de Ana. Y no podríamos combinar la firma digital con el cifrado. Si ciframos y firmamos un documento -en ese orden o en el inverso- estaríamos aplicando la clave privada y la clave pública, con lo que ambas acciones se anularían: acabaríamos con el mensaje original. Así que habría que escoger: o cifrar, o firmar.

Para evitar estos problemas, no se cifra todo el mensaje, sino solamente una parte de éste. ¿Pero qué parte? Cualquier parte del mensaje que no hayamos firmado puede alterarse impunemente, sin que tal alteración sea detectada. Imaginemos el mensaje "Debo a mi estupendo profesor de criptografía, Arturo Quirantes, mil euros" Si firmásemos digitalmente las palabras con número par de letras, solamente tendríamos la seguridad de que esas palabras han sido escrito por el firmante, y de que esas palabras no han sido alteradas. Un fisgón gracioso podría cambiar el texto, de manera que podría parecer que el profesor no soy yo sino Arturo Fernández, que el firmante me debe mil bofetadas ...o peor aún, que soy un profesor horroroso en lugar de estupendo ;-)

Debemos por tanto encontrar la manera de firmar un texto que sea más pequeño que el mensaje, pero que represente a éste en su totalidad. La manera de lograrlo es transformar dicho mensaje en un texto más pequeño. Matemáticamente, lo podemos representar por una función H que tome un mensaje M y produzca un condensado de éste H(M)=h. A esta función se la denomina función resumen, o función hash, y debe tener estas propiedades:

La propiedad primera es evidente. La segunda evita que se pueda obtener información sobre el mensaje (el cual también puede ir cifrado). Las propiedades tercera y cuarta nos aseguran que la función resumen será única, ya que si dos mensajes tuviesen el mismo resumen h, una firma valdría para ambos. Es decir, si H(M)=H(M´) significa que la firma digital sobre ambos mensajes es exactamente la misma, de manera que bastaría con firmar un documento y "copiar+pegar" para tener el otro documento firmado. La ausencia de colisiones nos asegura que la firma digital solamente sirve para un documento concreto. Nadie, ni siquiera el firmante, podría trasladar la firma digital de un documento a otro sin que se note.

Hasta cierto punto recuerda a los códigos CRC que aseguran la integridad de un archivo, o a la letra del DNI. ¿Alguien sabe cómo se obtiene dicha letra? El procedimiento es sencillo. Basta con coger el número del DNI y dividirlo por el número 23. El número que sale del resto se hace corresponder con una letra, por medio de la siguiente correspondencia (haga la prueba con su propio número):

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
T R W A G M Y F P D  X  B  N  J  Z  S  Q  V  H  L  C  K  E


Véase como el número del DNI, de ocho cifras, es representado por una función resumen de solo una letra. No resulta muy confidencial, ya que aunque la letra no permite conocer el número, sí da cierta información sobre él. Y por supuesto es muy vulnerable a las colisiones. Con sólo veintipico letras, lo raro es que nuestra letra del DNI no coincidiese con la de ningún otro. Claro que la letra del DNI se diseñó como letra de control, no como función resumen. Para evitar que haya colisiones, una de las cosas que debemos asegurarnos es que la función resumen tenga muchos valores posibles.

Vamos a lo práctico. Para firmar digitalmente un mensaje, Ana hace lo siguiente:

- Toma el mensaje M y le aplica la función resumen, obteniendo H(M)=h
- Aplica al resumen su clave privada ks. El resultado es la firma digital: Cks(h)

A continuación envía el mensaje M y la firma Cks(h). Cuando Belén recibe el mensaje:

- Aplica la clave pública de Ana kp a la firma Cks(h) . El resultado es Ckp(Cks(h))=h
- Aplica al mensaje la función resumen, obteniendo H(M)=h'
- Compara el resultado de los dos pasos anteriores. Si coinciden (h=h´), la firma es correcta.

La verificación de la firma depende tanto de que haya sido realizada con la clave correcta como de que el mensaje no se haya alterado. Si las claves pública y privada son complementarias, lo que hace la una lo deshace la otra, de manera que se cumplirá que Ckp(Cks(h))=h. Por otro lado, una alteración siquiera mínima del mensaje hará que h´ (el resumen del mensaje alterado) sea distinto al resumen del mensaje original, y por tanto, h<>h´ significa M<>M´. De ese modo comprobamos de una sola tacada a) que el mensaje fue firmado efectivamente por Ana, b) que dicho mensaje no ha sido alterado con posterioridad.

Si deseamos efectuar ambas operaciones (cifrar y firmar), podemos hacerlo sin problemas. El orden seguido por muchos programas y protocolos (S/MIME, PKCS#7, PEM, PGP) es primero firmar, luego cifrar. Es decir, Ana primero creará su firma Cks(h), y posteriormente cifrará el paquete M´ = {M, Cks(h)}.

Las funciones resumen para criptografía habitualmente dan resúmenes h de entre 128 y 160 bits. Las más utilizadas son las denominadas MD4, MD5, RIPEMD-160 y SHA-1.



2.3 - El problema de la suplantación

En el capítulo anterior (1.4) se mencionaron dos problemas asociados a la criptografía de clave pública (CCP). Quedaba uno de ellos pendiente, a saber, el que denominaré problema de la suplantación. Recordemos que Ana necesita la clave pública de Belén para enviarle un mensaje cifrado. El problema que se plantea es: ¿cómo sabe Ana que la clave pública de Belén es realmente la clave pública de Belén? La belleza de la CCP consiste en que cualquiera puede obtener la clave pública de alguien, sin necesidad de pedirla a su propietario. Es como obtener el número de teléfono de alguien en la guía. ¿Qué pasa si alguien ha insertado un número de teléfono falso?

Los esquemas de CCP pueden volverse contra sus usuarios mediante el ataque del fisgón interpuesto [meet-in-the-middle]. Supongamos que Ana y Belén crean cada una su par de claves: (As, Ap) para Ana, (Bs, Bp) para Belén, (s indica clave privada; p, clave pública). Idealmente, Ana consigue la clave pública de Belén, Bp, en un servidor de claves (el análogo digital de la guía telefónica), y la usa para cifrar un mensaje; dicho mensaje será posteriormente descifrado por Belén con su clave privada Bs.
Pero nuestro fisgón Fausto entra en escena. Sin que las dos interlocutoras lo sepan, Fausto crea dos pares falsos de claves: Afs, Afp, Bfs y Bfp, y consigue sustituir las claves públicas verdaderas (Ap, Bp) por las que acaba de crear (Afp, Bfp). Cuando Ana o Belén vayan a cifrar un mensaje, lo hacen con las claves falsas, sin ser conscientes de ello. El proceso sería el siguiente:

- Ana cifra el mensaje con la clave pública falsa de Belén, Afp(M), y lo envía
- Fausto intercepta el mensaje y lo descifra con la clave privada falsa de Belén, Afs(Afp(M)) = M
- Fausto cifra el mensaje con la clave pública verdadera de Belén, Ap(M), y lo re-envía.
- Belén descifra el mensaje con su clave privada, As(Ap(M)) = M y recupera el mensaje.

Mediante esta suplantación, Ana cree estar protegiendo el mensaje con la clave pública de Belén, Belén cree haber recibido el mensaje directamente de Ana ... y Fausto está en medio, leyendo todos los mensajes e incluso componiendo mensajes falsos. El proceso de firma digital no sale mejor parado:

- Ana firma el mensaje con su clave privada, As(M), y lo envía.
- Fausto intercepta el mensaje, le retira la firma de Ana, firma el mensaje con la clave privada falsa de Ana, Afs(M), y lo re-envía.
- Belén recibe el mensaje, aplica la clave pública falsa de Ana a la firma y verifica correctamente el mensaje.

El talón de Aquiles, como puede verse, es que no hemos establecido una ligazón inequívoca entre la clave y el presunto propietario. Para asegurarnos de que Ana tiene la clave pública auténtica de Belén, ésta tendría que entregársela personalmente, o cuando menos enviársela mediante un canal seguro (no interceptable) de comunicación. Pero ese era el mismo problema que tenía la criptografía con clave simétrica. Incluso si se hace el esfuerzo de conseguir ese canal seguro o esa entrega en mano, no siempre sería factible, especialmente en estos tiempos de comunicaciones globales.



2.4 - La certificación de claves

El problema de la suplantación de claves delineado anteriormente se puede resolver si alguien de confianza nos asegura que la clave pública de Belén realmente pertenece a Belén. En el caso de la guía telefónica, nos creemos que el teléfono que aparece junto al nombre del abonado realmente pertenece a ese abonado. ¿En qué se basa esa creencia? Simplemente, en que confiamos que la empresa editora de la guía no nos engaña. Un nivel de confianza aún más alto podría venir de una certificación ante notario, ya que suponemos que el notario es una persona de confianza y que lo que él afirma es cierto.

En el mundo digital nos aprovechamos del hecho de que se puede firmar cualquier archivo o documento digital, incluida una clave pública. A fin de cuentas una clave pública ha de ser guardada en el ordenador en la forma de un archivo. ¿Por qué no se va a poder firmar ese archivo? La criptografía de clave pública contribuye así a reparar su propia debilidad.

El proceso para que Ana tenga la seguridad de poseer la clave pública auténtica de Belén sería el siguiente:

- Ana obtiene la clave pública del notario Np
- Ana recibe la clave pública de Belén Bp, firmada por el notario.
- Ana verifica (mediante el procedimiento indicado en el apartado 2.2) la firma digital del notario.
- Si la verificación es correcta, Ana sabe que la clave de Belén es auténtica. En ese caso se dice que la clave es válida. Esta validez proviene de la confianza depositada en el notario.

Este último paso se justifica considerando que el notario no firmará ninguna clave si no ha verificado antes que realmente pertenece a su dueño. Es como en el mundo de papel. Yo puedo firmar un contrato de hipoteca con el banco directamente. La intervención de un notario, sin embargo, le da mayor confianza a la transacción, ya que la firma del notario certifica muchas cosas: que los firmantes son efectivamente quienes afirman ser, que están legalmente capacitados para realizar la transacción, que han firmado el contrato libre y voluntariamente, que entienden lo que éste significa, etc.

El primer punto sigue siendo algo más escabroso. Necesitamos la clave pública del notario para verificar todo lo que éste firma, pero ¿cómo estar seguros de que no se trata de una clave falsa? A fin de cuentas, ¿cómo se que el notario frente al que me encuentro es realmente quien dice ser y no un falso notario? La paranoia no tiene límites, y como vemos la seguridad absoluta no existe.

En la práctica, suponemos que hay una forma razonablemente segura de obtener la clave pública verdadera del notario. Tal vez nos la ha entregado él personalmente, o quizá la hemos descargado de una página web segura. Pero tenemos una ventaja crucial: somos nosotros quienes decidimos cuánta confianza otorgar al notario. De hecho, podemos sustituir la palabra "notario" por "persona de confianza"

Una firma digital que atestigua la autenticidad de una clave pública se denomina genéricamente certificado digital. Habitualmente, un certificado digital consta de tres elementos: la clave pública que está siendo certificada, la información sobre el usuario y la firma digital (o firmas digitales) del notario o persona de confianza. Eso es lo que estamos acostumbrados a hacer. Saque el lector su DNI o pasaporte. ¿Qué contiene? Básicamente, información sobre el titular junto con ciertos elementos (marca de agua, firma policial, códigos diversos) que permiten verificar la autenticidad del documento. El mundo digital sigue las mismas pautas. Aunque con ciertas peculiaridades, como veremos a continuación



2.5 - El problema de la confianza

Imaginemos que tuviésemos que acudir a un notario cada vez que llamamos por teléfono. No resultaría muy práctico ¿verdad? Lo que hacemos es confiar en diversas personas o entidades: confiamos en que la guía telefónica es correcta, confiamos en que nos han dado bien el número cuando se lo pedimos a otra persona... en suma, decidimos en quién vamos a confiar para que nos cuente la verdad.

Un inconveniente de los esquemas de clave pública es que no existe una entidad o persona en quien todos confiemos ciegamente y sin restricciones. ¿Pero existe esa persona o entidad en el mundo real? No. Lo que hacemos es guiarnos por las informaciones y referencias de otras personas (que pueden a su vez ser de confianza o no) para decidir a quién creemos. Como resultado de ello, otorgamos nuestra confianza a unos y se la negamos a otros. Cuando usted estas palabras, está confiando implícitamente en que yo sé de lo que hablo y en que le estoy contando la verdad.

Hace algunos años una cadena de televisión italiana emitió un programa patrocinado por el "Cacao Maravigliao". Mucha gente, al ver dicho programa, confió en las propiedades -cualesquiera que fuesen- de dicho cacao, basándose quizá en los comentarios del presentador del programa, y a la mañana siguiente las amas de casa italianas asaltaron los comercios en busca de dicho cacao ... sin encontrarlo. Dicho "Cacao Maravigliao" simplemente no existía, era una inocente broma del presentador. Tiempo después, Emilio Aragón reprodujo dicho truco en su programa "Vip Noche". La película "Pijama para dos" trata de un tema similar: el protagonista (Rock Hudson) anuncia un inexistente producto, casualmente llamado Vip, mientras la inefable Doris Day intenta pisarle el negocio.

Si algo se puede sacar como moraleja, es que la confianza absoluta no existe, y que siempre hemos de andar por ahí con mirada crítica en lugar de tragarnos el primer anzuelo que se nos ponga por delante. Pero seamos realistas. No podemos construir un mundo en el que nadie se fíe de nadie. El agente Mulder tendría sus motivos para no confiar en nadie, pero eso nos pone a un mundo en contra y no nos lleva a ninguna parte. Y hasta Mulder confiaba de vez en cuando en alguien.

Así pues, si usted me pregunta ¿pero de quién puedo fiarme en este asunto de las claves públicas?, no puedo darle una respuesta satisfactoria. Nadie puede. Cada uno decide en quién confía, hasta que punto y con qué condiciones. Probablemente lo que ha leído vd. de este curso le permita confiar en mí como profesor, pero no como yerno o albacea testamentario.

Pero ese aparente inconveniente también conlleva un punto de fortaleza al sistema de criptografía mediante clave pública, ya que le permite elegir su agente de confianza. No hay nadie a quien estemos obligados a creer. No hay notarios impuestos por un tercero. Nosotros mismos construimos nuestra "red de confianza." De igual modo que una persona pueda confiar en todo lo que dice el periódico "El Mundo" mientras que a otro le dan sarpullidos con sólo tocarlo, cada uno de nosotros decidimos a quién otorgar nuestra confianza.

Los notarios digitales pueden ser cualesquiera, sean personas o entidades. Las entidades que se han creado para certificar claves públicas se denominan autoridades de certificación (AC, o CA por sus siglas en inglés). En la actualidad, impulsadas por la cornucopia del comercio electrónico, están surgiendo diversas AC. Mencionemos a modo de ejemplo Verisign (http://www.verisign.com) y Thawte (http://www.thawte.com) fuera de nuestras fronteras, ACE (http://www.ace.es) e IPS (http://www.ips.es) en España. Estas son una especie de "agencias notariales electrónicas" que certifican claves bajo pago. También existen AC sin ánimo de lucro, básicamente con fines de investigación o académicos, como la AC experimental de RedIris http://ca-tic.iec.csic.es . Estas AC están pensadas para certificar claves públicas en una conexión segura mediante navegador. Sus claves públicas (necesarias para que nuestro navegador pueda verificar los certificados emitidos por estas AC) se pueden descargar de la red, para lo cual hay que ir a la página web de dicha AC; algunas de estas claves públicas ya se encuentran en su navegador, ya que fueron entregadas por la AC directamente al fabricante. Los usuarios de Netscape Navigator, por ejemplo, pueden ver dichas claves en Seguridad/Certificados/Firmantes. Y ya que están, puden ver los algoritmos de cifrado simétrico que dicho navegador utiliza (Seguridad/ Navigator/ Configurar SSL v3).

En España la firma electrónica se ha usado a nivel oficial para, por ejemplo, rellenar la declaración de la Renta por Internet. Esto se hizo por primera vez en 1.999 dentro del marco del proyecto CERES de la Fábrica Nacional de Moneda y Timbre (FNMT), que fue la entidad que actuó como AC (http://www.cert.fnmt.es). Durante dicho año se aprobaron dos leyes sobre firma electrónica. Para los abogados y demás amantes de las leyes, son:

El programa PGP es todavía más versátil, ya que cualquier persona puede hacer de notario digital. Ni siquiera es necesario que sea un notario real o que tenga un cargo oficial. Supongamos que Ana confía en Carlos. Puede que Ana no tenga acceso directo a la clave pública de Belén. Pero si Ana ve una clave presuntamente de Belén con la firma (equivalente al certificado digital) de Carlos, Ana aceptará dicha clave como propia, ya que confía en que Carlos es una persona que no va por ahí firmando claves alegremente, sino de forma responsable y comprobando qué es lo que firma.

La misma Ana puede convertirse en una otorgadora de confianza. Si recibe la clave de Belén y ha verificado que es auténtica, Ana puede firmar la clave de Belén. De ese modo, cualquiera que obtenga la clave de Belén y confíe en Ana aceptará dicha clave como válida. La confianza que inspira Belén en otros hace que esos otros aceptan las claves firmadas por Belén como válidas. De ese modo, cada persona va acumulando un conjunto de claves públicas, las cuales llevan adosadas diversas firmas que le otorgan una confianza mayor o menor. Es lo que se denomina "red de confianza" [web of trust].

PGP permite adaptarse igual de bien a una estructura jerárquica basada en ACs que a una red de confianza descentralizada, aunque fue creado pensado en esta última posibilidad. En palabras de su autor, "PGP es para aquellas personas que prefieren plegar su propio paracaidas." Permite una mayor flexibilidad y capacidad de elección. Y, puesto que este es un curso sencillo sobre PGP, es ya hora de pasar a ver el que espero se convierta en su programa de cifrado favorito. La introducción acaba aquí. Comienza la acción.



2.6 - Para ampliar conocimientos

© Arturo Quirantes Sierra 2001