Como criar uma única assinatura GnuPG que funciona nas versões LF e CR / LF de um arquivo?

2

Eu criei um arquivo de texto usando apenas LF (feed de linha) no final de cada linha. Eu então fiz uma versão dele que era idêntica, exceto que tinha CR / LF (retorno de carro / alimentação de linha) no final de cada linha.

Em seguida, usando gpg2 versão 2.0.19, fiz uma assinatura separada para cada arquivo. Cada arquivo foi verificado corretamente com a assinatura correta, mas não foi feito quando usei a assinatura incorreta para cada arquivo de dados.

Até agora, é o que eu esperaria.

Mas tenho em meu poder um arquivo de texto e sua assinatura destacada. Agora tenho duas versões do arquivo de texto, uma que é estilo LF e uma que é estilo CR / LF. A mesma assinatura destacada funciona corretamente em ambos.

Como o signatário original conseguiu fazer isso? Eu gostaria de poder fazer isso.

    
por Bill Evans at Mariposa 27.06.2015 / 02:49

1 resposta

2

tl; dr: defina a opção --textmode .

De RFC 4880, 5.2.4. Assinaturas Computacionais :

5.2.4. Computing Signatures

All signatures are formed by producing a hash over the signature data, and then using the resulting hash in the signature algorithm.

For binary document signatures (type 0x00), the document data is hashed directly. For text document signatures (type 0x01), the document is canonicalized by converting line endings to <CR><LF>, and the resulting data is hashed.

Em outras palavras, você precisa ter certeza de que o GnuPG trata o documento como um documento de texto durante a assinatura, que precisa ser ativado usando a opção --textmode :

gpg --textmode --detach --sign file

Ao executar gpg --list-packets signature-file , você observará os diferentes tipos de assinatura do RFC 4880, a segunda linha contendo sigclass 0x01 com --textmode set em vez de sigclass 0x00 sem.

De man gpg (é o mesmo para o GnuPG 2):

-t, --textmode
--no-textmode

Treat input files as text and store them in the OpenPGP canonical text form with standard "CRLF" line endings. This also sets the necessary flags to inform the recipient that the encrypted or signed data is text and may need its line endings converted back to whatever the local system uses. This option is useful when communicating between two platforms that have different line ending conventions (UNIX-like to Mac, Mac to Windows, etc). --no-textmode disables this option, and is the default.

If -t (but not --textmode) is used together with armoring and signing, this enables clearsigned messages. This kludge is needed for command-line compati‐bility with command-line versions of PGP; normally you would use --sign or --clearsign to select the type of the signature.

    
por 27.06.2015 / 10:06