Curso sencillo de PGP
Capítulo 2: Firmas, certificados y
similares
![]()
2.1 - La
firma digital
2.2 - La
función resumen (hash)
2.3 - El
problema de la suplantación
2.4 - La
certificación de claves
2.5 - El
problema de la confianza
2.6 - Más
información
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 autentifica [authenticy]. Es decir, puede crearse
una firma digital.
¿Por qué firmamos documentos? Básicamente
para conseguir alguno, o varios, de estos resultados
Autentificación (o autenticación). La firma convence al que la ve que el firmante firmó el documento deliberadamente.
Inalterabilidad. La firma es prueba de que el documento no será alterado con posterioridad.
Autoría. La firma prueba que el firmante fue quien redactó el documento
Adhesión.La firma prueba que el firmante está de acuerdo con lo que contiene el documento.
No repudio. La firma es garante de que el firmante acepta lo que está escrito en el documento, y de que no se echará atrás en el futuro.
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.
Algunos
lectores pueden quedar confundidos 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? No obstante, podemos; aunque 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 lícito 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.
Personalicemos. 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 (para
empezar, el mensaje sería ilegible). 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 lo acabo de
describir tiene algunos problemas. En primer lugar, recordemos que la
criptografía de clave pública es muy poco eficiente. Firmar (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 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.
Para evitar estos problemas, se cifra no todo el
mensaje, sino solamente una parte de éste. ¿Pero qué parte? Cualquier parte
del mensaje que no hayamos firmado será una parte que no puede
verificarse y que por lo tanto puede alterarse impunemente. Imaginemos el
mensaje "Debo a mi estupendo profesor de criptografía, Arturo Quirantes, mil
pesetas" Si solamente 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ó se la denomina
función resumen, o función hash, y debe tener estas propiedades:
Comodidad: ha de ser fácil obtener h partiendo de H
Confidencialidad: para un resumen h dado, ha de ser difícil, si
no imposible, obtener el mensaje M tal que h=H(M)
No-colisión (débil): Para un mensaje M dado, ha de ser imposible
(o al menos muy difícil) encontrar otro mensaje M´ con el mismo resumen, es
decir, no ha de darse H(M)=H(M´)
No-colisión: Ha de ser difícil hallar al azar dos mensajes M, M tales que H(M)=H(M´)
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
basta 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. La correspondencia no es ordenada (esto es, no se da la
correspondencia 0=A, 1=B, 2=C ...), pero eso no importa. Véase como el número
del DNI, de diez 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 no se
diseñó 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 kp. El
resultado es Ckp(h)
A continuación envía el mensaje M y la firma
Ckp(h). Cuando Belén recibe el mensaje:
- Aplica a la firma Ckp(h) la
clave pública de Ana kp´. El resultado es Ckp´(Ckp(h))
- Aplica al mensaje
la función resumen, obteniendo H(M)=h
- Compara el resultado de los dos
pasos anteriores. Si coincide, 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´(Ckp(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.
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 Belén que la clave pública
de Ana es realmente la clave pública de Ana? 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, Bs y Bp (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 cifrfar 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 Belén tiene la clave pública auténtica de Ana, é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 Ana realmente pertenece a Ana. 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 él 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, Belén sabe que la clave de Ana
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 un notario falso? 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, 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 que (marca de agua, firma policial, códigos diversos) que permite
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 resulta 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, para que dé fe de ella.
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. ¿Acaso cuando leéis estas palabras
no estás confiando implícitamente en que yo sé de lo que hablo y en que os
estoy contando la verdad? Si no lo hacéis, estáis en vuestro derecho. Si lo
hacéis, también.
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" (aunque aquí ya habíamos oído
hablar del truco y no picamos; con todo, seguro que más de uno se tragó el
anzuelo). 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. Y ya
en los años treinta Orson Welles hizo creer a toda la costa noreste de Estados
Unidos en una invasión extraterrestre. Su "Guerra de los Mundos" resultó más
convincente de lo que su inventor había previsto.
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?, solamente puedo darle una respuesta
honesta: eso lo decide usted. Usted, y solamente usted, decide en quién
confiar. Los motivos son cosa suya. Esto parece no resolver mucho, pero ¿qué
quiere? ¿Que le resuelva yo los problemas? Ojalá pudiera. Como dije antes, no
existe nadie en quien poder confiar por axioma.
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 un compañero mío confía 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). En la actualidad, impulsadas por la
cornucopia del comercio electrónico, están surgiendo diversas AC. Mencionemos
a modo de ejemplo Verisign y Thawte fuera de nuestras fronteras, ACE e IPS 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,. 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).
El programa PGP (del
que hablaremos en el siguiente capítulo) 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, que tenga un cargo oficial ni nada por el estilo.
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
vuestro programa de cifrado favorito. La introducción acaba aquí. Comienza la
acción.
2.6 - Más información
Nuevamente recomiendo dos textos que ya mencioné en el capítulo
anterior:
+ Criptografía para
principiantes, por José de Jesús Ángel. Para los
que deseen una base de conocimientos con más matemáticas.
+ Criptología, por Manuel Pons Martorell. Para mi gusto, más
asequible y ameno.
Termina aquí el Capítulo 2 de este Curso sencillo de PGP. ¿Qué hacemos ahora?
![]()