วิธีจัดการคีย์ GPG ในหลาย ๆ ระบบ?


103

ฉันยังใหม่กับการใช้ GnuPG และพยายามเข้าใจวิธีการใช้งานที่ดีที่สุด ฉันได้อ่านคำอธิบายสั้น ๆ ที่เข้าใจง่ายของ GPG / PGP สำหรับคนที่ไม่ใช้เทคนิคหรือไม่ แต่ไกด์ส่วนใหญ่อธิบาย PGP ด้วยมุมมองของเครื่องเดียว

ฉันต้องการใช้ GnuPG บนอุปกรณ์คอมพิวเตอร์สามเครื่อง: พีซี Linux, แล็ปท็อป Linux และโทรศัพท์ Android

กรณีการใช้งานขั้นพื้นฐานคือการเข้ารหัส / ถอดรหัสอีเมลที่จัดการโดยบริการ IMAP ดังนั้นอุปกรณ์ทั้งหมดต้องมีรหัสส่วนตัวที่เหมือนกันสำหรับการถอดรหัส

ฉันคิดว่าตัวเลือกของฉันคือ:

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

  2. สร้างคีย์หลัก (ด้วย --gen-key) เพื่อแสดงตัวตนของฉันจากนั้นสร้างคีย์สำรองที่แยกต่างหาก (อีกครั้งด้วย --gen-key) สำหรับการเข้ารหัส / ถอดรหัสอีเมลและเซ็นชื่อด้วยรหัสหลัก อดีตอยู่บนพีซีของฉันเท่านั้นส่วนหลังจะกระจายไปยังแต่ละอุปกรณ์ ตราบใดที่อุปกรณ์มือถือของฉันไม่ได้ถูกบุกรุกคีย์ที่ใช้แล้วทิ้งจะยังคงใช้งานได้

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

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

ฉันมีแนวโน้มที่จะสูญเสียแล็ปท็อปหรือโทรศัพท์ของฉันมากกว่าพีซี หากการสูญเสีย == ประนีประนอมแล้วฉันควรจะสูญเสียคู่คีย์ที่ใช้แล้วทิ้ง (ซึ่งฉันสามารถเพิกถอนได้) กว่าคู่คีย์หลักของฉัน ฉันสามารถมอบความไว้วางใจของมาสเตอร์คีย์ของฉันให้กับคีย์ที่ใช้แล้วทิ้งใหม่ได้เสมอ

ขออภัยสำหรับคำถามที่ยาวมาก ๆ :-)

TL; DR

เป็นรหัสผ่านป้องกันที่เพียงพอสำหรับการจัดเก็บของฉันมาสเตอร์คีย์ส่วนตัวในอุปกรณ์หลาย?

แผนของฉันสำหรับตัวเลือก # 2 เป็นไปได้หรือไม่ ฉันได้รับสิ่งผิดปกติหรือสามารถปรับปรุงได้หรือไม่

หากตัวเลือก # 2 เป็นแนวคิดที่ไม่ดีแล้ววิธีปฏิบัติที่ดีที่สุดเมื่อใช้ GnuPG สำหรับผู้ใช้รายเดียวในอุปกรณ์หลายเครื่องคืออะไร

คำตอบ:


59

นี่มันน่าอายนิดหน่อย ฉันใช้เวลาหลายชั่วโมงตลอดสัปดาห์พยายามหาทางแก้ปัญหานี้และคำตอบดูเหมือนจะเป็นคีย์ย่อย - หัวข้อในคู่มือ GnuPG และคำถามที่พบบ่อย

ขณะที่การวิจัยสิ่งที่คีย์ย่อยและทำไมพวกเขาอาจจะนำมาใช้แทน --gen ที่สำคัญผมเจออัญมณีนี้: http://wiki.debian.org/subkeys

วิกิของ Debian อธิบายวิธีการใช้ตัวเลือก # 2 (ดู OP)โดยใช้คีย์หลักพร้อมกับคีย์ย่อยและอธิบายเพิ่มเติมเกี่ยวกับวิธีลบคีย์หลักออกจากระบบใด ๆ หลังจากจัดเก็บไว้ในสื่อสำรองข้อมูล (เช่นแฟลชไดรฟ์) จากนั้นคีย์ย่อยสามารถกระจายระหว่าง keyrings ของฉันในแต่ละอุปกรณ์

ข้อดี:

  1. ไม่ต้องพึ่งพารหัสผ่านเป็นหลักในการป้องกันคีย์หลัก

  2. หากระบบใด ๆ ถูกบุกรุกคีย์หลักจะไม่สามารถใช้งานได้ทันที (ยกเว้นว่าฉันเสียบปลั๊กแฟลชไดรฟ์ไว้อย่างโง่เขลาหรือแนบไดรฟ์ดังกล่าวเข้ากับระบบที่ถูกบุกรุก)

  3. นี่คือการปฏิบัติที่ดำเนินการโดยทีมพัฒนาเดเบียน

  4. ใช้คุณสมบัติคีย์ย่อยของ GnuPG สิ่งใดที่ดูเหมือนเป็นระเบียบมากกว่าการมีพวงกุญแจหลวม ๆ บนพวงกุญแจใช่ไหม?

ส่วนที่เกี่ยวข้องจาก Debian Subkey Wiki

  1. ทำการสำรองข้อมูลไฟล์ GnuPG ที่คุณมีอยู่ ($ HOME / .gnupg) เก็บไว้อย่างปลอดภัย หากมีสิ่งใดผิดพลาดในขั้นตอนต่อไปนี้คุณอาจต้องใช้สิ่งนี้เพื่อกลับไปยังสถานที่ที่ดี (หมายเหตุ: umask 077 จะส่งผลให้มีการ จำกัด สิทธิ์สำหรับการสำรองข้อมูล)

    • umask 077; tar -cf $HOME/gnupg-backup.tar -C $HOME .gnupg
  2. สร้างคีย์ย่อยใหม่สำหรับการเซ็นชื่อ

    • ค้นหารหัสคีย์ของคุณ: gpg --list-keys yourname
    • gpg --edit-key YOURMASTERKEYID
    • ที่gpg>พรอมต์:addkey
    • สิ่งนี้จะถามวลีรหัสผ่านของคุณพิมพ์ลงไป
    • เลือกประเภทคีย์ "RSA (เครื่องหมายเท่านั้น)"
    • จะเป็นการดีถ้าเลือกขนาดคีย์บิต 4096 (หรือ 2048)
    • เลือกวันที่หมดอายุ (คุณสามารถหมุนคีย์ย่อยของคุณบ่อยกว่ามาสเตอร์คีย์หรือเก็บไว้เพื่อชีวิตของมาสเตอร์คีย์โดยไม่มีการหมดอายุ)
    • GnuPG จะสร้าง (ในที่สุด) คีย์ แต่คุณอาจต้องรอให้เอนโทรปีเพียงพอที่จะทำเช่นนั้น
    • บันทึกรหัส: save
  3. คุณสามารถทำซ้ำและสร้างคีย์ย่อย "RSA (เข้ารหัสเท่านั้น)" ได้เช่นกันหากต้องการ

  4. ตอนนี้คัดลอก$HOME/.gnupgไปยังไดรฟ์ USB ของคุณ

  5. นี่คือส่วนที่ยุ่งยาก คุณต้องลบคีย์หลักส่วนตัวและน่าเสียดายที่ GnuPG ไม่มีวิธีที่สะดวกในการทำเช่นนั้น เราจำเป็นต้องส่งออกคีย์ย่อยลบคีย์ส่วนตัวและนำเข้าคีย์ย่อยกลับ

    • ส่งออกคีย์ย่อย: gpg --export-secret-subkeys YOURMASTERKEYID >secret-subkeys(เลือกที่คีย์ย่อยเพื่อการส่งออกระบุรหัสคีย์ย่อยของแต่ละคนตามด้วยเครื่องหมายอัศเจรีย์: gpg --export-secret-subkeys SUBKEYID! [SUBKEYID! ..])
    • ลบรหัสลับหลักของคุณ: gpg --delete-secret-key YOURMASTERKEYID
    • นำเข้าคีย์ย่อยกลับมา: gpg --import secret-subkeys
    • ตรวจสอบว่าgpg -Kแสดงsec#แทนsecคีย์ส่วนตัวของคุณ นั่นหมายความว่ารหัสลับไม่ได้อยู่ที่นั่นจริงๆ (ดูที่การมีอยู่ของแพ็กเก็ต OpenPGP จำลองในผลลัพธ์ของgpg --export-secret-key YOURMASTERKEYID | gpg --list-packets)
    • gpg --edit-key YOURMASTERKEYID passwdเลือกเปลี่ยนรหัสผ่านปกป้องคีย์ย่อย: (โปรดทราบว่าวัสดุคีย์ส่วนตัวในการสำรองข้อมูลรวมถึงคีย์ส่วนตัวจะยังคงได้รับการป้องกันโดยข้อความรหัสผ่านเก่า)

คอมพิวเตอร์ของคุณพร้อมสำหรับการใช้งานปกติแล้ว

เมื่อคุณต้องการใช้คีย์หลักติดตั้งไดรฟ์ USB เข้ารหัสและตั้งค่าตัวแปรสภาพแวดล้อม GNUPGHOME:

export GNUPGHOME=/media/something
gpg -K

หรือใช้ - อาร์กิวเมนต์บรรทัดคำสั่ง home:

gpg --home=/media/something -K

คำสั่งหลังตอนนี้ควรรายการคีย์ส่วนตัวของคุณด้วยและไม่secsec#

คีย์ย่อยหลายตัวต่อเครื่องเทียบกับคีย์ย่อยเดียวสำหรับทุกเครื่อง

ตัดตอนมาจากวิกิคีย์ย่อย Debian แต่เดิมระบุไว้ในความคิดเห็น [ถอดความ] และเน้นเหมือง

หนึ่งอาจถูกล่อลวงให้มีหนึ่งซับคีย์ต่อเครื่องเพื่อที่คุณจะต้องแลกเปลี่ยนคีย์ย่อยที่อาจเป็นอันตรายของเครื่องนั้น ในกรณีที่คีย์ย่อยเดียวที่ใช้กับเครื่องทั้งหมดนั้นจะต้องมีการแลกเปลี่ยนกับเครื่องทั้งหมด [เมื่อคีย์ย่อยเดียวนั้นหรือสงสัยว่าจะถูกบุกรุก]

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


5
คำถาม & คำตอบที่ดี แต่ AFAIK ยังคงมีปัญหาหนึ่งสำหรับการตั้งค่านี้ ... มันยอดเยี่ยมสำหรับการเซ็นชื่อ แต่ไม่ใช่สำหรับการเข้ารหัสหากคุณไม่ต้องการแชร์คีย์เข้ารหัสเดียวกันระหว่างอุปกรณ์ต่าง ๆ ของคุณเพราะเมื่อมีคนทำให้คุณได้รับการเข้ารหัส ข้อความ, gpg ใช้ค่าเริ่มต้นเป็นรหัส enc ล่าสุดที่ไม่ถูกเพิกถอนที่สร้างขึ้น ไม่สามารถบังคับให้ผู้ส่งใช้คีย์ย่อยการเข้ารหัสที่เฉพาะเจาะจงขึ้นอยู่กับ UID (บ้านหรือที่ทำงาน ฯลฯ )
KurzedMetal

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

9

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

ฉันไม่รู้ว่ามีระบบที่มีอยู่แล้วสำหรับสิ่งนี้หรือไม่ แต่ฉันคิดว่ามันน่าจะเป็น scrobbled พร้อมกับงาน cron และ Bash สองสามบรรทัด

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

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

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

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

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

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


ส่วนการเพิกถอนมีเมฆมากเล็กน้อยตามที่เขียนไว้ - การเพิกถอนอุปกรณ์ควรเป็นไปได้ด้วยการประกาศจากอุปกรณ์อื่น ๆ (เพื่อไม่ให้ล้มเหลวหากมีคนขโมยแล็ปท็อปของคุณและโทรศัพท์ของคุณไม่สามารถติดต่อเซิร์ฟเวอร์โดยตรง) แต่ไม่สามารถ ทำได้โดยขโมย (ดังนั้นอุปกรณ์ควรมีรหัสป้องกันด้วยรหัสผ่านสำหรับการเพิกถอน) ในกรณีที่มีรายงานที่ขัดแย้งกันคีย์ทั้งหมดควรไม่น่าไว้วางใจชั่วคราวจนกว่าจะสามารถทำการตรวจสอบด้วยตนเองโดยบุคคลที่สาม
Stuart P. Bentley

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