gpg-agentがどのキーをキャッシュしたかを確認する方法は? (ssh-add -lがキャッシュされたSSHキーを表示する方法に似ています)

gpg-agentがどのキーをキャッシュしたかを確認する方法は? (ssh-add -lがキャッシュされたSSHキーを表示する方法に似ています)

ssh-add -l追加されたすべてのSSHキーを表示しますssh-add ~/.ssh/id_yourkey。 gpgとgpg-agentを使用して同様の操作、つまりキャッシュされたキーのリストを表示するように要求するにはどうすればよいですか?

答え1

少なくとも、まだそれを行うことができないか、少なくとも一般的にはそうすることはできません。しかし、私が学んだことを共有し、適切なタイミングでこの回答を更新できることを期待しています。

まず、ssh-agent実際に秘密鍵をキャッシュするのではなく、鍵またはgpg-agentパスワードをキャッシュすることができます。何をキャッシュするかを決定することは各クライアントの役割であり、パスワードキャッシュgpgに対してのみ決定されます。gpg-agent

gpg-agentこのユーティリティを使用して対話できますgpg-connect-agent。次の例では、STDINを介して一度に1つずつコマンドを渡します。

$ 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

このコマンドを呼び出して渡したgpg-connect-agent後、pinentry私のシステムで設定されたコマンドは、エラー、プロンプト、および説明文字列を使用してパスワードの入力を求めます。この例では「MyPassPhrase」と入力し、これが構造化出力に返されます。(下記参照)。同じ転送を再利用すると、GET_PASSPHRASEそれを使用する代わりにキャッシュされたパスワードが返されgpg-agentます。$CACHEIDpinentry

                                 ダイアログボックスのss

GET_PASSPHRASEまた、--no-askキャッシュが欠落しているときにエラーを返すオプションも許可されています。ここでは、キャッシュIDとして「NotCachedID」を使用し、gpg-agent使用されていない必須パラメータのダミー文字列を使用します。

$ echo "GET_PASSPHRASE --no-ask NotCachedID Err Pmt Des" | gpg-connect-agent
ERR 67108922 No data <GPG Agent>

原則として、キャッシュに潜在的にキャッシュされた各パスワードを順番にプロキシに要求し、出力でORを確認できますOKERRもしそうなら、質問はキャッシュIDを生成する方法です。上記の例で見たように、gpg-agent許可されたキャッシュIDは無料です。公開鍵の指紋を計算し、16進数でエンコードされた文字列表現をキャッシュIDとして使用することが判明しましたが、gpg問題は指紋が渡すことができる指紋とは異なることですgpg --fingerprint --list-secret-keys。ダイジェストをキーグリップといいます。計算された元のキーデータのみに基づいていますが、指紋はキーデータと生成タイムスタンプに基づいて計算されます。このパスを続行するには、確認したい各キーに対して正しい指紋を生成する方法を理解する必要があります(次世代のGnuPG 2.1とオプションを使用すると簡単になります--with-keygrip)。

警告する:GET_PASSPHRASE実際、出力には次のものが含まれます。プレーンテキストパスワード。このオプションを選択しなくても、--dataパスワードは16進数でエンコードされた文字列で明確に表示されます。自分が何をしているのかを知り、適切な予防措置を講じない限り、これを乱すことはおそらく非常に悪い考えでしょう。

答え2

以降のバージョンのGnuPG(2.2.9でテスト済み)ではkeyinfo --listgpg-connect-agent

$ gpg-connect-agent 'keyinfo --list' /bye
S KEYINFO 866C3DE249CF81E31A3691845DBADE2809487FF5 D - - 1 P - - -
S KEYINFO 04278155E72CAE8FF1548FE161F1B8F7673824F4 D - - - P - - -
OK

7番目の列のエントリは、1キーグリップがキャッシュされたことを示します。キークリップとそれが表すキーとの関連付けを検索するために使用できますgpg --list-secret-keys --with-keygrip

源泉:https://demu.red/blog/2016/06/how-to-check-if-your-gpg-key-is-in-cache/

答え3

将来のバージョンのgnupg(2.1.18でテスト済み)では、次のものを使用します。

gpg --fingerprint --with-keygrip <email>

キークリップを入手してから

echo "KEYINFO --no-ask <keygrip> Err Pmt Des" | gpg-connect-agent

キャッシュされていることを確認してください。

答え4

Windowsでは(gpg4winを使用)、次のようにキーを一覧表示できます。

gpg-connect-agent "KEYINFO --ssh-list --ssh-fpr" /bye

SHA1指紋が必要な場合は、以下を使用してください。

gpg-connect-agent "KEYINFO --ssh-list --ssh-fpr=sha1" /bye

キーの説明を一覧表示する方法はわかりませんが、保存されたキーに表示されます。%APPDATA%\gnupg\private-keys-v1.d\

関連情報