Usa GnuPG per verificare se il file firmato dall'utente specificato

1

Per verificare se il file è stato firmato correttamente, utilizzare il comando:

gpg --verify <file_name>

e l'output mostra se il file è stato firmato correttamente. E se lo è, viene mostrato il nome del firmatario. Ma c'è la possibilità di specificare nell'argomento della riga di comando quale utente mi aspetto di firmare quel file?

Sto invocando quel comando da Java e ora ottengo il codice di uscita 0 da GPG qualunque utente abbia firmato quel file. Vorrei specificare quale utente mi aspetto che GPG restituisca un codice diverso da zero quando il file è stato firmato da un altro utente. So che posso confrontare l'output del comando GPG con il mio nome utente, ma vorrei sapere se posso verificarlo a livello di comando GPG.

Ho esaminato documentazione , ma non l'ho visto lì.

    
posta ctomek 12.01.2016 - 13:13
fonte

4 risposte

3

Potresti, forse, usare un portachiavi con solo quella chiave specifica e specificare il keyring sulla riga di comando (usando --no-default-keyring --keyring <file> )

Nota che se non hai firmato la chiave usata per creare la firma, il nome utente nell'output di GnuPG non è una buona cosa da controllare. Chiunque può generare una chiave valida con un determinato nome utente. Controlla invece l'impronta digitale della chiave.

    
risposta data 12.01.2016 - 13:33
fonte
1

GnuPG non consente di limitare il set di chiavi senza specificare un altro file chiave. Usa --no-default-keyring per disabilitare il portachiavi predefinito contenente tutte le chiavi e quindi specificare un portachiavi (che può essere una singola chiave esportata!) Con --keyring public-key.asc . Se necessario, esporta la chiave immediatamente prima di verificare la firma:

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

Tieni presente che ciò falsificherà tutti i controlli di fiducia attraverso le firme. Non specificare gli ID utente ma le impronte digitali se non sei completamente sicuro che le chiavi maliziose possano essere importate (ad esempio, alcuni client di posta tentano automaticamente di recuperare le chiavi mancanti per i messaggi firmati). Meglio usare le impronte digitali anziché gli ID utente per fare riferimento alle chiavi fisse.

Se sei sicuro di aver fatto riferimento a una chiave sicura fissa e hai emesso una mancanza di fiducia durante la verifica delle firme, usa --trust-model always o usa la versione ridotta di gpgv di GnuPG.

    
risposta data 13.01.2016 - 17:28
fonte
0

Vedo che lo stai facendo da Java. Potresti voler dare un'occhiata alla libreria di Bouncy Castle che ti permette di lavorare con i dati di OpenPGP in Java, invece di dover chiamare gpg.

Guarda questa domanda per iniziare: link

    
risposta data 12.01.2016 - 21:42
fonte
-1

Potresti scrivere uno script di shell per farlo facilmente, naturalmente:

Uso del file CMD DOS chiamato 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
)

Questo fornirà il seguente output:

>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.

Nota inoltre che i codici di uscita sono forniti, in modo che tu possa chiamarlo da Java e agire sui codici di uscita necessari.

In questo esempio ho usato un nome per il termine di ricerca, ma puoi anche usare l'ID della chiave RSA come termine di ricerca

    
risposta data 12.01.2016 - 17:09
fonte

Leggi altre domande sui tag