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 - Para ampliar conocimientos
Resumen Como continuación de la
exposición de ideas previas en criptografía, revisaremos en este
capítulo la forma digital. Se hará una breve introducción al concepto
que en PGP se denomina firma digital y en otros protocolos se conoce
como certificado digital. Se indicará cómo una firma -o certificado-
adosado a una clave de cifrado permite resolver problemas de
suplantación y autenticación de usuarios. Como todo en esta vida, es
cuestión de confianza.
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:
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.
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:
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 del que procede.
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 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):
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:
Real Decreto 1290/1999 de 23 de Julio (BOE 10
Agosto 1.999), por el que se desarrolla el artículo 81 de la Ley 66/1997
de 30 Diciembre (BOE 31 Diciembre 1.997), por el cual se faculta a
la FNMT para la prestación de los servicios técnicos necesarios para
garantizar la seguridad de las comunicaciones electrónicas, informáticas
y telemáticas entre los órganos de las administraciones del estado, y
de las personas físicas y jurídicas con aquéllas. Ley disponible en http://www.map.es/csi/pdf/fnmt.pdf
Real Decreto-Ley 14/1999 de 17 Septiembre (BOE 18 Septiembre 1.999) sobre firma electrónica. Trata sobre todo de las AC (llamados "prestadores de servicios de certificación") y está disponible en http://www.map.es/csi/pdf/electrnonica.pdf
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.