Use GnuPG para verificar si el usuario ha firmado el archivo especificado

1

Para verificar si el archivo está firmado correctamente, usamos el comando:

gpg --verify <file_name>

y la salida muestra si el archivo está firmado correctamente. Y si es así, entonces se muestra el nombre del firmante. Pero, ¿existe la posibilidad de especificar en el argumento de la línea de comandos qué usuario espero haber firmado ese archivo?

Estoy invocando ese comando desde Java y ahora obtengo el código de salida 0 de GPG, sea cual sea el usuario que haya firmado ese archivo. Me gustaría especificar qué usuario espero para que GPG devuelva un código distinto de cero cuando el archivo haya sido firmado por otro usuario. Sé que puedo comparar la salida del comando GPG con mi nombre de usuario, pero me gustaría saber si puedo verificarlo en el nivel de comando GPG.

He buscado en documentación , pero no vi eso allí.

    
pregunta ctomek 12.01.2016 - 13:13
fuente

4 respuestas

3

Puede, quizás, usar un anillo de claves con solo esa clave específica en él, y especificar el anillo de claves en la línea de comandos (usando --no-default-keyring --keyring <file> )

Tenga en cuenta que a menos que haya firmado la clave utilizada para crear la firma, el nombre de usuario en la salida de GnuPG no es una buena cosa para verificar. Cualquiera puede generar una clave válida con un nombre de usuario determinado. Compruebe la huella digital de la llave en su lugar.

    
respondido por el Mark Koek 12.01.2016 - 13:33
fuente
1

GnuPG no permite restringir el conjunto de claves sin especificar otro archivo de claves. Use --no-default-keyring para deshabilitar el conjunto de claves predeterminado que contiene todas las claves, y luego especifique un conjunto de claves (¡que puede ser una sola clave exportada!) Con --keyring public-key.asc . Si es necesario, exporte la clave inmediatamente antes de verificar la firma:

gpg --export [user ID|key ID] >public-key.asc
gpg --no-default-keyring --keyring public-key.asc signature.asc

Tenga en cuenta que esto falsificará todos los cheques de confianza a través de firmas. No especifique las ID de usuario sino las huellas dactilares si no está completamente seguro de que las claves maliciosas puedan importarse (por ejemplo, algunos clientes de correo intentan automáticamente buscar claves faltantes para correos firmados). Utilice mejor las huellas digitales en lugar de las ID de usuario para hacer referencia a las claves fijas.

Si está seguro de haber hecho referencia a una clave de confianza fija y ha emitido una falta de confianza al verificar las firmas, use --trust-model always o use la versión reducida gpgv de GnuPG.

    
respondido por el Jens Erat 13.01.2016 - 17:28
fuente
0

Veo que estás haciendo esto desde Java. Es posible que desee echar un vistazo a la biblioteca de Bouncy Castle, que le permite trabajar con datos de OpenPGP en Java, en lugar de tener que llamar a gpg.

Consulte esta pregunta para comenzar: enlace

    
respondido por el Mark Koek 12.01.2016 - 21:42
fuente
-1

Podría escribir un script de shell para hacerlo fácilmente, por supuesto:

Usando el archivo CMD de DOS llamado vsig.cmd:

@echo off
gpg --verify  %1 > %temp%\result.txt 2>&1
grep "%2" %temp%\result.txt
if errorlevel 1 (
  echo File was NOT signed by %2
  exit /b 1
) else (
  echo File was signed by %2!
  exit /b 0
)

Esto proporcionará el siguiente resultado:

>vsig cd.txt.asc Rodrigo
gpg: Good signature from "Rodrigo M" <[email protected]>"
File was signed by Rodrigo!

>vsig cd.txt.asc fred
File was NOT signed by fred.

También tenga en cuenta que se proporcionan códigos de salida, por lo que podría llamarlo desde Java y actuar según los códigos de salida que necesite.

En este ejemplo, utilicé un nombre para el término de búsqueda, pero también puedes usar el ID de clave RSA como un término de búsqueda

    
respondido por el Rodrigo M 12.01.2016 - 17:09
fuente

Lea otras preguntas en las etiquetas