that entails creating an archive or compressed file
Questa premessa non è necessariamente vera. Non è necessario necessariamente creare un archivio per firmare crittograficamente più file. Darò alcuni esempi.
File manifest
È possibile firmare un file che contiene un elenco di hash di file, questo file viene in genere definito "manifest". La firma sul manifest coprirà tutti i file con hash. L'uso di un manifest invece di un archivio ha il vantaggio di poter aggiungere e rimuovere file dalla directory senza invalidare completamente la firma; altre persone possono modificare due file e provare che hanno modificato solo i due file in quanto solo l'hash di due file è stato modificato rispetto alla versione originale. In sostanza, si firma la directory utilizzando questo tipo di script:
find $directory -type f -print0 | sort -z | xargs --null sha256sum | gpg2 --clearsign > manifest.txt
Questa è più o meno la strategia utilizzata in un file JAR (sebbene jarsigner usi il certificato x509 invece di OpenPGP).
repository git firmato
Puoi creare un repository git e firmare crittograficamente i file usando commit / tags firmati gpg.
$ git init
$ git add .
$ git commit --gpg-sign -m "Version 1"
or
$ git tag --sign version-1
File tar riproducibile
Se si insiste sulla creazione di un archivio, è possibile creare un file tar riproducibile. Questi sono molto più complessi perché un archivio può contenere metadati, ma fortunatamente il programma tar ha molti argomenti che ti permettono di selezionare quali metadati vuoi conservare. Con un archivio, hai molta flessibilità se vuoi o meno firmare le autorizzazioni, i tempi di modifica (che potrebbero essere necessari se in seguito vuoi utilizzare strumenti come make
) e altri metadati. Puoi creare un catrame riproducibile in questo modo:
tar --sort=name \
--mtime="0" \
--owner=0 --group=0 --numeric-owner \
-cf file.tar $directory
gpg2 --sign file.tar
Per ulteriori informazioni sulla creazione di file tar riproducibili, ti suggerisco di leggere questo articolo .