Obtenha os principais IDs e impressões digitais do apt em formato legível por máquina

11

Estou tentando corrigir um problema no puppetlabs-apt para permitir o uso de impressões digitais de chave como identificadores para garantir que uma certa chave esteja presente em sua impressão digital de 40 dígitos.

Estou com dificuldades para verificar se a chave está presente e preciso de um comando que produza o seguinte:

  • O ID de 8 dígitos da chave.
  • O ID de 16 dígitos da chave.
  • O ID de 40 dígitos da chave.

Existe um apt-keycomando que eu possa usar para gerar esses valores, um por linha, para poder analisar a saída e verificar se a chave está presente?

Naftuli Kay
fonte

Respostas:

21

apt-key adv permitirá que você passe diretamente as opções para o GnuPG.

Portanto, você pode fazer algo assim para obter uma saída analisável:

# apt-key adv --list-public-keys --with-fingerprint --with-colons 
⋮
fpr:::::::::126C0D24BD8A2942CC7DF8AC7638D0442B90D010:
pub:-:4096:1:9D6D8F6BC857C906:2014-11-21:2022-11-19::-:Debian Security Archive Automatic Signing Key (8/jessie) <[email protected]>::scSC:
fpr:::::::::D21169141CECD440F2EB8DDA9D6D8F6BC857C906:
⋮

Como você está interessado apenas na impressão digital (os IDs de 8 e 16 dígitos são apenas o fim da impressão digital), | grep ^fprisso parece fornecer as linhas de que você gosta.

derobert
fonte
Então, tirar fingerprint[-8:](Python) me daria o ID de 8 dígitos e fingerpint[-16:]o de 16 dígitos? Parvo-me por pensar que eram pequenos hashes criptologicamente derivados ...
Naftuli Kay
2
@NaftuliTzviKay A impressão digital é um hash criptograficamente derivado. Não há nenhum benefício de segurança para fazer o hash novamente versus apenas truncá-lo. Além disso, os de 8 e provavelmente 16 dígitos são muito curtos para serem seguros; você pode gerar uma chave duplicada por força bruta. Somente o hash completo é razoavelmente seguro. Não posso comentar se o seu código python faz como esperado, pois eu não conheço python ... Mas acho que sim. São apenas os últimos 8 ou 16 dígitos hexadecimais.
Derobert