วิธีการนำเข้าคีย์ gpg ลับ (คัดลอกจากเครื่องหนึ่งไปยังอีกเครื่อง)?


153

ฉันพยายามคัดลอกคีย์ gpg ของฉันจากเครื่องหนึ่งไปยังอีกเครื่อง

ฉันทำ:

gpg --export ${ID} > public.key
gpg --export-secret-key ${ID} > private.key

ย้ายไฟล์ไปที่เครื่องใหม่แล้ว:

gpg --import public.key
gpg: nyckel [ID]: public key [Name, e-mail] was imported
gpg: Total number of treated keys: 1
gpg:                 imported: 1  (RSA: 1)

gpg --allow-secret-key-import private.key
sec  [?]/[ID] [Creation date] [Name, e-mail]
ssb  [?]/[SUB-ID] [Creation date]

ทุกอย่างดูดีสำหรับฉัน แต่แล้ว:

$ gpg -d [file].gpg
gpg: encrypted with 4096-bit RSA-key, id [SUB-ID], created [Creation date]
  [Name, e-mail]
gpg: decryption failed: secret key not accessible

ดังนั้นข้อความแสดงข้อผิดพลาดบอกว่าไฟล์นั้นได้รับการเข้ารหัสด้วย [SUB-ID] ซึ่งการนำเข้าคีย์ลับดูเหมือนจะบอกว่ามันได้นำเข้าแล้ว ([SUB-ID] ในข้อความทั้งสองเหมือนกัน)

เห็นได้ชัดว่าฉันทำอะไรผิด แต่ฉันไม่รู้ว่าทำอะไร

คำตอบ:


164

คุณต้องเพิ่มลง--importในบรรทัดคำสั่งเพื่อนำเข้าคีย์ส่วนตัว คุณไม่จำเป็นต้องใช้--allow-secret-key-importธง ตามหน้า man: "นี่เป็นตัวเลือกที่ล้าสมัยและไม่ได้ใช้ทุกที่"

gpg --import private.key

โอกาสใด ๆ ที่คุณจะรู้ว่าทำไมgpg2 -e -r [ID]พูดว่า "ไม่มีการรับประกันคีย์นี้เป็นของผู้ใช้ที่มีชื่อ"? ฉันหวังว่าฉันจะรวมไว้ในคำถามเดิม แต่ฉันสังเกตเห็นเพียงในภายหลัง
user50849

1
GnuPG รักษาฐานข้อมูลความน่าเชื่อถือซึ่งใช้ในการตัดสินใจว่าจะไว้วางใจคีย์ใดมาก ตัวอย่างเช่นเชื่อใจกุญแจของคุณเองอย่างน้อยที่สุดกุญแจที่ไม่ได้ลงนามโดยตรงหรือโดยอ้อมกับกุญแจที่เชื่อถือได้น้อยที่สุด หลังจากที่คุณเพิ่งนำเข้าสู่ฐานข้อมูลเปล่าอาจไม่มีคีย์ใดเชื่อถือเลย ฐานข้อมูลความน่าเชื่อถือนี้แยกต่างหากจากฐานข้อมูลหรือตัวเองดังนั้นการนำเข้าคีย์ไม่ทำให้พวกเขาเชื่อถือได้เว้นแต่พวกเขาจะลงนามโดยคีย์ที่เชื่อถือได้แล้วบางส่วน คุณต้อง stell GnuPG ว่าต้องการให้คีย์ใดเชื่อถือแยกต่างหาก
Celada

3
@Celeda ขอบคุณด้วย --edit-key และคำสั่ง trust ที่ฉันจัดการเพื่อรับคีย์ที่เชื่อถือได้ เนื่องจากคำถามเดิมของฉันคือวิธีการคัดลอกคีย์จากเครื่องหนึ่งไปยังอีกเครื่องฉันคิดว่าควรเพิ่มบางอย่างลงในคำตอบของคุณ ฉันไม่ต้องการแก้ไขคำตอบของคุณเองและดูเหมือนคุณจะรู้มากกว่าฉันเกี่ยวกับเรื่องนี้
user50849

ฉันไม่รู้สึกว่าฉันเข้าใจ trustdb ดีพอที่จะพูดถึงมันในคำตอบของฉัน ฉันดีใจที่คุณสามารถใช้มันได้โดยใช้คำแนะนำที่คลุมเครือที่ฉันให้ไว้ในความคิดเห็นของฉัน
Celada

ตกลงฉันตั้งชื่อคำถามเดิมใหม่เพื่อให้เหมาะสมกับคำตอบโดยเฉพาะ ด้วยวิธีนี้ฉันสามารถถามคำถามที่น่าเชื่อถือแยกต่างหาก ขอบคุณสำหรับความช่วยเหลือ :)
user50849

81

ด้านบนเป็นเพียงคำตอบบางส่วน คำตอบที่สมบูรณ์คือ:

gpg --import private.key
  • รับ KEYID (เช่นFA0339620046E260) จากผลลัพธ์:

    gpg --edit-key {KEY} trust quit
    # enter 5<RETURN>
    # enter y<RETURN>
    
  • หรือใช้คำสั่งอัตโนมัติด้านล่าง:

    expect -c "spawn gpg --edit-key {KEY} trust quit; send \"5\ry\r\"; expect eof"
    

สุดท้ายตรวจสอบที่สำคัญที่เป็นที่เชื่อถือได้ในขณะนี้กับ[ultimate]แทน[unknown]

gpg --list-keys

6
นี่ควรเป็นคำตอบที่ยอมรับได้ สมบูรณ์มากขึ้น
เบ็นลินด์เซย์

คำสั่งพิเศษเหล่านี้ทำอะไร?
Steiny

@Steiny มันทำให้คีย์เชื่อถือได้กับ [ultimate] แทน [ไม่ทราบ] gpgtools.tenderapp.com/kb/faq/…
cmcginty

0

ฉันกำลังนำเข้าจากข้อมูลสำรองที่มี gpg เวอร์ชันเก่า เนื่องจากคอมพิวเตอร์เก่าไม่พร้อมใช้งานมีเพียงการสำรองข้อมูลเท่านั้นฉันจึงไม่สามารถส่งออกได้ก่อน นี่คือสิ่งที่ได้ผลสำหรับฉัน

gpg --import old_home_dir/.gnupg/pubring.gpg
gpg --import old_home_dir/.gnupg/secring.gpg

หากคุณต้องการนำเข้าคีย์ลับโดยไม่ต้องป้อนวลีรหัสผ่านทันทีให้ใช้--batchตัวเลือก

ในการตรวจสอบกุญแจสาธารณะ:

gpg --list-keys

วิธีตรวจสอบรหัสลับ:

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