mutt: ใช้ gpgme หรือ gpg แบบคลาสสิค?


13

วิกิพีเดียของ Mutt ในการรวม GnuPGและสถานที่อื่น ๆ (เช่นค่าเริ่มต้นบนเดเบียน) ใช้วิธีการเชื่อมต่อ mutt กับ gnupg แบบคลาสสิก นั่นคือหนึ่งกำหนดพวงของคำสั่งเพื่อโทรgpgโดยตรง ในทางตรงกันข้ามมีห้องสมุดที่เรียกว่าgpgmeซึ่งพยายามที่จะสร้างมาตรฐานที่แน่นอน การปิดเว็บสำหรับ "mutt gpgme" ไม่ได้ให้ผลลัพธ์ที่มีประโยชน์กับฉันเลย

อะไรคือข้อดีและข้อเสียของการใช้set crypt_use_gpgme=yesใน.muttrc? ทำไมมันจึงไม่ค่อยใช้

คำตอบ:


8

ผู้คนจำนวนมากไม่เข้าใจ GPGME จริง ๆ และอาจไม่ช่วยว่าเอกสารที่มีอยู่นั้นเป็นคำอธิบายรหัสที่เขียนในเวลานั้น อย่างไรก็ตามจะอนุญาตการเข้าถึงโดยสมบูรณ์หรือใกล้ทางโปรแกรมโดยสมบูรณ์ไปยังชุดความเป็นส่วนตัวของ GNU ทั้งหมดและควรเปิดใช้งานการเข้าถึงสิ่งต่าง ๆ เช่น libassuan, gpg-agent และส่วนประกอบอื่น ๆ อีกมากมาย ซึ่งเป็นสาเหตุโดยค่าเริ่มต้นมันยังรวมถึงการใช้งาน S / MIME ซึ่งเกือบจะไม่มีใครนอก บริษัท ไม่กี่แห่งที่ร้องเสียงดังในช่วงปลายยุค 90 ที่ใช้งาน

ปัจจุบัน GPGME มีฟังก์ชั่นแยกต่างหาก 500 รายการขึ้นไปและครอบคลุมทุกอย่างที่คุณทำกับ GPG ในบรรทัดคำสั่ง อย่างไรก็ตามมันก็มีบางส่วนของตัวเลือกการออกแบบก่อนหน้านี้ซึ่งได้รับการพิจารณาในภายหลังว่าไม่ใช่ทิศทางที่ถูกต้อง ตัวอย่างเช่นนี่เป็น API ที่มีชิ้นส่วนขนาดใหญ่ของ GTK 2 อยู่ในนั้น เห็นได้ชัดว่าสิ่งนี้ต้องดำเนินการ (และเมื่อเวลาอนุญาต) ปัญหาอีกประการหนึ่งที่มีอยู่ในปัจจุบันอาจเป็นอุปสรรคที่ใหญ่ที่สุดในการนำไปใช้คือเมื่อมีคนพูดว่า "API" ตัวแปลงสัญญาณส่วนใหญ่ไม่คิดทันทีว่าไฟล์ส่วนหัว C เพื่อคอมไพล์ด้วยรหัสของตัวเองเพื่อเข้าถึงสิ่งต่างๆ มาเจอกันวันนี้คนส่วนใหญ่กำลังคิดถึงสิ่งที่สงบหรืออย่างน้อยก็ให้พวกเขาโต้ตอบกับข้อมูลในรูปแบบ JSON GPGME นั้นห่างจากสิ่งนั้นมาก ' เป็นไปได้ที่จะได้รับ โปรดทราบว่าในขณะที่มันควรจะเป็นไปได้ที่จะทำให้มันเล่นอย่างกับ JSON มันไม่สามารถสงบเพราะปุ่มแก้ไขไม่สามารถ การจัดการคีย์ผ่านทางเว็บรวมถึงการขอปัญหา

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

ในทางกลับกันสำหรับสิ่งดี ๆ ทุกอย่างที่มุทท์ทำมันก็ทำสิ่งที่ค่อนข้างน่าตกใจเช่นกัน ตัวอย่างเช่นไม่ว่าจะใช้ GPGME หรือไม่ก็ตามไม่มีเหตุผลใด ๆ ที่ Mutt จะแคชข้อความรหัสผ่าน ในสถานการณ์ใดมันควรจะส่งมอบให้กับ GPG (มีหรือไม่มีตัวแทน gpg) ในทำนองเดียวกันมันควรจะเคารพพารามิเตอร์การกำหนดค่าใน~/.gnupg/gpg.confไฟล์ (และอื่น ๆ ในไดเรกทอรีนั้น) แน่นอนว่าการตั้งค่ารหัสคีย์สำรองสำหรับบัญชีที่แตกต่างกันเพื่อเปลี่ยนวิธีการเรียกใช้คำสั่งหรือแม้กระทั่งความสามารถในการระบุไฟล์กำหนดค่าทางเลือกหรือไดเรกทอรีทั้งหมด (เช่นgpg --homedir ~/.gnupg-work/gpg.conf) ในขณะที่สิ่งต่าง ๆ ยืน Mutt เสียเวลาพยายามแก้ปัญหาที่โปรแกรมได้โต้ตอบกับมันแล้วเช่นข้อความรหัสผ่านหรือการจัดการคีย์ แต่ไม่อนุญาตให้เข้าถึงคุณลักษณะปกติของ GPG ซึ่งเป็นเรื่องที่ยอดเยี่ยมสำหรับอีเมล เช่นใช้กลุ่มบรรทัดสำหรับผู้รับหลายคนหรือแทนที่การเลือกคีย์สำหรับผู้รับเฉพาะ (เพราะมีผู้ชายคนหนึ่งที่สูญเสียรหัสลับหรือลืมรหัสผ่านของเขาเสมอและตอนนี้คุณมีกุญแจสาธารณะ 15 อันพร้อมที่อยู่เดียวกับ UID และ พฤติกรรมเริ่มต้นคือการเลือกคู่แรกซึ่งมีโอกาสมากที่จะไม่ถูกต้อง) Emacs นั้นดีขึ้นเล็กน้อย แต่ถึงอย่างนั้นก็ล้มเหลวในการรับgpg.confไฟล์ซึ่งมักจะตอบคำถามที่ต้องการโดยอัตโนมัติ

ตอนนี้สำหรับบางสิ่งที่มีประโยชน์และเกี่ยวข้องกันมากกว่านี้เล็กน้อย GPGME มาพร้อมกับสิ่งที่ไม่มีเอกสารอีกเล็กน้อยที่เรียกว่า gpgme-tool มันเป็นส่วนต่อประสานพื้นฐานกับ GPGME ซึ่งจะทำงานบนซ็อกเก็ต UNIX (และแน่นอนว่าคุณสามารถใช้ ncat หรืออะไรก็ได้ที่จะทำให้มันนั่งบนพอร์ตเครือข่ายถ้าคุณต้องการ) แม้ว่ามันจะไม่มีเอกสาร แต่มันก็อธิบายตนเองได้ค่อนข้างดีถ้าคุณเรียกใช้และโต้ตอบกับมันซักครู่แล้วเริ่มด้วยคำสั่งช่วยเหลือ อีกทางเลือกหนึ่งใช้งานได้ดี:

echo help | gpgme-tool > gpgme-tool-cheatsheet.txt

มันจะทำพื้นฐานทั้งหมดอย่างมีความสุข (เข้ารหัสถอดรหัสลงนามตรวจสอบเปลี่ยนวลีรหัสผ่านสร้างคีย์รายการคีย์รายการลับค้นหาค้นหาคีย์เฉพาะหรือเลือกพวกเขา ฯลฯ ) หากคุณต้องการดูรูปแบบ XML "ซ่อน" ลอง:

echo "KEYLIST --secret-only" | gpgme-tool > secret-key-list.xml

นั่นจะไม่ส่งออกคีย์ลับเพียงแค่แสดงรายการและข้อมูลเกี่ยวกับพวกเขา นอกจากนี้มันจะส่งออกด้วย cruft รูปแบบผลลัพธ์บางอย่างที่จะต้องถูกกรองออกก่อนที่สิ่งใดจะจดจำได้ว่าเป็น XML (ลบบรรทัดบนสุดอักขระสองตัวแรกของแต่ละบรรทัดถัดมาและ% 0A จากจุดสิ้นสุดของแต่ละบรรทัด ) อย่างไรก็ตามเครื่องมือ gpgme อาจให้แนวคิดที่ดีกว่าว่า GPGME สามารถทำอะไรได้บ้าง ยกตัวอย่างเช่นการผูก PyME Python สำหรับ GPGME พยายามจับคู่ฟังก์ชั่น GPGME โดยอัตโนมัติ (และมักจะประสบความสำเร็จโดยไม่มีปัญหา) รายการคุณลักษณะปัจจุบันใน pyme.core.pygpgme มาถึง 534 เปรียบเทียบกับบรรทัดคำสั่งและ GPG 1.4.20 มี 322 ตัวเลือกในขณะที่ 2.1.11 มี 347 (ฉันข้าม 2.0 ดังนั้นฉันไม่สามารถตรวจสอบได้ แต่ควร อยู่ที่ใดที่หนึ่งระหว่างสองคนนี้)

สำหรับคำตอบก่อนหน้านี้ที่อ้างถึงการจับคู่คำสั่งสำคัญนั้นควรได้รับแรงผลักดันจากตัวเลือกการกำหนดค่าเพียงอย่างเดียวหรือไม่และ Mutt "อนุญาตให้" เข้าถึง GPG ได้อย่างสมบูรณ์หรือไม่ ขณะนี้ฉันใช้ Mutt กับ GPGME และทั้งสองฟังก์ชั่นที่กล่าวถึง (คีย์อีเมลและคีย์แยก) นั้นใช้ได้แม้ว่า Mutt จะมีปัญหาในการรับรู้ PGP / เนื้อหาในบรรทัดถ้ามันได้กำหนดหรือเลือกประเภทเนื้อหาข้อความ / ธรรมดาจาก ที่ไหนสักแห่ง. เมื่อเกิดเหตุการณ์นั้นขึ้นมาใช่มันมักจะจำเป็นต้องเปลี่ยนไปใช้ Emacs หรืออะไรบางอย่าง ถึงกระนั้นก็ดูเหมือนว่าจะมีปัญหากับวิธีการ Mutt ตรวจสอบว่าเนื้อหาเป็นเพียงข้อความหรือวิธีการตรวจสอบเนื้อหารูปแบบ OpenPGP แม้ว่าฉันจะไม่ชอบอะไรที่ดีไปกว่าแค่บอกว่าเราทุกคนควรใช้ PGP / MIME แทน (และเราควรจะเป็น)

โดยทั่วไปดูเหมือนว่า Mutt อาศัยเพียงข้อความที่เป็น MIME แบบหลายส่วนโดยมีส่วนใดส่วนหนึ่งที่ประกอบด้วยคีย์ลายเซ็นและ / หรือเนื้อหาที่เข้ารหัสไว้เพื่อทำสิ่งใด ๆ ด้วย ไม่เพียงแค่ค้นหาผ่านอีเมลธรรมดาที่กำลังค้นหาเนื้อหาที่ตรงกัน แต่นั่นไม่ใช่ความผิดของ GPG หรือ GPGME การแก้ปัญหาคือการเพิ่มคุณสมบัติเหล่านั้นให้กับ Mutt หรือเปิดข้อความในบางสิ่งที่มีความสามารถนั้น (เช่น Emacs กับ EPA / EasyPG ซึ่งควรจะเปิดใช้งานตามค่าเริ่มต้นในวันนี้) หรือไพพ์ข้อความออกไปยังคำสั่งโดยตรง (หรือ gpgme-tool ถ้าคุณชอบ แต่เมื่อไปป์ไลน์มันง่ายกว่าที่จะไปที่คำสั่งปกติ)

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

ในขณะที่คนเหล่านั้นที่อาศัย แต่เพียงผู้เดียวในแพ็คเกจที่ได้รับจากการแจกจ่ายที่เลือกไว้จะต้องอยู่ภายใต้การดูแลรักษาของแพ็คเกจเหล่านั้นและพวกเขาอาจหรืออาจไม่เข้าใจข้อกำหนดของ GPG และ GPGME ที่ทำงานร่วมกัน ตัวอย่างเช่นแพคเกจ MacPorts สำหรับ GPGME ถูกตั้งค่าให้ขึ้นอยู่กับ GPG 2.0.x ซึ่งจะถูกตั้งค่าให้ขัดแย้งกับ GPG 2.1.x ดังนั้นคนส่วนใหญ่ที่ติดตั้ง 2.1 ก็ไม่สามารถติดตั้ง GPGME ได้แม้ว่าพวกเขาจะทำงานร่วมกันอย่างชัดเจน การให้ GPGME ทำงานในสถานการณ์นั้นจำเป็นต้องทำสิ่งต่าง ๆ ที่ MacPort แนะนำ (การรวบรวมสิ่งต่างๆนอกระบบการจัดการพอร์ต แต่ภายใน/opt/local) ลีนุกซ์บางรุ่นอาจมีปัญหาคล้ายกัน

ดังนั้นหากคุณกำลังใช้ PGP / MIME เพียงอย่างเดียวไม่ควรมีปัญหากับการใช้การรวม GPGME และจะหมายความว่าคุณไม่จำเป็นต้องกำหนดค่าคำสั่งเฉพาะลงใน.muttrcไฟล์ของคุณ หากคุณจัดการกับ PGP / in-line คุณจะพบปัญหา แต่ก็ไม่สามารถหลีกเลี่ยงได้ด้วยวิธีใดก็ตามกับ Mutt ดังนั้นฉันขอแนะนำให้ใช้ GPGME หากคุณสามารถทำได้

การปฏิเสธความรับผิด: ฉันเกี่ยวข้องกับการทำงาน dev เพื่อสร้าง API เป็น API สำหรับผู้ที่ไม่ใช่ C ทั้งหมดเพื่อให้สามารถใช้สิ่งที่โพสต์ยกเครื่อง ฉันย้ายพอร์ต PyME 0.9 จาก Python 2 ไปยัง Python 3 (ปัจจุบันอยู่ในสาขาของ GPGMEและเฉพาะรุ่น Python 2 เท่านั้นที่มีให้ผ่าน PyPI และ pip)

อัปเดต: พอร์ตของ PyME ไปยัง Python 3 อยู่ในสาขาหลักของ GPGME และมีให้ใน PyPI เป็น pyme3


3

เพราะฟังก์ชั่นบางฟังก์ชั่นไม่ทำงานโดยตรงกับgpgmeอินเตอร์เฟส

ตัวอย่างเช่นฟังก์ชั่นต่อไปนี้ไม่ทำงานในสภาพแวดล้อมของฉัน:

^K      extract-keys
<Esc>k  mail-key

gpgmeเมื่อทุกฟังก์ชั่นพื้นฐานที่สำคัญกำลังทำงานกับ


0

พวก crypto เป็นคนหวาดระแวงและเข้าใจบรรทัดคำสั่ง ห้องสมุดใหม่และยังไม่ทดลอง แต่มีข้อได้เปรียบทางทฤษฎี ลองคุณสามารถเป็นหุ่นทดสอบของเรา


1
สิ่งนี้ไม่ได้ให้คำตอบสำหรับคำถาม หากต้องการวิจารณ์หรือขอคำชี้แจงจากผู้แต่งโปรดแสดงความคิดเห็นใต้โพสต์ของพวกเขา
Anthon

คำถามคือทำไมไม่อย่างไร ตอนนี้เป็นที่ยอมรับกันแล้วว่าทำไมในด้านจิตวิทยามากขึ้น ...
hildred

1
ห้องสมุดไม่มีที่อยู่ใกล้กับที่ใหม่ แต่ก็มีความมุ่งมั่นที่จะย้อนกลับไปในปี 2000 อาจจะเร็วกว่านี้
Ben
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.