¿El mejor formato de archivo para la firma criptográfica?

3

Quiero firmar un directorio completo de archivos usando GPG, y eso implica crear un archivo comprimido o comprimido, ya que GPG solo puede firmar un archivo, no un directorio. Sin embargo, me imagino que algunos formatos de archivo pueden contener algún tipo de datos específicos del agente de usuario o marcas de tiempo o nonces que pueden hacer que las firmas criptográficas no sean reproducibles.

Mi pregunta: hay un formato de archivo, como zip o tar, que no varía en absoluto, por lo que las firmas criptográficas generadas por uno serán las mismas en todas las computadoras que crean un archivo similar utilizando mismas entradas?

    
pregunta Jonathan Wilbur 12.01.2018 - 12:09
fuente

1 respuesta

4
  

que implica crear un archivo comprimido o comprimido

Esa premisa no es necesariamente cierta. No necesariamente tiene que crear un archivo para firmar criptográficamente varios archivos. Daré algunos ejemplos.

Archivo de manifiesto

Puede firmar un archivo que contiene una lista de hashes de archivos, este archivo generalmente se denomina "manifiesto". La firma en el manifiesto cubrirá todos los archivos hash. El uso de un manifiesto en lugar de un archivo tiene la ventaja de que puede agregar y eliminar archivos de su directorio sin invalidar por completo la firma; otras personas pueden modificar dos archivos y probar que solo modificaron los dos archivos, ya que solo se modificó el hash de dos archivos de su versión original. Esencialmente, usted firma el directorio utilizando este tipo de script:

find $directory -type f -print0 | sort -z | xargs --null sha256sum | gpg2 --clearsign > manifest.txt

Esta es más o menos la estrategia que se usa en un archivo JAR (aunque jarsigner usa el certificado x509 en lugar de OpenPGP).

Repositorio de git firmado

Puedes crear un repositorio de git y firmar criptográficamente los archivos utilizando etiquetas / confirmaciones firmadas con gpg.

$ git init

$ git add .
$ git commit --gpg-sign -m "Version 1"

or

$ git tag --sign version-1

archivo tar reproducible

Si insiste en crear un archivo, puede crear un archivo tar reproducible. Estos son mucho más complejos porque un archivo puede contener metadatos, pero afortunadamente el programa tar tiene muchos argumentos que le permiten seleccionar qué metadatos desea conservar. Con un archivo, tiene mucha flexibilidad en cuanto a si desea o no firmar permisos, los tiempos de modificación (que pueden ser necesarios si luego desea usar herramientas como make ) y otros metadatos. Puede crear un alquitrán reproducible como tal:

tar --sort=name \
  --mtime="0" \
  --owner=0 --group=0 --numeric-owner \
  -cf file.tar $directory
gpg2 --sign file.tar

Para obtener más información acerca de la creación de un archivo tar reproducible, sugeriría leer este artículo .

    
respondido por el Lie Ryan 12.01.2018 - 15:01
fuente

Lea otras preguntas en las etiquetas