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을 통해 한 번에 하나씩 명령을 전달합니다.

$ 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-agentpinentry내 시스템에 구성된 명령은 오류, 프롬프트 및 설명 문자열을 사용하여 암호를 묻는 메시지를 표시합니다. 이 예에서는 "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을 확인할 수 있습니다 OK. ERR그렇다면 질문은 캐시 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 --list.gpg-connect-agent

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

일곱 번째 열에 있는 항목은 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\

관련 정보