मुझे कैसे पता चलेगा कि किस कुंजी को gpg- एजेंट ने कैश किया है? (जैसे ssh-add -l आपको कैश्ड ssh कीज़ दिखाता है)


40

ssh-add -lआपको उन सभी ssh-keys को दिखाता है, जिनके साथ जोड़ा गया है ssh-add ~/.ssh/id_yourkey। मैं दूसरे शब्दों में gpg और gpg- एजेंट के साथ अनुरूप काम कैसे कर सकता हूं, इसे कैश्ड कुंजियों की सूची दिखाने के लिए कहें?

जवाबों:


32

आप ऐसा करने में सक्षम नहीं हो सकते हैं, कम से कम अभी तक नहीं, या कम से कम सामान्य मामले में नहीं। हालांकि, मैंने जो कुछ भी सीखा है उसे साझा करूंगा, और इस उत्तर को उचित समय पर अपडेट करने के लिए तत्पर हूं।

सबसे पहले, 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-agentइस आदेश को लागू करने और पारित करने के बाद , pinentryमेरे सिस्टम पर कॉन्फ़िगर किया गया कमांड पासफ़्रेज़ के लिए संकेत करने के लिए त्रुटि, संकेत और विवरण स्ट्रिंग्स का उपयोग करता है। इस मामले में मैंने "MyPassPhrase" में प्रवेश किया जो कि संरचित आउटपुट में वापस आ गया है (नीचे चित्र देखें) । अगर मैं भेज GET_PASSPHRASEकरने के लिए gpg-agentएक ही साथ फिर से $CACHEID, यह रिटर्न उपयोग करने के बजाए कूटशब्द कैश की गई pinentry

                                 संवाद बॉक्स के एस.एस.

GET_PASSPHRASEएक --no-askविकल्प को भी स्वीकार करता है जो कैश मिस पर त्रुटि लौटाएगा। यहां मैं कैश नोट के रूप में "नोटकैडिड" का उपयोग करता हूं, और आवश्यक तर्कों के लिए डमी स्ट्रिंग्स का उपयोग करता हूं जो उपयोग gpg-agentनहीं करेंगे।

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

सिद्धांत रूप में, तब, आप एजेंट से प्रत्येक के लिए-कैश्ड पासफ़्रेज़ बदले में और आउटपुट में OKया उसके लिए जाँच ERRकर सकते हैं। प्रश्न तो यह हो जाता है कि मैं कैश आईडी कैसे उत्पन्न करूं? जैसा कि हम ऊपर उदाहरण में देखते हैं, gpg-agentकैश आईडी के रूप में इसे स्वीकार करता है। यह पता चलता है कि gpgसार्वजनिक कुंजी पर एक फिंगरप्रिंट की गणना होती है और कैश आईडी के रूप में एक हेक्स-कोडेड स्ट्रिंग प्रतिनिधित्व का उपयोग करता है, लेकिन परेशानी यह है कि यह फिंगरप्रिंट वैसा नहीं है जैसा कि आप फिंगरप्रिंट के माध्यम से सीख सकते हैंgpg --fingerprint --list-secret-keys। इस डाइजेस्ट को कीग्रेप कहा जाता है (क्योंकि यह कच्चे कुंजी सामग्री पर ही गणना की जाती है जबकि फिंगरप्रिंट की गणना प्रमुख सामग्री और निर्माण टाइमस्टैम्प पर की जाती है)। यदि आप वास्तव में इस रास्ते को जारी रखना चाहते हैं, तो आपको यह पता लगाना होगा कि आप जिन कुंजियों की जांच करना चाहते हैं, उनमें से प्रत्येक के लिए सही फिंगरप्रिंट कैसे उत्पन्न करें (यह विकल्प के साथ, अगली पीढ़ी के GnuPG, 2.1 का उपयोग करना आसान होगा --with-keygrip)।

चेतावनी:GET_PASSPHRASE वास्तव में आउटपुट में स्पष्ट में पासफ़्रेज़ शामिल है । यहां तक ​​कि अगर आप --dataविकल्प छोड़ देते हैं , तो पासफ़्रेज़ एक हेक्स-कोडेड स्ट्रिंग के रूप में स्पष्ट रूप से दिखाई देता है। जब तक आप यह नहीं जानते कि आप क्या कर रहे हैं, और उचित सावधानी बरतें, तो यह एक बहुत बुरा विचार है।


बहुत बढ़िया जवाब! मैं दिनों की तलाश में हूं और इस पर ज्यादा कुछ नहीं पा सका। सभी को एक साथ रखने और स्पष्ट और संक्षिप्त शब्दों में समझाने का तरीका!
स्लम

स्क्रीन शॉट पिनेंट्री नहीं है, लेकिन कुछ गनोम प्रोग्राम इंटरसेप्टिंग है gpg-agent, क्या यह है?
हौके लैजिंग

gpg-agentpinentryकार्यक्रम का जो भी स्वाद इसे उपयोग करने के लिए कॉन्फ़िगर किया गया है को आमंत्रित करता है। उदाहरण के लिए देखें कैसे करें कंसोल उपयोग मोड pinentry GPG मजबूर करने के लिए ...
neirbowj

gpg-2.1.11उबंटू 14.04 पर स्रोत से संकलित का उपयोग करते हुए , मैं यह नहीं पता लगा सकता कि gpg-agentकैश आईडी क्या है: मैंने दोनों कीग्रिप्स (मुख्य कुंजी और उपकुंजी) और कुंजी फिंगरप्रिंट की कोशिश की, जैसा कि दिखाया गया है gpg --fingerprint --with-keygrip <user>। उनमें से कोई भी काम नहीं करता है, और gpg-connect-agentहमेशा रिपोर्ट करता है ERR 67108922 No data <GPG Agent>। मैंने डबल चेक किया कि GPG_TTY= gpg --decrypt <file>विभिन्न कैश आईडी को आज़माने के बाद एजेंट के पास अभी भी सफलतापूर्वक पासफ़्रेज़ है । (यदि यह अस्पष्ट है, तो परेशान होने से GPG_TTY, डिक्रिप्शन केवल तभी सफल होता है, जब पासफ़्रेज़ पहले से ही कैश हो gpg-agent।)
माटी डेविड

2.0.14 को रोका जा सकता है? उपरोक्त तकनीक का उपयोग करके, gpg- एजेंट के पास वास्तव में निर्दिष्ट कुंजी के लिए वांछित पासफ़्रेज़ है (कीगड्रिप द्वारा पहचाना गया), लेकिन जब मैं उस कीग्रेप से साइन इन करने का प्रयास करता हूं, तो भी मुझे पासवर्ड के लिए संकेत दिया जाता है। क्यूं कर?
ओथियस

8

Gnupg के बाद के संस्करणों पर (2.1.18 के साथ परीक्षण) उपयोग:

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

कीग्रिप पाने के लिए

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

यह देखने के लिए कि यह कैश्ड है या नहीं।


5

GnuPG (2.2.9 के साथ परीक्षण) के बाद के संस्करणों पर यह भी keygrips है कि वर्तमान में आदेश का उपयोग कर एजेंट द्वारा कैश कर रहे हैं की सूची के लिए संभव है keyinfo --listके साथ gpg-connect-agent

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

1सातवें स्तंभ में इंगित करता है कि keygrip कैश किया गया है। एक कीग्रेप और कुंजी के बीच का जुड़ाव इसके साथ पुनः प्राप्त किया जा सकता है gpg --list-secret-keys --with-keygrip

स्रोत: https://demu.red/blog/2016/06/how-to-check-if-your-gpg-key-is-in-cache/


3

--fingerprintउदाहरण के लिए, आपको दो बार उल्लेख करने की जरूरत है :

$ gpg --fingerprint --fingerprint ftpadmin@kernel.org
pub   1024D/517D0F0E 2000-10-10
      Key fingerprint = C75D C40A 11D7 AF88 9981  ED5B C86B A06A 517D 0F0E
uid                  Linux Kernel Archives Verification Key <ftpadmin@kernel.org>
sub   4096g/E50A8F2A 2000-10-10
      Key fingerprint = E851 4C25 10C6 0291 0D47  A008 7C8B 4360 E50A 8F2A

इस मामले में कैशिड होगा E8514C2510C602910D47A0087C8B4360E50A8F2A


यह मेरे लिए काम किया
मैथ्यू हैनिगन

Unix.stackexchange.com/a/342461/108198 पर उत्तर बेहतर लगता है।
बेन क्रेसी

यह मेरे लिए काम नहीं करता है ... एक --fingerprintबनाम दो --fingerprint --fingerprintदोनों एक ही समान आउटपुट लौटाते हैं। जैसा कि @BenCreasy लिखता है, उपरोक्त उत्तर कुंजीग्रिप कार्यों का उपयोग करता है।
ट्रे

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.