En entornos Windows es muy similar el uso. Para la instalación existe un ejecutable (aquí)
1)Para cada usuario se crea su directorio propio de gpg:
/home/jon/.gnupg
Y aquí tendremos los archivos propios de gpg:
gpg.conf --> Plantilla con ciertos valores por defecto para GPG (por ejemplo, clave primaria a usar: default-key)
pubring.gpg --> Anillo de claves públicas (formato binario compatible con pgp)
secring.gpg --> Anillo de claves privadas
trustdb.gpg --> Base de datos de las confianzas depositadas por nosotros en las claves
Datos relacionados con cada par de claves:
Nombre (comentario) <correo electrónico>
Cada par de claves (pública/privada) del sistema GPG se identifica con
un número (sacado a partir de un Hash de los datos introducidos en
ella: identificador KeyID
Ejemplo:
pub 1024R/1E34AC41 2000-12-20
uid PuTTY Master Key (RSA) <
Esta dirección de correo electrónico está protegida contra los robots de spam, necesita tener Javascript activado para poder verla
>
El KeyID es 1E34AC41
2) Práctica:
a) Generación de un par de claves nuevo:
gpg --gen-key -> Se meten todos los datos necesarios
Aquí nos pide una clave de paso para cifrar (simétricamente) la escritura de la clave privada en el disco duro (nadie con acceso al disco duro puede violar nuestra clave privada...)
Lo primero recomendado es generar un certificado de revocación: Por si se nos compromete la clave privada
gpg --output revoke.asc --gen-revoke IDClave
El archivo revoke.asc lo deberíamos guardar seguramente, por si acaso.
gpg --default-key <keyID>: Usar una clave como por defecto
b) Listar claves en las bases de datos:
Privadas: gpg --list-secret-keys
Publicas: gpg --list-keys
Fingerprints: gpg --fingerprint <keyID> --> Esto son
"huellas resumen" que nos permiten identificar la integridad de las
claves
c) Edición de claves de las bases de datos: gpg --edit-key
Se entra en un prompt -> posibilidad de realizar ciertas acciones sobre las claves
Orden> help
Orden> trust (editar confianza en la clave)
Orden> list
Orden> sign y lsign (firma no exportable)
Orden> passwd
Orden> fpr
Orden> check
Luego se debe guardar
Orden> save
Dar validez transitiva a una clave: Esto es importante, ya que permite implementar en la propia clave las confianzas que se tienen sobre otras claves. Hemos de entender que firmar algo implica certificarlo, es decir, darle nuestra validez y veracidad...
Firmar una clave: gpg --sign-key <KEYid>
Por supuesto, para ello, el sistema debe confiar en la clave con la que se firma...
Una vez hecho esto y editada la confianza de la mencionada clave pasamos a confiar en dicha clave, y todo lo que venga firmado por ella, al verificarlo, el sistema GPG nos lo aprobará. Esta es la gran potencia de GPG.
d) A la hora de generar cualquier archivo (de claves, firma, texto
cifrado) existe un formato que es cuasi legible, y que codifica en
UUENCODE el contenido y lo introduce entre una cabecera y un pie que
identifica el archivo --> es una opción más que recomendable
Esto nos deja dos formatos gpg:
.asc -->ASCII
.gpg -->Formato binario
e) Exportación e importación de claves:
Pública para exportar: gpg --armor --export <KeyID> > archivo
Privada para copia seguridad: gpg --armor --export-secret-keys <KeyID> > archivo
Pública y/o privada importar: gpg --import <nomarch>
f) Para el cifrado y firma de mensajes: (certifica y sella en el tiempo un documento)
Firma de un archivo de texto:
gpg -s 1.txt
Esto nos saca un nuevo archivo...
1.txt --> 1.txt.gpg (firma junto al original en binario)
Validacion de la firma--> gpg -v 1.txt.gpg
Como salida saca el texto original sin la firma
Se puede escoger con qué clave firmar (-u)
Formato --armor --> gpg --armor -s 1.txt
1.txt --> 1.txt.asc (firma junto a original en ASCII)
Validacion --> gpg -v 1.txt.asc
Sin que exista el 1.txt lo saca
Solo cifrado: gpg -e 1.txt (con o sin --armor)->
Por supuesto, para esta operación nos pide el receptor del mensaje (cualquier id)
Para el descifrado, hay que dar el nombre del archivo de salida
Si se omite el archivo de entrada coge la entrada estándar (stdin)
gpg -d 1.txt.asc (o gpg) > 1.txt
En el caso de que queramos que haya mas de un receptor: Queda más
gordo, en la cabecera queda la info de para quién es cada cacho
Firma y cifra: gpg --armor -es 1.txt
Con -v o -d descifra y valida...
Se puede escoger con qué clave descifrar (-u)
Hay otros tipos de firmas, según cómo se añadan al original...
Clearsigned signatures:
gpg --clearsign doc
El mensaje en claro primero, seguido luego de la firma, todo junto
Detached signatures:
El tener el documento y la firma en el mismo documento puede tener poco uso. En este caso se genera un archivo para cada uno.
gpg --output doc.sig --detach-sig doc Por supuesto, se necesitan los dos archivos para realizar la verificación de la firma
gpg --verify doc.sig doc
g) GPG te permite el cifrado de datos con clave una simetrica (se cifrará con una clave de paso. Por defecto usará el algoritmo CAST5):
gpg --output doc.gpg --symmetric doc
Descifrar: gpg -d doc.gpg > doc
h) Algo que debemos denotar es la diferencia entre la validez de una clave (comprobación de las firmas que la acompañan) y la confianza que se les da a las mismas (editar el trust, esto queda en un archivo separado (trustdb.gpg), es local al sistema del usuario)
gpg --list-sigs --> Nos lista las firmas añadidas que lleva una clave
Hasta que no se firma (nos da la validez de una clave) y se edita la confianza el sistema no la considera como clave confiada...
Una clave se considera válida para el sistema si cumple algunas condiciones relacionadas con las firmas que se le añaden y la confianza editada: por ejemplo, si está firmada por suficientes claves válidas, tu firma personal es suficiente (aunque hay todo un algoritmo que habla número de firmas de claves confiadas marginalmente, etc...)
3) Todo lo hemos utilizado directamente bajo la consola del sistema y tecleando los comandos "a pelon"...
Por supuesto existen frontends de usuario, que realizarán todas estas tareas "escondidas" del usuario...
Un ejemplo muy claro (ya que GPG es un sistema criptográfico que se adapta muy bien al correo electrónico) es el plugin para Mozilla Thunderbird --> OpenPGP (Extension Enigmail)