Obtenga los identificadores de clave y las huellas digitales de apt en formato legible por máquina

11

Estoy tratando de parchear un problema en puppetlabs-apt para permitir el uso de huellas dactilares clave como identificadores para asegurar que una determinada clave esté presente por su huella digital de 40 dígitos.

Tengo dificultades para verificar que la clave esté presente y necesito un comando que muestre lo siguiente:

  • La identificación de 8 dígitos de la clave.
  • La ID de 16 dígitos de la clave.
  • La ID de 40 dígitos de la clave.

¿Hay apt-keyalgún comando que pueda usar para generar estos valores, uno por línea, para poder analizar la salida y verificar si la clave está presente?

Naftuli Kay
fuente

Respuestas:

21

apt-key adv le permitirá pasar opciones directamente a GnuPG.

Entonces puede hacer algo como esto para obtener una salida analizable:

# 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:
⋮

Dado que solo le interesa la huella digital (las identificaciones de 8 y 16 dígitos son solo el final de la huella digital), | grep ^fprparece que le daremos las líneas que le interesan.

derobert
fuente
Entonces, ¿tomar fingerprint[-8:](Python) me daría la identificación de 8 dígitos y fingerpint[-16:]me daría la identificación de 16 dígitos? Soy un tonto por pensar que estos eran hash de criptología derivados ...
Naftuli Kay
2
@NaftuliTzviKay La huella digital es un hash derivado criptográficamente. No hay ningún beneficio de seguridad para volver a trocearlo en vez de truncarlo. Además, los de 8 dígitos y probablemente los de 16 dígitos son demasiado cortos para ser seguros; puede generar una clave duplicada por fuerza bruta. Solo el hash completo es razonablemente seguro. No puedo comentar si su código de Python hace lo esperado, ya que no sé Python ... Pero supongo que sí. Son solo los últimos 8 o 16 dígitos hexadecimales.
derobert