Crea file firmato dal file di contenuto e la sua firma separata?

3

Ho un file di testo che chiamerò filename.txt . Per prima cosa chiamo

gpg --output filename.asc --clearsign filename.txt

Il file firmato filename.asc è stato creato. Quindi chiamo

gpg --armor --output filename.sig --detach-sign filename.asc

La firma viene estratta dal file firmato filename.asc e salvata in filename.sig .

La mia domanda è se è possibile unire in qualche modo il file originale non firmato filename.txt e il file con la firma armata ASCII filename.sig per creare un file firmato? Non vedo questa funzionalità in GPG, ma forse non so qualcosa? O forse è possibile con altri strumenti (elaborazione Java o altro)?

Semplicemente unendo i risultati di questo file con la verifica della firma fallita. Nel mio caso d'uso ho bisogno di firmare il file, rispondere con il file della firma (senza contenuto), quindi ricevo sigante separato e file conent. Ho bisogno di unirlo e crittografarlo. Per ora non sto usando --detach switch e ho solo diviso il file firmato in due file e quindi li sto semplicemente unendo. Ma quando uso --detach cambia le modifiche di siganture e non funziona quando unisco il file siganture con il file di contenuto. Potrebbe rimanere come è adesso, ma voglio estrarre siganture in modo standard usando --detach switch invece di tagliare il file firmato in pezzi, ma poi non vedo un'opzione per unire siganture esportato con --detach interruttore

    
posta ctomek 30.10.2015 - 13:48
fonte

1 risposta

2

In generale, non puoi semplicemente prendere una firma staccata e combinarla con i dati originali per creare un messaggio firmato, a meno che tu non normalizzi l'input prima di creare la firma.

GnuPG impacchetterà il testo di input originale in modo diverso, a seconda del tipo di operazione (staccato rispetto a chiaro). La sezione 7.1 della RFC4880 prende atto di questo ( link ).

As with binary signatures on text documents, a cleartext signature is calculated on the text using canonical line endings. The line ending (i.e., the <CR><LF>) before the '-----BEGIN PGP SIGNATURE-----' line that terminates the signed text is not considered part of the signed text.

Quindi, dobbiamo prima normalizzare le terminazioni di riga del testo di input, quindi rimuovere il <CR><LF> finale dalla fine del testo.

Ecco un esempio di come i dati di input originali dovrebbero essere modificati:

gpg --armor --output filename.txt.asc --detach-sign <(sed 's/$/\r/' filename.txt | head -c -2)

Ciò creerà la firma staccata (nomefile.txt.asc) dopo aver prima convertito le terminazioni di riga (' $ ') in un ritorno a capo (' \r '), e anche rimuovere il carriage-return + line-feed dalla fine del testo in entrata.

Ora puoi creare un messaggio con firma chiara dalla firma (nomefile.txt.asc) e il file originale (nomefile.txt), in questo modo:

gpg --verify <(echo -e "-----BEGIN PGP SIGNED MESSAGE-----\nHash: SHA1\n\n$(cat filename.txt)\n$(cat filename.txt.asc)")

(nel mio esempio dovrai sostituire l'algoritmo hash - SHA1 - con qualsiasi cosa tu stia effettivamente usando)

Inoltre, dovrebbe essere notato -

gpg --armor --output filename.sig --detach-sign filename.asc Signature is extracted from signed file filename.asc and saved in filename.sig.

Questo non estrae alcuna firma - crea una nuova firma dei dati all'interno del file filename.asc (inclusa la firma originale) e la salva in filename.sig . Se passi --clearsign anziché --detach-sign vedrai cosa intendo.

    
risposta data 31.10.2015 - 18:19
fonte

Leggi altre domande sui tag