El envío de mensajes consiste basicamente de 4 pasos:
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.
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.
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).
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:
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.
Ejecutar "pgp -kg". Se nos pedirá una identificación (normalmente es nombre mas dirección de email), y un password. Generara un par de claves, asociadas a esa identificación y protegidas con el password.
Ejecutar "pgp fichero". Automaticamente se ejecutaran los siguientes pasos:
Ejecutar alguna de las tres opciones siguientes (se necesita el password utilizado durante la generación de las claves)
Si se requiere cifrado se nos preguntará el destinatario, y se requerirá tener ya su clave pública.
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:
Key is not completely verified.
Generally trusted verification from Y 'identificacion de Y...'
Generally trusted verification from Z 'identificacion de Y...'
Key is not completely verified.
Questionable verification from 'unknown signator, can't be checked'
Questionable verification from Z 'identificacion de Z...'
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".
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'.