ssh-add -l
Zeigt alle ssh-Schlüssel an, die mit hinzugefügt wurden ssh-add ~/.ssh/id_yourkey
. Wie mache ich das Analoge mit gpg und gpg-agent, mit anderen Worten, bitte es, eine Liste von zwischengespeicherten Schlüsseln anzuzeigen?
Möglicherweise können Sie dies nicht, zumindest noch nicht oder zumindest nicht im allgemeinen Fall. Ich werde jedoch mitteilen, was ich gelernt habe, und freue mich darauf, diese Antwort zu gegebener Zeit zu aktualisieren.
Erstens können im Gegensatz zu der ssh-agent
Funktion, mit der private Schlüssel tatsächlich zwischengespeichert werden, gpg-agent
entweder Schlüssel oder Passphrasen zwischengespeichert werden. Es ist für jeden Kunden auf , die in dem Cache, und gpg
nur verwenden gpg-agent
das Passwort cachen.
Sie können mit gpg-agent
dem gpg-connect-agent
Dienstprogramm interagieren . Im folgenden Beispiel übergebe ich Befehle einzeln über STDIN.
$ CACHEID="ThisIsTheTrickyPart"
$ ERRSTR="Error+string+goes+here"
$ PMTSTR="Prompt"
$ DESSTR="Description+string+goes+here"
$ echo "GET_PASSPHRASE --data $CACHEID $ERRSTR $PMTSTR $DESSTR" | gpg-connect-agent
D MyPassPhrase
OK
Beim Aufrufen gpg-connect-agent
und Übergeben dieses Befehls pinentry
fordert der auf meinem System konfigurierte Befehl mit den Zeichenfolgen error, prompt und description zur Eingabe einer Passphrase auf. In diesem Fall habe ich "MyPassPhrase" eingegeben, was in der strukturierten Ausgabe zurückgegeben wird (siehe Abbildung unten) . Wenn ich sende , GET_PASSPHRASE
um gpg-agent
wieder mit dem gleichen $CACHEID
, gibt es die anstelle von Passwort zwischengespeichert pinentry
.
GET_PASSPHRASE
Akzeptiert auch eine --no-ask
Option, die einen Fehler bei einem Cache-Miss zurückgibt. Hier verwende ich "NotCachedID" als Cache-ID und verwende Dummy-Strings für die erforderlichen Argumente, gpg-agent
die nicht verwendet werden.
$ echo "GET_PASSPHRASE --no-ask NotCachedID Err Pmt Des" | gpg-connect-agent
ERR 67108922 No data <GPG Agent>
Im Prinzip könnten Sie den Agenten dann nacheinander nach jeder möglicherweise zwischengespeicherten Passphrase fragen und nach OK
oder ERR
in der Ausgabe suchen. Es stellt sich dann die Frage, wie ich die Cache-ID generiere. Wie wir im obigen Beispiel sehen, gpg-agent
ist liberal, was es als Cache-ID akzeptiert. Es stellt sich heraus, dass gpg
ein Fingerabdruck auf dem öffentlichen Schlüssel berechnet und eine hexadezimal codierte Zeichenfolgendarstellung als Cache-ID verwendet wird. Das Problem ist jedoch, dass dieser Fingerabdruck nicht mit dem Fingerabdruck identisch ist, den Sie über lernen könnengpg --fingerprint --list-secret-keys
. Dieser Digest wird als Keygrip bezeichnet (da er nur über das Rohschlüsselmaterial berechnet wird, während der Fingerabdruck über das Schlüsselmaterial und den Erstellungszeitstempel berechnet wird). Wenn Sie diesen Weg wirklich fortsetzen möchten, müssen Sie herausfinden, wie Sie den richtigen Fingerabdruck für jeden der zu überprüfenden Schlüssel generieren können (dies wird mit der nächsten Generation von GnuPG 2.1 mit der Option einfach sein --with-keygrip
).
Warnung: Die Ausgabe von GET_PASSPHRASE
enthält tatsächlich die Passphrase im Klartext . Auch wenn Sie die --data
Option weglassen, wird die Passphrase deutlich als hexadezimal codierte Zeichenfolge angezeigt. Es ist wahrscheinlich eine sehr schlechte Idee, sich damit zu beschäftigen, es sei denn, Sie wissen, was Sie tun, und treffen die entsprechenden Vorsichtsmaßnahmen.
gpg-agent
, oder?gpg-agent
Ruft diepinentry
Programmvariante auf, für die es konfiguriert ist. Siehe zum Beispiel Wie GPG erzwingen Verwendung Konsolenmodus pinentry ... .gpg-2.1.11
von Quelle auf 14,04 Ubuntu kompiliert, kann ich nicht herausfinden , was diegpg-agent
Cache - ID ist: ich beide keygrips versucht (Hauptschlüssel und Unterschlüssel) und den Schlüssel Fingerabdruck, wie dargestellt durchgpg --fingerprint --with-keygrip <user>
. Keiner von ihnen funktioniert undgpg-connect-agent
berichtet immerERR 67108922 No data <GPG Agent>
. Ich habe überprüft, ob der Agent die Passphrase noch hat, indem erGPG_TTY= gpg --decrypt <file>
nach dem Ausprobieren verschiedener Cache-IDs erfolgreich ausgeführt wurde . (Falls es durch Deaktivieren unklar ist,GPG_TTY
ist die Entschlüsselung nur dann erfolgreich, wenn die Passphrase bereits von zwischengespeichert wurdegpg-agent
.)In späteren Versionen von gnupg (getestet mit 2.1.18) verwenden Sie:
gpg --fingerprint --with-keygrip <email>
um den Schlüsselgriff zu bekommen
echo "KEYINFO --no-ask <keygrip> Err Pmt Des" | gpg-connect-agent
um zu sehen, ob es zwischengespeichert ist oder nicht.
quelle
In späteren Versionen von GnuPG (getestet mit 2.2.9) ist es auch möglich, die Keygrips, die derzeit vom Agenten zwischengespeichert werden, mit dem Befehl
keyinfo --list
mit aufzulistengpg-connect-agent
.Die
1
in der siebten Spalte gibt an, dass der Schlüsselgriff zwischengespeichert ist. Die Zuordnung zwischen einem Schlüsselgriff und dem Schlüssel, den er darstellt, kann mit abgerufen werdengpg --list-secret-keys --with-keygrip
.Quelle: https://demu.red/blog/2016/06/how-to-check-if-your-gpg-key-is-in-cache/
quelle
Um die Cache-ID zu erhalten, müssen Sie Folgendes
--fingerprint
zweimal erwähnen :Die cacheid wäre in diesem Fall
E8514C2510C602910D47A0087C8B4360E50A8F2A
.quelle
--fingerprint
gegen zwei--fingerprint --fingerprint
geben genau die gleiche Ausgabe zurück. Wie @BenCreasy schreibt, funktioniert die obige Antwort mit dem Schlüsselgriff.http://lists.gnupg.org/pipermail/gnupg-users/2010-January/037876.html
Die Cache-ID ist der vollständige Fingerabdruck des Schlüssels.
quelle