Holen Sie sich die Schlüssel-IDs und Fingerabdrücke von apt in maschinenlesbarem Format

11

Ich versuche, ein Problem in Puppetlabs-apt zu beheben, um die Verwendung von Schlüsselfingerabdrücken als Kennungen zu ermöglichen, um sicherzustellen, dass ein bestimmter Schlüssel durch seinen 40-stelligen Schlüsselfingerabdruck vorhanden ist.

Ich habe Schwierigkeiten zu überprüfen, ob der Schlüssel vorhanden ist, und ich benötige einen Befehl, der Folgendes ausgibt:

  • Die 8-stellige ID des Schlüssels.
  • Die 16-stellige ID des Schlüssels.
  • Die 40-stellige ID des Schlüssels.

Gibt es einen apt-keyBefehl, mit dem ich diese Werte ausgeben kann, einen pro Zeile, damit ich die Ausgabe analysieren und prüfen kann, ob der Schlüssel vorhanden ist?

Naftuli Kay
quelle

Antworten:

21

apt-key adv Mit dieser Option können Sie Optionen direkt an GnuPG übergeben.

Sie können also so etwas tun, um eine analysierbare Ausgabe zu erhalten:

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

Da Sie sich nur für den Fingerabdruck interessieren (die 8- und 16-stelligen IDs sind nur das Ende des Fingerabdrucks), | grep ^fprscheinen Sie die Zeilen zu erhalten, die Sie interessieren.

derobert
quelle
Wenn ich also fingerprint[-8:](Python) nehme, bekomme ich die 8-stellige ID und fingerpint[-16:]die 16-stellige ID? Dumm von mir zu denken, dass dies kryptologisch abgeleitete Kurz-Hashes waren ...
Naftuli Kay
2
@NaftuliTzviKay Der Fingerabdruck ist ein kryptografisch abgeleiteter Hash. Es hat keinen Sicherheitsvorteil, es erneut zu hashen, anstatt es nur abzuschneiden. Außerdem sind die 8-stelligen und wahrscheinlich 16-stelligen zu kurz, um sicher zu sein. Sie können einen doppelten Schlüssel mit roher Gewalt erzeugen. Nur der vollständige Hash ist einigermaßen sicher. Ich kann nicht kommentieren, ob Ihr Python-Code wie erwartet funktioniert, da ich Python nicht kenne ... Aber ich würde ja raten. Es sind nur die letzten 8 oder 16 hexadezimalen Ziffern.
Derobert