ตัวแทน GPG ทำงานอย่างไร


31

ฉันมีบรรทัดในไฟล์ gpg.conf use-agentของฉันที่กล่าวว่า
ฉันเข้าใจว่านี่หมายถึง gpg-agent ซึ่งเป็น daemon man page กล่าวว่า "gpg-agent เป็น daemon ในการจัดการคีย์ลับ (ส่วนตัว) อย่างอิสระจากโปรโตคอลใด ๆ มันถูกใช้เป็นแบ็กเอนด์สำหรับ gpg และ gpgsm เช่นเดียวกับโปรแกรมอรรถประโยชน์อื่น ๆ สองสามอย่าง"

ใครช่วยอธิบายสิ่งนี้ได้ในบริบทของ gpg จุดประสงค์ของ gpg-agent คืออะไร?

ฉันมี GPG 1.4 ในปัจจุบัน

  1. ฉันจะรู้ได้อย่างไรว่าตัวแทนกำลังทำงานอยู่? ฉันยังไม่ชัดเจนว่า gpg-agent ติดตั้งมากับแพ็คเกจ GPG 1.4 พื้นฐานหรือไม่
  2. ฉันจะเริ่มต้นอย่างไรถ้ามันไม่ทำงาน
  3. ฉันจะหยุดมันได้อย่างไรถ้ามันทำงานอยู่

คำตอบ:


38

Gpg-agent เป็นโปรแกรมที่ทำงานในพื้นหลัง ( daemon ) และเก็บรหัสลับ GPG ในหน่วยความจำ เมื่อกระบวนการ GPG ต้องการคีย์มันจะติดต่อโปรแกรม gpg-agent ที่เรียกใช้ผ่านซ็อกเก็ตและขอกุญแจ หากกระบวนการตัวแทนมีคีย์มันจะให้มันไปยัง gpg หากไม่เป็นเช่นนั้นจะพยายามโหลดคีย์ที่เข้ารหัสจากพวงกุญแจของคุณและแจ้งให้คุณใส่ข้อความรหัสผ่านของคีย์ เมื่อตัวแทนได้รับกุญแจถอดรหัสแล้วมันจะส่งผ่านไปยังกระบวนการ gpg นอกจากคีย์ GPG แล้ว Gpg-agent ยังสามารถจัดเก็บคีย์ SSH ในทำนองเดียวกันและมอบให้กับกระบวนการ SSH เช่นssh-agentโปรแกรมที่มาพร้อมกับ SSH

จุดหลักของการใช้ตัวแทนกุญแจคือเพื่อให้คุณไม่ต้องพิมพ์ข้อความรหัสผ่านทุกครั้งที่คุณใช้รหัส เอเจนต์เก็บคีย์ในหน่วยความจำจากหนึ่งไปอีกครั้ง GPG เองไม่สามารถทำเช่นนั้นได้เนื่องจากกระบวนการยุติลงเมื่อทำงานเสร็จ

อีกสิ่งหนึ่งที่ตัวแทนกุญแจสามารถทำได้คืออนุญาตให้ GPG ทำงานบนเครื่องระยะไกลเพื่อรับกุญแจในตัวแทนท้องถิ่น (ซึ่งอาจโหลดพวกเขาจากไฟล์ภายในเครื่องและแจ้งให้คุณใส่รหัสผ่าน) GPG ตัวแทนไม่สามารถทำเช่นนี้ยังจะเป็นคุณลักษณะที่วางแผนไว้ SSH มีตัวแทนส่งต่อเป็นเวลานานมาก (นี่คือเหตุผลที่จะไม่ใช้ gpg-agent สำหรับคีย์ SSH)

GPG 1.x หรือ 2.0.x รู้ว่าตัวแทนกำลังทำงานอยู่เนื่องจากGPG_AGENT_INFOมีการตั้งค่าตัวแปร ตัวแปรนี้มีตำแหน่งของซ็อกเก็ตที่จะสื่อสารกับตัวแทนเช่นเดียวกับ ID กระบวนการของตัวแทน GPG 2.1 จะวางซ็อกเก็ตเอเจนต์ไว้~/.gnupgเสมอ GPG 2.x เริ่มต้นกระบวนการตัวแทนเสมอหากไม่ได้ทำงานอยู่

gpg-agentคุณสามารถเริ่มต้นตัวแทนโดยเพียงแค่การทำงาน หากคุณต้องการให้กระบวนการตัวแทนเป็นส่วนหนึ่งของเซสชันของคุณคุณสามารถแทนที่การร้องขอของผู้จัดการเซสชันโดยgpg-agent my-session-manager; การแจกแจงบางอย่างจะตั้งค่านี้โดยอัตโนมัติ GPG จะเริ่มตัวแทนโดยอัตโนมัติและ GPG 2.1 จะค้นหาตัวแทนที่ทำงานอยู่เพิ่มเติมโดยไม่จำเป็นต้องมีตัวแปรสภาพแวดล้อมดังนั้นคุณไม่จำเป็นต้องเริ่มต้นด้วยวิธีนี้เว้นแต่คุณจะใช้ GPG รุ่นเก่ากว่าหรือใช้ตัวแทนเพื่อเก็บประเภทอื่น ๆ ของคีย์เช่น SSH

คุณสามารถส่งคำสั่งตัวแทนด้วยgpg-connect-agentคำสั่งเชลล์ ส่งkillคำสั่งเพื่อฆ่ากระบวนการตัวแทน (หรือส่งสัญญาณ)

ตัวแทน Gpg มาพร้อมกับ GPG เอง การแจกแจงบางอย่างจะแยกมัน


6
"เมื่อกระบวนการ GPG ต้องการคีย์มันจะติดต่อโปรแกรม gpg-agent ที่ทำงานอยู่ผ่านซ็อกเก็ตและร้องขอกุญแจหากกระบวนการของตัวแทนนั้นมีคีย์มันจะให้ gpg" ทำให้เข้าใจผิดเล็กน้อย เอเจนต์ไม่ได้ระบุคีย์ให้กับกระบวนการไคลเอ็นต์ แต่จะดำเนินการโดยใช้คีย์แทนกระบวนการไคลเอ็นต์ (ไคลเอนต์มีตัวแทนให้บางสิ่งบางอย่างเพื่อเซ็นชื่อเข้ารหัสหรือถอดรหัสและเอเจนต์ทำเช่นนั้น) เมื่อใช้เอเจนต์ซอฟต์แวร์ไคลเอ็นต์ SSH และ GPG ของคุณจะไม่ได้รับการเข้าถึงคีย์จริง
ปีเตอร์ซามูเอลสัน

3
"Gpg-agent ยังไม่สามารถทำสิ่งนี้ได้มันเป็นคุณสมบัติที่วางแผนไว้ SSH มีตัวแทนส่งต่อเป็นเวลานานมาก (นี่คือเหตุผลที่ไม่ใช้ gpg-agent สำหรับคีย์ SSH)" ไม่จริงเลยทีเดียว ตัวแทน gpg ทำงานได้ดีกับการส่งต่อตัวแทน SSH ฉันใช้มันทุกวัน ลูกค้า SSH จัดการการส่งต่อตัวแทน gpg ไม่ได้เกี่ยวข้องกับเรื่องนั้นจริงๆ สิ่งที่ไม่รองรับคือ GPG เองที่จะพูดคุยกับตัวแทนจากระยะไกล
ปีเตอร์ซามูเอลสัน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.