Uso de PGP en la práctica

Enviando y recibiendo mensajes PGP.

El envío de mensajes consiste basicamente de 4 pasos:

  • Firma digital.

    Este primer paso es opcional. Partiendo de un texto normal lo primero que hace PGP es la creación de una "firma digital", la cual garantiza tanto la integridad del mensaje como la autenticidad de su origen, como se ha explicado.

  • Compresión.

    Este paso es automáticamente ejecutado por PGP a no ser que el usuario no desee hacerlo. Se obtiene una reducción notable del tamaño del mensaje, sobre todo si es texto. PGP usa ZIP para la compresión. Por defecto, sólo las partes cifradas son comprimidas.

  • Cifrado del mensaje.

    Este paso también es opcional. PGP utiliza el algoritmo IDEA para cifrar, combinado con RSA. Se genera una clave de sesión. Mediante el algoritmo IDEA y esta clave de sesión, se cifra el mensaje. La clave se cifra a su vez mediante el algoritmo RSA y la clave pública del receptor. El motivo de no usar RSA para todo el mensaje es que no sería eficiente, especialmente si tiene varios receptores (habría que incluir un mensaje cifrado completo por receptor, mientras que con el sistema elegido sólo hay que incluir un cifrado de la clave de sesión por receptor).

  • Codificación.

    Firma, compresión y cifrado no generan un fichero de texto sino binarios. Como la aplicación principal de PGP es el correo, que requiere caracteres ASCII, PGP puede codificar el documento resultante mediante el algoritmo BASE64 automáticamente.

    Para la recepción de mensajes PGP simplemente se invierten todos los pasos del proceso de envío:

    1. Paso de ASCII a binario, si el mensaje fue codificado.
    2. Si el mensaje está cifrado PGP recupera la clave de sesión, la cual fue cifrada usando RSA con la clave pública del receptor. Por lo tanto el receptor usará su clave privada para obtener la clave de sesión. Con la clave de sesión PGP descifra el mensaje usando el algoritmo de descifrado IDEA.
    3. Descompresión del mensaje, si estaba comprimido.
    4. Si el mensaje fue firmado PGP verifica la firma, la cual fue cifrada con la clave privada del emisor del mensaje por lo que PGP usara la clave pública de este usuario. Se extrae el "hash" del mensaje y PGP lo compara con el que ha calculado; si los dos encajan la firma es verificada.

    Ejemplo de uso de PGP en la práctica.

    PGP mantiene para cada usuario dos ficheros, pubring.pgp (con todas las claves públicas que este usuario conoce) y secring.pgp (con su clave privada). El procedimiento para la generación de las claves se ejecuta una vez por usuario.

    Los siguientes ejemplos asumen un entorno UNIX. Las versiones disponibles para Windows o Macintosh incluyen interfaces de usuario para realizar las mismas funciones.

    Si se requiere cifrado se nos preguntará el destinatario, y se requerirá tener ya su clave pública.

    Gestión de claves

    Dado que las claves públicas están (por definición) disponibles para todo el mundo, se necesita alguna forma de asegurar su autenticidad. Es por eso que las claves pueden ser firmadas, como los mensajes. Cuando PGP detecta una clave nueva, nos muestra todas las firmas que contiene, y nos pregunta si queremos firmarla con nuestra propia firma. Solo en el caso de que no exista NINGUNA duda acerca de la autenticidad de la clave debemos hacerlo.

    Para facilitar la comprobación de claves a través de otros canales (por ejemplo, por teléfono o en persona), es posible obtener la "huella digital" (fingerprint) de una clave. Esto consiste en 16 números determinados por la clave secreta, de manera que la probabilidad de que otra clave distinta tenga los mismos números es muy baja.

    Hay veces en las que, aunque nosotros mismos no podamos garantizar la autenticidad de una firma, las firmas que la avalan tienen prestigio suficiente como para que no dudemos. Cada vez que PGP detecta una firma nueva, nos pregunta también hasta que punto nos fiaríamos de la misma para que actuara de "sponsor" de otras firmas. Hay varios niveles de credibilidad: desconfianza, desconocimiento, confianza marginal y confianza absoluta. Es posible configurar PGP para definir que es lo que entendemos por una firma fiable: por ejemplo, puedo decidir que una firma será fiable si tiene al menos un "sponsor" de confianza absoluta o al menos 3 de confianza marginal.

    Supongamos ahora que nos llega una clave nueva de un tal señor X, y a su vez va avalada por la firma de los señores Y y Z. Si decidimos incluir esta nueva clave pueden pasar varias cosas:

    En este caso, PGP no tiene la clave pública de Y, y aunque tiene la de Z, el nivel de confianza asignado a la misma es "desconocido".

    Distribución de claves

    Se puede dar el caso de que recibamos un documento avalado por PGP pero no tengamos la clave pública necesaria para comprobarlo. Hay varios formas de conseguir una clave, y la mas sencilla es recurrir a un servidor de claves. Un servidor de claves esta basado en correo electrónico, y entiende comandos simples en la línea "Subject:":

    Esto es un ejemplo, la sintaxis puede variar en otros servidores; en cualquier caso un mensaje con 'help' en el subject informara de los comandos existentes.

    Hay que tener en cuenta que cualquiera puede mandar claves a un keyserver, así que este no garantiza de por si su autenticidad (para eso está el mecanismo de verificación que las propias claves incluyen). El keyserver actúa como base de datos, organizador y distribuidor, y al mismo tiempo intercambia claves con otros keyservers, de manera que la información de todos ellos sea coherente.

    Supongamos que una organización se dedica a firmar claves de usuarios, garantizando que estas son autenticas. Eso es lo que se conoce como una "autoridad de certificación" (CA), sus funciones van mas allá que las del simple servidor de claves, que no deja de ser un servicio pasivo. Las CA se organizan jerárquicamente, y aunque en principio pueden asumir cualquier sistema basado en la criptografía de clave pública, su mayor utilidad es para aquellos que al contrario que PGP no incluyen un mecanismo interno de certificación de claves. El establecimiento de CA normalmente no parte de iniciativas individuales, sino que se realiza de forma coordinada con otras CA ya existentes, integrándose en la jerarquía.

    Finalmente, otro medio utilizado por algunas personas es el grupo de News 'alt.pgp.keydist'.