ฉันจะนำเข้าคีย์ RSA SSH ไปยัง GPG เป็นคีย์ส่วนตัว _primary_ ได้อย่างไร


16

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

แต่ฉันจบลงด้วยสิ่งที่ถือว่าเป็น "คีย์ย่อย" นอกจากนี้หากฉันพยายามนำเข้าโดยไม่ต้องสร้างคีย์ GPG มาตรฐาน GPG จะไม่เห็นคีย์ย่อยนี้อีก (ฉันสมมติว่าคีย์ย่อยต้องได้รับการลงนามโดยคีย์หลักก่อน)

ฉันจะใช้คีย์นี้เป็นคีย์หลักใน secring.gpg ได้อย่างไร


คุณหมายถึง " ไพรเวตคีย์ส่วนตัว " ในแง่ใด
MadHatter

คำตอบ:


16

คำตอบง่ายๆคือ: คุณทำไม่ได้

คีย์ SSH และคีย์ GnuPG (จริง ๆ แล้ว OpenPGP) นั้นแตกต่างกันอย่างสิ้นเชิงแม้ว่าโปรโตคอลทั้งสองจะสามารถใช้คู่คีย์ RSA ได้

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

เนื่องจากkasperdค่อนข้างชี้ให้เห็นอย่างชัดเจนจึงต้องมีวิธีหนึ่งในการตีความ (โดยเฉพาะ) ลายเซ็น หากคุณต้องใช้คีย์เดียวกันสำหรับทั้ง PGP และ SSH หากใครบางคนสามารถหลอกคุณให้ลงชื่อข้อความที่สร้างขึ้นเป็นพิเศษ (ซึ่งเป็นความสามารถที่สันนิษฐานได้ในการโจมตีระบบลายเซ็นบางอย่าง) ในครั้งเดียวแม้ว่าระบบทั้งสองจะปลอดภัยในการแยก อาจเป็นไปได้ที่จะสร้างข้อความดังกล่าวในลักษณะที่มีความหมายอย่างหนึ่งในระบบใดระบบหนึ่ง แต่มีความหมายที่แตกต่างกันในอีกระบบหนึ่ง ในตัวมันเองจะเป็นช่องโหว่ ใครจะรู้ แต่ทำไมถึงมีโอกาส?)

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

ฉันไม่คิดว่าการรับรู้ว่ามีการใช้วัสดุหลักเดียวกันทั้งสองอย่างนั้นอาจไม่สำคัญเลยทีเดียวเนื่องจากรหัสสาธารณะนั้นถูกส่งผ่านอย่างชัดเจน

เพียงสร้างคีย์ PGP ใหม่ หากคุณต้องการให้มันทำให้ RSA และมีความยาวเท่ากับคีย์ SSH ของคุณ (ไม่มีบุคคลที่มีสติจะมองเข้าไปใกล้มันมากไปกว่าการตรวจสอบลายนิ้วมือแล้ว) จากนั้นแจกจ่ายกุญแจสาธารณะให้กับคนที่คุณต้องการติดต่อด้วยในฐานะที่เป็นคีย์ PGP มันจะง่ายขึ้นมากสำหรับทุกคนและมีความปลอดภัยมากขึ้นด้วยค่าใช้จ่ายเล็กน้อยจากเอนโทรปีของระบบเอนโทรปีของระบบของคุณซึ่งควรจะเติมใหม่อย่างรวดเร็ว


หากคุณมีหลายคีย์ในคีย์ลับของคุณและต้องการระบุว่าควรใช้คีย์ใดให้ใช้ค่าเริ่มต้นให้ใช้default-keyและอาจเป็นdefault-recipient{,-self}คำสั่งใน ~ / .gnupg / gnupg.conf ของคุณ


1
ฉันเห็นด้วยกับคำตอบนี้ อย่างไรก็ตามมีอีกเหตุผลหนึ่งที่จะไม่ใช้วัสดุหลักเดียวกัน เพื่อเหตุผลด้านความปลอดภัยจะต้องมีวิธีเดียวเท่านั้นในการตีความลายเซ็น ลายเซ็นเดียวกันสามารถตีความได้สองวิธีแตกต่างกัน แม้ว่าทั้ง ssh และ gpg จะปลอดภัยด้วยตัวเอง แต่ฝ่ายตรงข้ามอาจหลอกให้คุณเซ็นข้อความด้วยข้อความหนึ่งแล้วนำลายเซ็นไปใช้กับโปรแกรมอื่นซึ่งอาจมีความหมายแตกต่างกัน
kasperd

@kasperd จุดที่ดี ฉันแก้ไขคำตอบ; ตอนนี้คุณรู้สึกอย่างไร
CVn

มันฟังดูดี
kasperd

1
ฉันคิดว่าคำตอบนี้ไม่ถูกต้องสมบูรณ์: ด้วย monkeysphere มี usecase ซึ่งคุณอาจต้องการให้ปุ่ม OpenSSH ที่มีอยู่เป็นคีย์ย่อยการรับรองความถูกต้องเท่านั้นในคีย์ OpenPGP ส่วนบุคคลของคุณ อย่างน้อยฉันก็อยากจะใช้มันอย่างนั้น
user134450

กุญแจเหล่านี้ไม่แตกต่างกันเลย ข้อมูลเมตาของพวกเขาคือ
foo

5

คุณสามารถแปลง SSH-Key เป็นกุญแจ OpenPGP ด้วยเครื่องมือpem2openpgpจากโครงการ monkeysphere คีย์นี้สามารถนำเข้าโดย gnupg เป็นคู่คีย์ส่วนตัว / สาธารณะทั่วไป เช่นเดียวกับคำตอบอื่น ๆ ที่กล่าวมานี้ไม่ใช่ความคิดที่ดีเพราะ ssh ไม่มีแนวคิดของใบรับรองดังนั้นคุณจึงเพิ่มความสามารถให้กับคีย์ที่มีอยู่ซึ่งไม่เคยมีมาก่อน โดยทั่วไปนี่เป็นสิ่งที่ไม่ต้องใช้ในการเข้ารหัส

ฉันทำไปแล้วด้วยหนึ่งในคีย์ ssh ของฉัน แต่ฉันได้เพิ่มคู่ของคีย์ลงในคีย์ OpenPGP อื่น ๆ ของฉันเป็นคีย์ย่อยที่มีการตั้งค่าสถานะความสามารถเพียงหนึ่งเดียว: การรับรองความถูกต้อง การตั้งค่าสถานะนี้มีไว้สำหรับสถานการณ์เช่นนี้ซึ่งคุณไม่ต้องการเซ็นชื่อหรือเข้ารหัสสิ่งใดด้วยคู่กุญแจ (ความหมาย--encryptและ--signตัวเลือกสำหรับ gnupg) แต่คุณต้องการให้มันอยู่ใน keybox ของคุณเพื่อรับรองความถูกต้องกับ OpenSSH และ gnupg-agent

สำหรับรายละเอียดเพิ่มเติมโปรดดูเอกสารประกอบของลิงสเฟียร์


2

มีเหตุผลที่ดีในการแปลงคีย์รูปแบบ PKCS ปกติเพื่อนำเข้าเป็น gpg

ตัวอย่างเช่นหากคุณต้องการใส่ลงในสมาร์ทการ์ด สิ่งอำนวยความสะดวกที่ gpg มีให้กับคำสั่งบัตรข้อมูลและการแก้ไขบัตรมีประโยชน์มากสำหรับจุดประสงค์นี้ดังนั้นทำไมไม่ใช้มันเป็นเครื่องมือ? สิ่งกีดขวางเพียงอย่างเดียวที่จำเป็นต้องมีคือ: การนำเข้าคีย์จากรูปแบบ PKCS # 8 มาตรฐาน (หรือรูปแบบ "ดิบ" RSA PKCS # 1 รูปแบบ) ลงในที่เก็บคีย์ gpg เพื่อการประมวลผลเพิ่มเติม

ดังนั้น - โปรดคัดค้านคำตอบที่อนุมัติ! :)

คำตอบที่เป็นประโยชน์จริง ๆ กับคำถามประเภทนี้อยู่ที่นี่: /unix/276317/how-can-i-import-a-key-in-pem-format-not-openpgp-into -gpg


1

ใช้สิ่งนี้กับ Ubuntu 16.04 หรือ Windows WSL

sudo apt install -y monkeysphere
cat key.pem | PEM2OPENPGP_USAGE_FLAGS=authenticate pem2openpgp "Key <key@example.com>" > key.pgp

นำเข้าบัตร สามารถทำได้บน Windows หรือ Linux

gpg --import key.gpg

ย้ายไปที่การ์ด

ค้นหาตัวระบุลายเซ็นที่สำคัญ

gpg --list-key

ย้ายคีย์การรับรองความถูกต้องไปที่การ์ด

gpg --edit-key FFFFFFFFFFF
keytocard

เลือกหมายเลขสำหรับช่องรับรองความถูกต้อง

คุณทำเสร็จแล้ว

อย่าลืมลบกุญแจออกจากพวงกุญแจ gpg หากคุณใช้การ์ด ใช้ตัวระบุคีย์จากด้านบน

gpg --delete-secret-key FFFFFFFFFFF

อื่น ๆ

ไม่จำเป็น แต่อาจมีประโยชน์ในการรับคีย์ในรูปแบบข้อความตาม pgp

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