En un artículo anterior, presenté GnuPG mediante la verificación de un archivo firmado y el cifrado de un archivo para un destinatario mediante el uso de una clave pública. También he compartido cómo crear un par de claves y exportar una clave pública para que podamos recibir mensajes cifrados. En este artículo, demostraré cómo firmar archivos antes de compartirlos por correo electrónico o publicarlos en un sitio web.
Con GnuPG, existen múltiples métodos para firmar un archivo.
$ gpg --help | grep -i sign
Sign, check, encrypt or decrypt
-s, --sign make a signature
--clear-sign make a clear text signature
-b, --detach-sign make a detached signature
--verify verify a signature
A medida que se discuta cada opción, firmaré un archivo de texto simple.
$ cat sample.txt
Sample text for gpg signing
Hacer una firma
Con el --sign
opción, el archivo se cifra efectivamente con la clave privada. La clave pública es necesaria para ver el contenido del archivo. Esto obliga al destinatario a verificar el origen y elimina cualquier contenido de texto claro del tránsito. No es privado ya que cualquier persona con la clave pública puede descifrar el archivo.
$ gpg -s sample.txt
Esto da como resultado un archivo llamado sample.txt.gpg.
$ file sample*
sample.txt: ASCII text
sample.txt.gpg: data
Para verificar solo la firma, use --verify
opción. Para ver el contenido y mostrar la verificación de la firma, use --decrypt
opción.
$ gpg --decrypt sample.txt.gpg
Sample text for gpg signing
gpg: Signature made Sat 30 May 2020 09:16:24 AM EDT
gpg: using DSA key 15AC***********
...omitted...
Hacer una firma separada
La opción de firma separada está disponible para brindar a todos la opción de ver el mensaje sin tener la clave pública. Esto crea un archivo de firma separado que se usa para verificar el mensaje original si se desea. En su forma más simple, este archivo contiene un hash del mensaje original y está encriptado con la clave privada. Cualquiera que tenga la clave pública puede abrir la firma y luego comparar hashes para verificar la integridad del archivo firmado.
Cree el archivo de firma utilizando --detach-sign
opción.
$ gpg -b sample.txt
El resultado es un .sig separado. archivo de datos.
$ file sample*
sample.txt: ASCII text
sample.txt.gpg: data
sample.txt.sig: data
Si no desea compartir, publicar o enviar por correo electrónico un archivo de datos, puede firmar el archivo con --armor
y creará un archivo de texto ASCII con la firma. También utilizará el .asc extensión en lugar de .sig extensión:
$ cat sample.txt.asc
-----BEGIN PGP SIGNATURE-----
iF0EABECAB0WIQQVrPeUo9lk0dnOTCbvwxHCv6EJdAUCXtO/yAAKCRDvwxHCv6EJ
dC2BAJ49fIcOdBUdE0PELySEMlKNzVnZLgCdG1gsTim3gab2dgL6qagHArSlgq8=
=IvP/
-----END PGP SIGNATURE-----
El archivo de texto sin formato original y el archivo de firma independiente deben estar disponibles para el destinatario.
Para verificar la firma, especifique el archivo de firma y luego el archivo original.
$ gpg --verify sample.txt.sig sample.txt
Si se han utilizado los nombres predeterminados, puede omitir el nombre del archivo sin cifrar.
$ gpg --verify sample.txt.sig
gpg: assuming signed data in 'sample.txt'
gpg: Signature made Sat 30 May 2020 09:23:53 AM EDT
...omitted...
Hacer una firma de texto claro
El --clear-sign
La opción es una opción más nueva en términos de la larga historia de GPG y es muy común para los archivos publicados en sitios web como los archivos de descarga CHECKSUM de Fedora. Los contenidos son legibles por cualquier persona. La información de la firma también está disponible en el mismo archivo para aquellos que quieran verificar el origen e integridad de los contenidos.
El --clear-sign
la opción creará un nuevo archivo con .asc extensión.
$ gpg --clear-sign sample.txt
$ file sample*
sample.txt: ASCII text
sample.txt.asc: ASCII text
sample.txt.gpg: data
sample.txt.sig: data
Para verificar la firma, use --verify
opción:
$ gpg --verify sample.txt.asc
gpg: Signature made Sat 30 May 2020 09:27:56 AM EDT
...omitted...
gpg: WARNING: not a detached signature; file 'sample.txt' was NOT verified!
Tenga en cuenta que se muestra un mensaje durante el proceso de verificación advirtiendo que el archivo original asociado no está verificado. Puede cambiar el nombre de este archivo antes de publicarlo en su sitio web. La verificación seguirá comprobando el contenido del archivo.
Si bien este suele ser el método más conveniente para los consumidores de sus productos, hay una advertencia en la página del manual de GPG que indica que las firmas separadas son la mejor opción cuando se requiere una verificación completa.
Desde la página man de gpg:
Nota:Al verificar una firma de texto simple, GPG verifica solo lo que constituye los datos firmados de texto simple y no cualquier dato adicional fuera de la firma de texto simple o las líneas del encabezado que siguen directamente a la línea del marcador de guión. La opción --output se puede usar para escribir los datos reales firmados, pero también hay otras trampas con este formato. Se sugiere evitar firmas de texto claro en favor de firmas separadas.
Usar un par de llaves específico
Todos los ejemplos anteriores se firmaron con la primera clave privada disponible en mi conjunto de claves. Es posible que desee utilizar una clave diferente cuando estoy firmando un archivo para su publicación en un sitio web. Se crea un par de claves específicamente para el proyecto o producto. El par de claves puede incluso estar en un nuevo llavero compartido.
$ gpg --keyring /etc/gpgkeys --no-default-keyring --full-gen-key <other options>
Cuando un archivo está firmado o encriptado, asegúrese de especificar también el --keyring
opción.
Incluso si solo una persona está usando la clave para firmar archivos, haga un par de claves separado para usar para firmar. No utilice la misma clave para otras tareas diarias, como el cifrado de correo electrónico personal. Puede enumerar los nombres de claves privadas disponibles con gpg --list-secret
. La identificación, el nombre o el correo electrónico se pueden usar para identificar la llave.
Para firmar el archivo con una clave específica de un conjunto de claves, use el --local-user
opción de identidad.
$ gpg --local-user "My Project 2" --clear-sign sample.txt
Terminar
Si su archivo de texto simple es una lista de hashes de suma de verificación para las descargas de sus productos, ese archivo, cualquier archivo de firma y la clave pública utilizada para verificar las firmas se pueden publicar en un sitio web. Los consumidores pueden verificar las descargas antes de instalar cualquier software en sus sistemas.
[ ¿Quiere obtener más información sobre seguridad? Consulte la lista de verificación de cumplimiento y seguridad de TI. ]