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: