como verificar a assinatura do openpgp (gpg) em relação a um conjunto de blocos de chaves públicas

4

Eu tenho algum conteúdo que precisa ser verificado em relação a uma lista de permissões pré-determinada de chaves públicas OpenPGP (também palavra-chave: gpg) para uma assinatura válida por uma delas.

A lista de permissões é mantida separadamente. Idealmente, seria uma concatenação de blocos de chaves públicas com blindagem ascii, mas um diretório com uma chave pública por arquivo estaria bem. Como a lista de permissões é mantida separadamente, não queremos usar nenhuma funcionalidade de gerenciamento de chaveiro do gpg. Se o conteúdo for assinado por uma chave em nosso conjunto de chaves, ela será aprovada. Não há níveis de confiança diferentes, nenhuma rede de confiança, etc.

Idealmente, teríamos um programa com uma interface como esta:

some-program KEYS_FILE CONTENT SIGFILE

ou, com argumentos de exemplo,

some-program /etc/ourapp/ourapps_trusted_pubkeys.asc /var/lib/ourapp/newcontent.tar.gz /var/lib/ourapp/newcontent.tar.gz.asc

A maneira mais rápida de fazer isso com o gpg parece ser:

  • use um arquivo temporário como seu chaveiro
  • aponte o gpg para isso usando --keyring, mas também dê --no-default-keyring
  • iterar pelas chaves em ourapps_trusted_pubkeys.asc, importando-as uma por vez
  • iterar as chaves novamente, definindo-as como confiáveis com gpg --import-ownertrust
  • execute o gpg --verify

Esse é um grande esforço para o que imagino ser um caso de uso comum. o que estou perdendo? Existe uma ferramenta semelhante ao postulado que alguns programas (1) existem?

    
por projix 06.06.2013 / 17:33

1 resposta

6

O programa gpgv / gpgv2 é usado para verificação simples de assinaturas. O problema é que os arquivos de chave exportados não são reconhecidos como chaveiro. Assim você tem que criar um chaveiro no primeiro passo:

cd /some/tmp/dir || exit 1
test -f pubring.gpg && { rm -f pubring.gpg || exit 1; }
gpg --no-options --no-default-keyring --keyring ./pubring.gpg \
  --secret-keyring ./secring.gpg --import /etc/ourapp/ourapps_trusted_pubkeys.asc

Agora, /some/tmp/dir/pubring.gpg é um arquivo de chaveiro gpgv pode usar:

gpgv --keyring /some/tmp/dir/pubring.gpg \
  /var/lib/ourapp/newcontent.tar.gz.asc /var/lib/ourapp/newcontent.tar.gz

Se o caminho do arquivo de dados for o caminho da assinatura sem .asc (como no seu exemplo), você poderá excluí-lo.

    
por 06.06.2013 / 18:11

Tags