usar para gpg como gnupg openpgp

gnupg - para - ¿Cómo verifico que una firma gpg coincida con un archivo de clave pública?



gpg para linux (2)

La única forma de usar un archivo de clave pública específico como un anillo de claves es si el archivo está en el formato de archivo GPG (OpenPGP) y no es una versión blindada ASCII (por ejemplo, pubkey.gpg no pubkey.asc).

Así que esto verificará el archivo:

gpg --no-default-keyring --keyring /path/to/pubkey.gpg --verify /path/to/file.txt.gpg

Y esto no va a

gpg --no-default-keyring --keyring /path/to/pubkey.asc --verify /path/to/file.txt.gpg

EDITAR: He profundizado un poco más en esto para una pregunta similar en el sitio del Superusuario:

https://superuser.com/questions/639853/gpg-verifying-signatures-without-creating-trust-chain/650359#650359

Sé cómo usar gpg verificar de esta manera:

$ gpg --verify somefile.sig gpg: Signature made Tue 23 Jul 2013 13:20:02 BST using RSA key ID E1B768A0 gpg: Good signature from "Richard W.M. Jones <[email protected]>" gpg: aka "Richard W.M. Jones <[email protected]>" gpg: WARNING: This key is not certified with a trusted signature! gpg: There is no indication that the signature belongs to the owner. Primary key fingerprint: F777 4FB1 AD07 4A7E 8C87 67EA 9173 8F73 E1B7 68A0

Pero lo que realmente quiero hacer es verificar el archivo contra un archivo de clave pública específico.

La motivación es como parte de un programa que descarga archivos grandes de un sitio web y necesita verificar que no hayan sido manipulados antes de usarlos. El sitio web contendrá los archivos y las firmas. El programa se enviará con la clave pública GPG. Cuando suba los archivos al sitio web, los firmaré con la clave privada correspondiente (no distribuida obviamente). Parece que el programa debería poder hacer algo como:

gpg --no-default-keyring --verify file.sig / --is-signed-with /usr/share/program/goodkey.asc

Pero gpg no tiene una opción como esta. Parece que la única forma de hacerlo sería analizar la salida impresa del comando gpg que parece muy insegura (contiene texto controlado por el atacante).

Edit: No sé cuál es la etiqueta por aquí para responder las propias preguntas, pero la respuesta que encontré fue usar la bandera --status-fd. Este indicador genera una salida muy analizable que puedo comprobar para la huella digital deseada:

gpg --status-fd <N> --verify file.sig

produce en fd N:

[GNUPG:] SIG_ID rpG8ATxU8yZr9SHL+VC/WQbV9ac 2013-07-23 1374582002 [GNUPG:] GOODSIG 91738F73E1B768A0 Richard W.M. Jones <[email protected]> [GNUPG:] VALIDSIG F7774FB1AD074A7E8C8767EA91738F73E1B768A0 2013-07-23 1374582002 0 4 0 1 2 00 F7774FB1AD074A7E8C8767EA91738F73E1B768A0 [GNUPG:] TRUST_UNDEFINED

Así es como, por ejemplo, funciona la biblioteca GnuPG de Perl.


Se me ocurrió el siguiente script:

#!/bin/bash set -e keyfile=$(mktemp --suffix=.gpg) function cleanup { rm "$keyfile" } trap cleanup EXIT gpg2 --yes -o "$keyfile" --dearmor "$1" gpg2 --status-fd 1 --no-default-keyring --keyring "$keyfile" --trust-model always --verify "$2" 2>/dev/null

usar como:

$ check-sig.sh <ascii-armored-keyfile> <signature-document>