วิธีการส่งออกคีย์ ASC ส่วนตัว / ลับเพื่อถอดรหัสไฟล์ GPG


89

ความเป็นมา: เจ้านายของฉันพยายามส่งออกคีย์ ASC ให้ฉันด้วยส่วนสาธารณะและส่วนตัว แต่เมื่อใดก็ตามที่ฉันได้รับไฟล์ส่วนส่วนตัวจะไม่โหลดขึ้นมาและจะไม่ถอดรหัสไฟล์ใด ๆ

เราได้ลองส่งออกคีย์ ASC โดยใช้:

  • Windows Application Kleopatra 2.1 (รวมอยู่ใน gpg4win)
  • Windows Application GNU Privacy Assistant (รวมอยู่ใน gpg4win)

            Error: "Decryption failed. Secret Key Not available." 
    

คุณจะส่งออกคีย์ asc ลับหรือส่วนตัวเพื่อถอดรหัสไฟล์ gpg ได้อย่างไร?

คำตอบ:


186

คุณสามารถส่งออกคีย์ส่วนตัวกับเครื่องมือบรรทัดคำสั่งจากจีพีจี ทำงานบน Windows-shell ใช้คำสั่งต่อไปนี้:

gpg --export-secret-keys

ส่งออกปกติที่มี--exportจะไม่รวมถึงคีย์ส่วนตัวใด ๆ --export-secret-keysดังนั้นคุณต้องใช้

แก้ไข:

เพื่อสรุปข้อมูลที่ให้ไว้ในความคิดเห็นของฉันนี่คือคำสั่งที่อนุญาตให้คุณส่งออกคีย์เฉพาะที่มี ID 1234ABCD ไปยังไฟล์ secret.asc:

gpg --export-secret-keys --armor 1234ABCD > secret.asc

คุณสามารถค้นหา ID ที่ต้องการได้โดยใช้คำสั่งต่อไปนี้ ID คือส่วนที่สองของคอลัมน์ที่สอง:

gpg --list-keys

ในการส่งออกคีย์ลับเฉพาะ 1 รายการแทนที่จะเป็นคีย์ลับทั้งหมด:

gpg --export-secret-keys keyIDNumber > exportedKeyFilename.asc

keyIDNumber คือหมายเลขของรหัสคีย์สำหรับคีย์ที่คุณต้องการส่งออก


4
@ ไบรอัน: นี่จะเป็นการถ่ายโอนคีย์ไปที่คอนโซล หากคุณต้องการเก็บไว้ในไฟล์คุณสามารถเปลี่ยนเส้นทางเอาต์พุตไปยังชื่อไฟล์ที่กำหนดเอง ("gpg --export-secret-keys> secret.asc")
Demento

5
@ ไบรอัน: สิ่งนี้ให้ผลลัพธ์ใน ASCII ไม่ใช่ไบนารี หากคุณเก็บไว้ในไฟล์ก็ไม่สำคัญ แต่เมื่อคุณต้องการส่งผ่านวิธีอื่นใดเวอร์ชัน ASCII จะจัดการได้ง่ายกว่ามาก (ส่งแบบอินไลน์ในอีเมลเช่น)
Demento

8
บางทีคุณอาจต้องการนำคีย์ลับของคุณไปที่อื่น ในกรณีนี้คุณควรเข้ารหัสข้อมูลที่ส่งออก: "gpg --export-secret-keys keyIDNumber | gpg -c> ที่เข้ารหัส" ถอดรหัสด้วย "gpg -o unencrypted encrypted"
rockdaboot

3
คีย์ที่ส่งออกจาก GnuPG จะยังคงเข้ารหัสอยู่ (ซึ่งเป็นสาเหตุที่คุณไม่จำเป็นต้องป้อนข้อความรหัสผ่านของคีย์ส่วนตัว) ดังนั้นจึงไม่จำเป็นต้องเข้ารหัสอีกครั้ง
เรือเฟอร์รี่ Boender

1
@FerryBoender คุณแน่ใจเหรอ?
Josh Habdas

32

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

gpg --edit-key (keyIDNumber)
gpg> trust

Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)

  1 = I don't know or won't say
  2 = I do NOT trust
  3 = I trust marginally
  4 = I trust fully
  5 = I trust ultimately
  m = back to the main menu

และเลือก 5 เพื่อเปิดใช้งานคีย์ส่วนตัวที่นำเข้านั้นเป็นหนึ่งในคีย์ของคุณ


18

ดูการรักษาโดย Dark Otter

https://montemazuma.wordpress.com/2010/03/01/moving-a-gpg-key-privately/

หากไซต์หยุดทำงานให้ใช้ข้อมูลสำรอง archive.org:

https://web.archive.org/web/20170518155052/https://montemazuma.wordpress.com/2010/03/01/moving-a-gpg-key-privately/

ซึ่งรวมถึงวิธีการโอนคีย์ที่ปลอดภัยพอสมควร คุณสามารถใส่คำแนะนำนั้นลงในเชลล์สคริปต์ที่แสดงด้านล่างเพื่อใช้ซ้ำได้

ขั้นแรกให้รับ KEYID ที่คุณต้องการจากรายการที่แสดงโดย

$ gpg -K

จากรายการผลลัพธ์ให้บันทึก KEYID (เลขฐานสิบหก 8 ตัวตามหลังวินาที) ที่คุณต้องการสำหรับการถ่ายโอน

จากนั้นเรียกใช้เชลล์ที่ทดสอบ "export_private_key" ในบัญชีแรกและสร้าง pubkey.gpg + keys.asc ของคุณ ต่อจากนั้นให้เรียกใช้บัญชีที่สอง "import_private_key" นี่คือเนื้อหาที่แสดงพร้อม cat (คัดลอกและวางเนื้อหา):

$ cat export_private_key 
gpg -K
echo "select private key"
read KEYID
gpg --output pubkey.gpg --export $KEYID
echo REMEMBER THE COMING PASS-PHRASE
gpg --output - --export-secret-key $KEYID | \
   cat pubkey.gpg - | \
   gpg --armor --output keys.asc --symmetric --cipher-algo AES256
ls -l pubkey.gpg keys.asc
####################  E X P O R T _ P R I V A T E _ K E Y  #####################

ตอนนี้โอนโดยใช้ "pubkey.gpg" (หากจำเป็น) และ "keys.asc" ส่วนตัวไปยังบัญชีที่สองและเรียกโปรแกรมที่แสดงด้านล่าง

$ cat import_private_key 
gpg --no-use-agent --output - keys.asc | gpg --import
###################  I M P O R T _ P R I V A T E _ K E Y  ######################

ในจิตวิญญาณของนาก "และที่ควรจะเป็น"


ขอบคุณสำหรับสคริปต์ที่รวมทั้งคีย์สาธารณะและคีย์ส่วนตัวไว้ในไฟล์ที่มีการป้องกันข้อความรหัสผ่านไฟล์เดียว ทำให้ชีวิตดีขึ้นมาก!
codekoala

ตัวเลือก--no-use-agentล้าสมัยใน gpg เวอร์ชัน 2
Josh Habdas

9

ฉันคิดว่าคุณยังไม่ได้นำเข้าคีย์ส่วนตัวตามที่ข้อความแจ้งข้อผิดพลาดในการนำเข้าคีย์สาธารณะ / ส่วนตัวจาก gnupg:

gpg --import mypub_key
gpg --allow-secret-key-import --import myprv_key

ฉันถามเกี่ยวกับการส่งออกจากคอมพิวเตอร์ที่ใช้งานได้ ... คุณสามารถนำเข้าคีย์ได้ก็ต่อเมื่ออยู่บนเซิร์ฟเวอร์ภายใน
Brian McCarthy

@Brian McCarthy: คุณกำลังพยายามจะพูดอะไร?
SIFE

เราจำเป็นต้องนำเข้าคีย์สาธารณะจริงๆหรือไม่หากมีการนำเข้าคีย์ส่วนตัวไปแล้ว ตามที่ฉันเข้าใจคีย์สาธารณะสามารถสร้างขึ้นจากคีย์ส่วนตัวอะไรก็ได้
farhany

@farhany ฉันคิดว่าใช่เพราะคุณจะต้องใช้เมื่อลงชื่อในข้อความของคุณ
SIFE

6

สิ่งนี้ได้ผลสำหรับฉัน:

   gpg -a --export-secret-keys > exportedKeyFilename.asc 

คุณสามารถตั้งชื่อ keyfilename.asc ด้วยชื่อใดก็ได้ตราบเท่าที่คุณยังคงใช้นามสกุล. asc
คำสั่งนี้คัดลอกคีย์ลับทั้งหมดบนคอมพิวเตอร์ของผู้ใช้ไปยัง keyfilename.asc ในไดเร็กทอรีการทำงานที่เรียกใช้คำสั่ง

ในการส่งออกคีย์ลับเฉพาะ 1 รายการแทนที่จะเป็นคีย์ลับทั้งหมด:

   gpg -a --export-secret-keys keyIDNumber > exportedKeyFilename.asc

keyIDNumber คือหมายเลขของรหัสคีย์สำหรับคีย์ที่คุณต้องการส่งออก


1
คุณสามารถแสดงรายการคีย์ทั้งหมดที่มีด้วย "--list-keys" คอลัมน์ที่สองจะมีรหัสเช่น "2048g / 1234ABCD" ค้นหาคีย์ที่ต้องการและส่งออกด้วย "gpg --export-secret-keys 1234ABCD> secret.asc" ซึ่งแน่นอนว่าจะเปลี่ยน 1234ABCD ด้วย ID ที่ถูกต้อง คุณยังสามารถเพิ่มแฟล็ก "-a" เขียนเอาต์พุตด้วยอักขระ ASCII ในกรณีที่เอาต์พุตไบนารีทำให้เกิดปัญหา
Demento

@demento ขอบคุณสำหรับข้อเสนอแนะเพิ่มเติม ... ไม่ดีเพิ่มคำตอบนั้น
Brian McCarthy

2
คุณยังต้องการ -a ถ้าคุณต้องการ asc จริงๆ
RichieHH

คุณจะนำเข้าคอมพิวเตอร์เครื่องอื่นได้อย่างไร
Natim

@Natim ฉันคิดว่าคุณใช้exportedKeyFilename.ascคอมพิวเตอร์เครื่องอื่นแล้วทำgpg --allow-secret-key-import --import exportedKeyFilename.ascในไดเร็กทอรีพร้อม.ascไฟล์ ดู: unix.stackexchange.com/questions/184947/…
Brōtsyorfuzthrāx

5

คล้ายกับคำตอบของ @Wolfram J นี่คือวิธีการเข้ารหัสคีย์ส่วนตัวของคุณด้วยข้อความรหัสผ่าน :

gpg --output - --armor --export $KEYID | \
    gpg --output private_key.asc --armor --symmetric --cipher-algo AES256

และวิธีการที่เกี่ยวข้องในการถอดรหัส:

gpg private_key.asc

5

1. ส่งออกรหัสลับ (นี่คือสิ่งที่เจ้านายของคุณควรทำให้คุณ)

gpg --export-secret-keys yourKeyName > privateKey.asc

2. นำเข้ารหัสลับ (นำเข้าคีย์ส่วนตัวของคุณ)

gpg --import privateKey.asc

3. ยังไม่เสร็จสิ้นคุณยังต้องเชื่อมั่นคีย์ในที่สุด คุณจะต้องตรวจสอบให้แน่ใจว่าในที่สุดคุณก็เชื่อมั่นในกุญแจ

gpg --edit-key yourKeyName

ใส่ trust, 5, y แล้วเลิก

ที่มา: https://medium.com/@GalarnykMichael/public-key-asymmetric-cryptography-using-gpg-5a8d914c9bca

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