Comandos y protocolos de firmado y encriptación
Qué software se utiliza
Actualmente se utiliza gpg para la encriptación y cifrado.
La clave maestra está en un USB blanco con capucha de 16 GB, inscrita en una pegatina.
El anillo de claves completo se encuentra en la máquina virtual cripto.
El acceso se detalla en Brocoli.Cripto
Dónde se guardan y cómo funciona
General
- Sobre la llave principal (clave raíz):
- La parte privada sólo está en el tails. A la hora de exportar a otros dispositivos no seguros, se capa.
- No caduca nunca.
- Debe estar bien guardada.
- Será sólo para firmar las subllaves en 4096 bits.
- El certificado de revocación se guarda junto a la parte privada de la llave.
- Se diferencia el tratamiento de las claves personales y técnicas.
- Se usa el algoritmo RSA.
- La parte publica de la llave principal y la subllaves completas son las que se reparten en los diferentes dispositivos.
- A modo de backup, el keyring completo se encuentra en una subcarpeta del USB seguro con el nombre “gpg_keyring”.
Claves red lechuga
- Son claves para la encriptación y firmado de todo tipo de archivos o datos.
- No se publican a ningún servidor de llaves.
- El keyring en cada máquina se guarda en /etc/gnupg, con acceso sólo para root.
- Se suple con un script
gpglechugacomo wrapper para que utilice el keyring de /etc/gnupg. - La contraseña de la clave privada se guardará en el archivo de claves. (Averiguar qué conviene)
Claves personales
- Las claves personales están asociadas a la dirección de correo eléctronico.
Uso de las claves
La contraseña de la clave personal está en la etiqueta del usb seguro que la contiene
si se ejecuta en un contenedor lxc, usar la opción --pinentry-mode loopback
Obtener el key fingerprintgpg --fingerprint hugo@hugo.cat
Actualizar claves públicas hacia el servidor de llaves (sólo llaves personales) Por defecto es keys.gnupg.netgpg --send-keys [key-id]
Firmar un archivogpg --recipient hugo@hugo.cat --clearsign [archivo]
Verificar una firmagpg --verify [archivo de firma (.sig|.asc)]
Importar una clave públicagpg --recv [KEY ID]
Encriptar un archivo, -a para salida asciigpg --recipient hugo@hugo.cat --encrypt -a [--sign] [archivo]
Desencriptargpg --decrypt [archivo]
Generación de una nueva clave raíz
gpg -‐gen-key
- Selección Opción 1, para firmar y encriptar
- Selección de longitud de clave de 2048 bits.
- Caducidad:
- Personales: 1 año
- Técnicos: Sin caducidad.
- Como nombre y apellidos:
- Para la red lechuga, Máquina y Red. Por ejemplo "Brocoli Lechuga"
- Para personal, nombre y apellidos.
- Como correo:
- Para la red lechuga,
adminlechuga@lechuga.eu. - Para personal, el correo electronico personal.
- Para la red lechuga,
- Como comentario:
- Para la red lechuga, el uso intencionado.
En el caso de creación de una nueva clave de red lechuga, hay que actualizar el fichero /etc/gnupg/last-id que contiene la clave actual a usar
Generación de una nueva subpareja a partir de la clave raíz.
Siguiendo los pasos de https://alexcabal.com/creating-the-perfect-gpg-keypair/
- La clave raíz únicamente debe usarse para generar subllaves.
- Para el uso regular sólo se utilizan subllaves. Así, si se comprometen, no hay que hacer una confianza desde cero.
- Sólo ha de haber una pareja activa en cada momento, siempre se revoca la anterior al hacer una nueva.
1.Generar la nueva pareja
- Entrar en el modo línea de comandos de GPG
gpg --edit-key hugo@hugo.cat
- Para generar una clave de firma y/o encriptación:
addkey(Una vez para la clave de firma y otra para la de encriptación)- Seleccionar RSA (cifrar o firmar)
- Seleccionar la intensidad de cifrado o firmado por defecto (4096)
- Seleccionar caducidad de un año si es personal, sin caducidad si es técnica.
save
2. Generar un archivo de revocación de la clave anterior (TODO)
Identificar y el número la clave a revocar (Hay que revocar las dos anteriores de firma y encriptado)
TODO: hacer un mkdir ~/.gnupg/revocaciones
ID=E382285 gpg --gen-revoke $ID > ~.gnupg/revocaciones/$ID.rev
3. Hacer un backup en el dispositivo Antipatia (usb)
Ir a Backup del anillo de llaves
3. Si es una subclave personal, publicar la clave completa en key Server
4. Preparar keyring capado para sacar del medio seguro
A continuación, para usar las nuevas claves en otros dispositivos, ejecutar los pasos de Exportación
Exportación del keyring para el uso fuera del dispositivo seguro
Hacer un script en el directorio de persistencia automatizando esto
Si se ejecuta en un contenedor lxc, usar la opción --pinentry-mode loopback
Después de generar una nueva pareja de claves, hay que exportar el keyring capado (sin la parte privada de la raíz) a fuera del entorno seguro.
Versión lxc cripto
Este script:
- Exporta las subkeys a un archivo armor,
- Exporta los trusts
- Los sube al directorio Antipatia de nuestra nuve.
gpg --pinentry-mode loopback --armor --output ~/sec_export.asc --export-secret-subkeys $KEY_RENOVAR
gpg --export-ownertrust > ~/trustdb.txt
mkdir ~/temp
gpg --pinentry-mode loopback --homedir ~/temp --import sec_export.asc
gpg --pinentry-mode loopback --homedir ~/temp --import-ownertrust trustdb.txt
shred -u ~/sec_export.asc
shred -u ~/trustdb.txt
gpg --pinentry-mode loopback --homedir ~/temp --edit-key hugo@hugo.cat
# usar el comando passwd y save para cambiar la clave actual a la externa
gpg --homedir ~/temp --pinentry-mode loopback --armor --output ~/sec_export.asc --export-secret-subkeys $KEY_RENOVAR
gpg --homedir ~/temp --export-ownertrust > ~/trustdb.txt
# Este punto sólo si la llave es hugo@hugo.cat
lftp -u hugo srv-internet.lechuga.eu -p 990 -e "set ssl:verify-certificate false; cd hugo/Antipatia/gpg; put sec_export.asc; put trustdb.txt; exit"
shred -u ~/sec_export.asc
shred -u ~/trustdb.txt
Importación del keyring capado en diferentes dispositivos
GPG no permite incorporar subkeys. Para ello hay que eliminar el key completo y reimportarlo (sin el secret de la master key)
En un host linux
KEY_RENOVAR=hugo@hugo.cat cd ~ lftp -u hugo srv-internet.lechuga.eu -p 990 -e "set ssl:verify-certificate false; cd hugo/Antipatia/gpg; get sec_export.asc; get trustdb.txt;exit" gpg --delete-secret-keys $KEY_RENOVAR gpg --import sec_export.asc gpg --import-ownertrust trustdb.txt shred --remove=wipesync sec_export.asc shred --remove=wipesync trustdb.txt
En windows
en línea de comandos ejecutar gpg --import [archivo secring.pgp] [archivo pubring.gpg]
Thunderbird utiliza Enigmail, que ya reconoce dónde está instalado el keyring.
En Android
Utilizar el programa OpenKeychain, importando el secring.gpg y el pubring.gpg.
Uso temporal de un directorio con keyrings
Se cambia el directorio de trabajo para que el command line de gnupg trabaje con otro keyring.
Usar la opcion de línea de comandos--homedir [Directorio del keyring alternativo]
Establecer un directorio temporalexport GNUPGHOME=[directorio donde está el keyring]
Reestablecer el directorio originalexport GNUPGHOME=~/.gnupg
Servidores de llaves
Llaves personales
https://pgp.mit.edu/
https://gnupg.pub/
Llaves técnicas
Se publican (la parte pública) en la dirección: https://srv-internet.lechuga.eu/nubes/publico/[KEY_ID]
Usar previamente el comando:KEY_ID=E5634823 && gpg --export --armor $KEY_ID > $KEY_ID.asc
Hacer un push de este archivo al directorio de publicación de claves:pushconfig $KEYID.asc
Gestión del keyring
Archivo de opcionesvim ~/.gnupg/gpg.conf
Listar las claves secretas guardadas en el keyringgpg --list-secret-keys
Listar la claves públicas del keyringgpg --list-keys
Listar la claves públicas del keyring y firmas de las mismasgpg --list-sigs
Generar un certificado de revocacióngpg --output revoke.asc --gen-revoke hugo@hugo.cat
Editar una clavegpg --edit-key hugo@hugo.cat
Exportar la clave raíz (parte privada)gpg --export-secret-keys --armor hugo@hugo.cat > private.gpg-key-hugo@hugo.cat
Exportar la clave raíz (parte pública)gpg --export --armor hugo@hugo.cat > public.gpg-key-hugo@hugo.cat
Importar la clave pública de alguiengpg --import [fichero con la clave pública]
gpg --keyserver keyserver.ubuntu.com --recv 2807AC92
Cambiar el trust de una clave
gpg --edit-key 'hugo@hugo.cat' trust (elegir el nivel de trust) save quit
Comandos de edición gpg
gpg tiene un modo de edicion en línea, con una serie de comandos.
Para hacer ediciones de la clave raíz, la parte privada ha de estar incorporada a la misma.
Una vez hemos entrado a editar la clave raíz con el parámetro edit-key, accedemos a la línea de comandos del gpg.
https://www.gnupg.org/gph/en/manual/r590.html
key - Toggle selection of subkey with index n. Use 0 to deselect all. trust - Change the owner trust value addkey - Añadir subclave delkey - Borrar subclave expire - Change a key expiration time save - Guardar cambios addui - Añadir información de contacto deluid - Eliminar información de contacto revkey - Revocar clave revsig - Revoke a signature sign-key - Sign a public key with a private key help - Listado de comandos
Backup revisar
Copia del anillo completo (tails)
- Montar el dispositivo USB de exportación en un directorio
DESTINO=/mnt/pendrivsudo bashmkdir $DESTINOmount /dev/sd?? $DESTINO - Del dispositivo USB borrar el contenido del directorio de cosa de seguridad
rm $DESTINO/gpg_keyring_backup/* -rf - Hacer una copia del anillo actual
cp $DESTINO/gpg_keyring/* $DESTINO/gpg_keyring_backup/* --recursiverm $DESTINO/gpg_keyring/* -rf - Copiar el anillo al usb
cp ~./.gnupg/* $DESTINO/gpg_keyring --recursivegpg --export-ownertrust > $DESTINO/gpg_keyring/trustdb.txt
Restitución del anillo completo
ORIGEN=/mnt/pendriv cp $ORIGEN/* ~/.gnupg/ --recursive gpg --import-ownertrust $ORIGEN/trustdb.txt
De una clave privada con paperkey
Exportación:
KEY_ID=E8459573 gpg --export-secret-key $KEY_ID > $KEY_ID.gpg paperkey --secret-key=$KEY_ID.gpg --output=$KEY_ID.gpg.paperkey
Importación:
paperkey --pubring ~/.gnupg/pubring.gpg --secrets 75295EE8.gpg.paperkey --output nuevo-secring.gpg gpg --import nuevo-secring.gpg
Significado de los flags en --list-keys
0x01 “C” Key Certification 0x02 “S” Sign Data 0x04 “E” Encrypt Communications 0x08 “E” Encrypt Storage 0x20 “A” Authentication
Encriptación y copia a tar
Encriptación de un directorio con clave pública
tar --create --bzip2 --exclude='Foto_Replica' /home/hugo/ | gpg --encrypt --recipient hugo@hugo.cat --output home_hugo.gpg
Desencriptación de un fichero gpg de un tar bzip
gpg --decrypt home_hugo.gpg | tar -xz