¿Es posible pedirle a gpg (o gpg4win) que verifique si un archivo fue firmado por un archivo de clave pública en particular, sin tener que importar, firmar y confiar en esa clave?
es decir, algo como
gpg --using-key pubkey.txt --verify message.txt
en lugar de tener que crear su propia clave privada y luego hacer
gpg --import pubkey.txt
gpg --lsign-key [name within pubkey.txt]
# ... something to do with choosing trust levels
gpg --verify message.txt
gpg --status-fd 1 --verify (thefile)
da en su salida como primera cadena la huella digital de la clave que hizo la firma.Respuestas:
Debe tener la clave pública para verificar una firma realizada con la clave privada correspondiente, pero no tiene que firmar o incluso firmar localmente la clave. En este caso, recibirá una advertencia de GPG de que la clave no es de confianza.
Aquí hay una prueba que hice con un archivo firmado por mi propia clave, pero en un sistema donde la clave no se había importado:
Desafortunadamente, la sugerencia de Harry no funciona, extrae un poco más de información, pero no lo suficiente como para ser útil.
Como puede ver, la mayoría de la información obtenida es la ID de clave de la subclave utilizada para hacer la firma y la hora en que se hizo la firma. Esto coincide con los datos disponibles para pgpdump (o --list-packets):
Como puede ver, proporciona el algoritmo hash, los detalles del tipo de clave (mi clave de firma es una subclave RSA de 3072 bits y la ID de clave de la subclave, pero no hay nada que identifique la clave maestra. Esa información es solo se revela cuando tiene la clave pública y verifica la firma.
Luego importé mi clave pública en ese sistema e intenté nuevamente:
Ahora puede identificar la clave y relacionarla con la clave principal. Sin embargo, es posible reducir la naturaleza de esas advertencias como esta:
Todavía hay una advertencia de que es una clave no confiable, pero no de manera masiva y eliminar la verbosidad solo lo reduce a esto:
La clave pública es necesaria para la etapa de verificación porque se usa para unir los datos generados por el firmante con su clave privada. Puede considerarse, en términos simples, como el complemento del cifrado donde se necesita la clave privada para descifrar los datos cifrados en la clave pública.
Nota: He modificado un poco los UID en este ejemplo, pero todos los que obtengan esa clave verán lo que realmente son. De lo contrario, el resultado es copiar y pegar directamente.
EDITAR: puede llamar al archivo de clave pública directamente como un llavero si lo tiene en el formato blindado no ASCII (es decir, un archivo .gpg en lugar de un archivo .asc). Aun así, todavía necesita la clave pública. Para hacer esto, el comando es así:
fuente
Si está de acuerdo con el envío de un llavero, en lugar de un archivo de clave pública, probablemente desee usar en
gpgv
lugar degpg
:fuente
Si su palabra "verificar" en la pregunta significa "verificar absolutamente", entonces, por supuesto, se debe importar una clave pública para verificar completamente un documento firmado. Sin embargo, si esto significa "identificar", entonces describo a continuación una heurística que puede decir si un grupo de documentos fueron firmados por la misma firma.
Según las pruebas realizadas por @Ben para verificar mi comentario, existe la posibilidad de que el siguiente comando se pueda utilizar para indicar heurísticamente la clave de firma:
La prueba de Ben dio el resultado a continuación. Son notables los valores de ERRSIG y NO_PUBKEY, y también el valor de "ID de clave RSA" que está parcialmente contenido en ambos, de la siguiente manera:
Nota arriba de la cadena
7FF2D37135C7553C
. Esta misma cadena se encuentra dentro de la huella digital de la clave que se informa una vez que se importa la clave:Esta cadena se encuentra como la parte inferior de la huella digital (subclave arriba), por lo que posiblemente podría usarse para identificar la clave. La "huella digital de la clave principal" probablemente también debería verificarse, además de la subclave.
La cadena "ID de clave RSA" es idéntica en ambas salidas y también se encuentra como la última parte de la huella digital, por lo que es posible que sea suficiente por sí sola para identificar la firma. Si ese es el caso, usar solo la salida de
gpg --verify
podría ser suficiente para identificar la firma de una manera más simple.Mi conocimiento de GPG no es suficiente para validar completamente este método, por lo que debería probarlo en más archivos de ejemplo. Si funciona, puede ordenar los archivos de acuerdo con sus firmas, pero deberá importar la clave para encontrar la identidad del firmante.
Para establecer claramente de nuevo: Este método no puede identificar completamente una firma. Es solo una forma de ordenar heurísticamente los documentos firmados.
fuente