¿Cómo obtener la identificación de la clave pública sin importar la clave privada?

¿Cómo obtener la identificación de la clave pública sin importar la clave privada?

Si ejecuto lo siguiente en una clave privada para instalarla en mi servidor de claves:

gpg --allow-secret-key-import --import my_private.key

¿Importará una clave pública asociada, presumiblemente desde un servidor de claves?

gpg: key xyz...: public key "[email protected]" imported

Mi pregunta es: ¿Cómo puedo saber el ID de esta clave pública sin tener que instalar la clave privada en mi llavero?

Respuesta1

Dada la siguiente clave pública en formato de correo de privacidad mejorada (DER codificado en Base64):

$ wget https://apt.dockerproject.org/gpg -O dockerproject.gpg.pub.key
$ cat dockerproject.gpg.pub.key
-----BEGIN PGP PUBLIC KEY BLOCK-----

mQINBFWln24BEADrBl5p99uKh8+rpvqJ48u4eTtjeXAWbslJotmC/CakbNSqOb9o
ddfzRvGVeJVERt/Q/mlvEqgnyTQy+e6oEYN2Y2kqXceUhXagThnqCoxcEJ3+KM4R
mYdoe/BJ/J/6rHOjq7Omk24z2qB3RU1uAv57iY5VGw5p45uZB4C4pNNsBJXoCvPn
TGAs/7IrekFZDDgVraPx/hdiwopQ8NltSfZCyu/jPpWFK28TR8yfVlzYFwibj5WK
dHM7ZTqlA1tHIG+agyPf3Rae0jPMsHR6q+arXVwMccyOi+ULU0z8mHUJ3iEMIrpT
X+80KaN/ZjibfsBOCjcfiJSB/acn4nxQQgNZigna32velafhQivsNREFeJpzENiG
HOoyC6qVeOgKrRiKxzymj0FIMLru/iFF5pSWcBQB7PYlt8J0G80lAcPr6VCiN+4c
NKv03SdvA69dCOj79PuO9IIvQsJXsSq96HB+TeEmmL+xSdpGtGdCJHHM1fDeCqkZ
hT+RtBGQL2SEdWjxbF43oQopocT8cHvyX6Zaltn0svoGs+wX3Z/H6/8P5anog43U
65c0A+64Jj00rNDr8j31izhtQMRo892kGeQAaaxg4Pz6HnS7hRC+cOMHUU4HA7iM
zHrouAdYeTZeZEQOA7SxtCME9ZnGwe2grxPXh/U/80WJGkzLFNcTKdv+rwARAQAB
tDdEb2NrZXIgUmVsZWFzZSBUb29sIChyZWxlYXNlZG9ja2VyKSA8ZG9ja2VyQGRv
Y2tlci5jb20+iQI4BBMBAgAiBQJVpZ9uAhsvBgsJCAcDAgYVCAIJCgsEFgIDAQIe
AQIXgAAKCRD3YiFXLFJgnbRfEAC9Uai7Rv20QIDlDogRzd+Vebg4ahyoUdj0CH+n
Ak40RIoq6G26u1e+sdgjpCa8jF6vrx+smpgd1HeJdmpahUX0XN3X9f9qU9oj9A4I
1WDalRWJh+tP5WNv2ySy6AwcP9QnjuBMRTnTK27pk1sEMg9oJHK5p+ts8hlSC4Sl
uyMKH5NMVy9c+A9yqq9NF6M6d6/ehKfBFFLG9BX+XLBATvf1ZemGVHQusCQebTGv
0C0V9yqtdPdRWVIEhHxyNHATaVYOafTj/EF0lDxLl6zDT6trRV5n9F1VCEh4Aal8
L5MxVPcIZVO7NHT2EkQgn8CvWjV3oKl2GopZF8V4XdJRl90U/WDv/6cmfI08GkzD
YBHhS8ULWRFwGKobsSTyIvnbk4NtKdnTGyTJCQ8+6i52s+C54PiNgfj2ieNn6oOR
7d+bNCcG1CdOYY+ZXVOcsjl73UYvtJrO0Rl/NpYERkZ5d/tzw4jZ6FCXgggA/Zxc
jk6Y1ZvIm8Mt8wLRFH9Nww+FVsCtaCXJLP8DlJLASMD9rl5QS9Ku3u7ZNrr5HWXP
HXITX660jglyshch6CWeiUATqjIAzkEQom/kEnOrvJAtkypRJ59vYQOedZ1sFVEL
MXg2UCkD/FwojfnVtjzYaTCeGwFQeqzHmM241iuOmBYPeyTY5veF49aBJA1gEJOQ
TvBR8Q==
=Fm3p
-----END PGP PUBLIC KEY BLOCK-----

Todos los siguientes comandos mostrarán la identificación de la clave larga sin agregarla a su conjunto de claves:

$ gpg --list-packets dockerproject.gpg.pub.key | \
awk '/keyid:/{ print $2 }'
F76221572C52609D
$ gpg --with-colons dockerproject.gpg.pub.key 2>&1 | \
awk -F':' '/pub/{ print $5 }'
F76221572C52609D
$ gpg --dry-run --verbose --import dockerproject.gpg.pub.key 2>&1 | \
awk '/pub/{ print $3 }' | awk -F'/' '{ print $2 }'
F76221572C52609D
$ gpg --with-fingerprint --verbose dockerproject.gpg.pub.key 2>&1 | \
awk '/^sig/{ print $2 }'
F76221572C52609D

Al utilizar esta versión de gpg:

$ gpg --version | head -n 1
gpg (GnuPG) 2.2.4

Estos comandos no son muy amigables ni intuitivos y arrojan mensajes confusos como gpg: WARNING: no command supplied. Trying to guess what you mean ...en STDERR. También parecen ser sutilmente diferentes entre versiones, por ejemplo, mi versión a veces requiere --verbosecomparación con algunas respuestas que existen. Esta versión no tiene la --show-keysbandera que parece más fácil que la mayoría de los comandos anteriores.

Alguna información útil sobre los identificadores de claves:

  • Formato corto de ID de clave:2C52609D
  • Formato largo de ID de clave:F76221572C52609D
  • Firma clave:58118E89F3A912897C070ADBF76221572C52609D

Debes utilizar el formato largo como formato corto.es inseguro

Respuesta2

Para obtener los ID de las claves (8 bytes, 16 dígitos hexadecimales), este es el comando que funcionó para mí en GPG 1.4.16, 2.1.18 y 2.2.19:

gpg --list-packets <key.asc | awk '$1=="keyid:"{print$2}'

Para obtener más información (además del ID de la clave):

gpg --list-packets <key.asc

Para obtener aún más información:

gpg --list-packets -vvv --debug 0x2 <key.asc

El comando

gpg --dry-run --import <key.asc

También funciona en las 3 versiones, pero en GPG 1.4.16 imprime solo una identificación de clave corta (4 bytes, 8 dígitos hexadecimales), por lo que es menos seguro identificar claves.

Los comandos en otras respuestas (p. ej. gpg --show-keys, gpg --with-fingerprint, gpg --import --import-options show-only) no funcionan en algunas de las 3 versiones de GPG anteriores, por lo que no son portátiles cuando apuntan a múltiples versiones de GPG.

Respuesta3

Simplemente llame a la gpgherramienta de línea de comando y pásele el archivo de claves como opción

$ gpg my_private.key
sec  4096R/1234ABCD 2017-09-12 [email protected]

La versión larga (sin advertencia "gpg: ADVERTENCIA: no se proporcionó ningún comando ..." - desde gnupg-version >= 2.1.23 - encontró estoaquí):

gpg --import-options show-only --import my_private.key

Respuesta4

Si se refiere a una clave PGP, esta puede ser la respuesta.

Del manual de gpg (gpg (GnuPG) 2.2.11):

--mostrar-claves

Este comando toma claves OpenPGP como entrada e imprime información sobre ellas de la misma manera que lo hace el comando --list-keys para las claves almacenadas localmente. Además, también están habilitadas las opciones de lista show-unusable-uids, show-unusable-subkeys, show-notations y show-policy-urls. Como es habitual en el procesamiento automatizado, este comando debe combinarse con la opción --with-colon.

Por ejemplo:

$ gpg --show-keys docker-ce.gpg pub rsa4096 2017-02-22 [SCEA] 9DC858229FC7DD38854AE2D88D81803C0EBFCD88 uid Docker Release (CE deb) <[email protected]> sub rsa4096 2017-02-22 [S]

donde 9DC858229FC7DD38854AE2D88D81803C0EBFCD88 es la identificación de la clave.

información relacionada