¿Crear un archivo firmado desde el archivo de contenido y su firma separada?

3

Tengo un archivo de texto al que llamaré filename.txt . En primer lugar llamo

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

Se crea el archivo firmado filename.asc . Entonces llamo

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

La firma se extrae del archivo firmado filename.asc y se guarda en filename.sig .

Mi pregunta es si es posible de alguna manera combinar el archivo original sin firmar filename.txt y el archivo con la firma armada ASCII filename.sig para crear un archivo firmado. No veo tal funcionalidad en GPG, pero tal vez no sé algo. ¿O tal vez es posible con otras herramientas (procesamiento Java o algo)?

Simplemente fusionando los resultados de estos archivos con la verificación de la firma fallida. En mi caso de uso, necesito firmar un archivo, responder con un archivo de firma (sin contenido), luego recibo un archivo de firma y conent separado. Necesito fusionarlo y cifrarlo. Por ahora no estoy usando --detach switch y simplemente dividí el archivo firmado en dos archivos y luego simplemente los fusiono. Pero cuando uso --detach switch siganture cambia y no funciona cuando fusiono el archivo de siganture con el archivo de contenido. Podría seguir siendo como está ahora, pero quiero extraer siganture de manera estándar usando --detach switch en lugar de solo cortar el archivo firmado en partes, pero luego no veo una opción para fusionar siganture exportado con --detach interruptor

    
pregunta ctomek 30.10.2015 - 13:48
fuente

1 respuesta

2

En general, no puede simplemente tomar una firma separada y combinarla con los datos originales para crear un mensaje con firma clara, a menos que normalice la entrada antes de crear la firma.

GnuPG empaquetará el texto de entrada original de manera diferente, dependiendo del tipo de operación (separado frente a signo claro). RFC4880 sección 7.1 toma nota de esto ( enlace ).

  

Al igual que con las firmas binarias en documentos de texto, una firma de texto claro es     Calculado sobre el texto utilizando finales de línea canónicos. los     línea que termina (es decir, el <CR><LF> ) antes del '----- BEGIN PGP     FIRMA ----- 'la línea que termina el texto firmado no es     Se considera parte del texto firmado.

Por lo tanto, primero debemos normalizar los finales de línea del texto de entrada, luego eliminar el <CR><LF> final del final del texto.

Este es un ejemplo de cómo se deben modificar los datos de entrada originales:

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

Eso creará la firma separada (filename.txt.asc) después de convertir primero los finales de línea (' $ ') en un retorno de carro (' \r '), y también eliminará el retorno de carro + avance de línea desde el final de la entrada de texto.

Ahora puede crear un mensaje con firma clara a partir de la firma (filename.txt.asc) y el archivo original (filename.txt), de este modo:

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

(tendrás que reemplazar el algoritmo hash - SHA1 en mi ejemplo - con lo que estés usando)

Además, debe tenerse en cuenta -

  

gpg --armor --output filename.sig --detach-sign filename.asc   La firma se extrae del archivo con nombre de archivo firmado.asc y se guarda en filename.sig.

Esto no extrae ninguna firma; crea una nueva firma de los datos dentro del archivo filename.asc (incluida la firma original), y la guarda en filename.sig . Si apruebas --clearsign en lugar de --detach-sign, verás lo que quiero decir.

    
respondido por el kylehuff 31.10.2015 - 18:19
fuente

Lea otras preguntas en las etiquetas