เป็นไปได้หรือไม่ที่จะเพิ่มผู้รับไปยังไฟล์ที่เข้ารหัสแล้วใน GPG


12

สมมติว่าฉันเข้ารหัสไฟล์ (อาจใหญ่) โดยใช้ GPG เช่น

gpg --recipient "Some Name" -o this_file.gpg --encrypt this_file.txt

เป็นไปได้หรือไม่ที่จะเพิ่มผู้รับอื่นโดยไม่ต้องถอดรหัสไฟล์ก่อนตามด้วยการเข้ารหัสอื่น?

gnupg 

คุณเข้ารหัสไฟล์ด้วยรหัสสาธารณะของ "Some Name" แล้วมันจะใช้อะไรกับผู้รับคนอื่น?
ott--

6
@ott: นั่นไม่ใช่วิธีการทำงาน (AFAIK) PGP เข้ารหัสไฟล์ด้วยคีย์สมมาตรซึ่งไม่ใช่คีย์สาธารณะของผู้รับ จากนั้นจะทำการเข้ารหัสลับสำเนา symmetric-key หลายชุดโดยใช้กุญแจสาธารณะของผู้รับแต่ละคน
RedGrittyBrick

@ RedGrittyBrick ฉันไม่รู้เกี่ยวกับ pgp แต่ gpg ใช้--symmetricสำหรับสิ่งนั้น ด้วยการ--recipientใช้คีย์สาธารณะของผู้รับ อาจมีผู้รับมากกว่า 1 ราย แต่จะต้องทำในคำสั่งเดียวไม่ใช่ใน 2 คำสั่งแยกกัน
ott--

3
@ott: ฉันอ่านว่า " มันเป็นไปได้ที่จะเข้ารหัสไฟล์พร้อมกันสำหรับผู้รับหลาย ๆ คนโดยใช้คำสั่งของแบบฟอร์มgpg -e -r <name1> -r <name2> ... <file> " ฉันไม่ได้ลองด้วยตัวเอง มันเหมาะกับสิ่งที่ฉันเรียนรู้เกี่ยวกับการเข้ารหัสเมื่อหลายปีก่อนซึ่งมันเกือบจะมีประสิทธิภาพมากกว่าในการใช้อัลกอริทึมแบบสมมาตรอย่างรวดเร็วเพื่อเข้ารหัสข้อความ เฉพาะคีย์ - ข้อความเท่านั้นที่ถูกเข้ารหัสโดยใช้การเข้ารหัสแบบอสมมาตรช้า
RedGrittyBrick

คำตอบ:


8

คำตอบสั้น ๆ : ไม่

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

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

อย่างไรก็ตามgpg ไม่มีความสามารถนี้ gpg ที่ใกล้เคียงที่สุดที่คุณจะได้รับคือ

  1. ใช้--show-session-keyตัวเลือกเพื่อรับคีย์เซสชั่น (ซึ่งดูเหมือนว่าจะถอดรหัสไฟล์หายไปจุดในกรณีนี้)
  2. เข้ารหัสกุญแจเซสชั่นนั้นให้กับกุญแจสาธารณะของคนอื่น (อันที่จริงแล้วจะสร้างคีย์เซสชั่นใหม่และใช้กุญแจเซสชั่นนั้นเพื่อเข้ารหัสกุญแจเซสชั่นดั้งเดิม)
  3. ส่งไฟล์ทั้งสอง
  4. ผู้รับสามารถถอดรหัสกุญแจเซสชั่นและใช้--override-session-keyในการถอดรหัสข้อความต้นฉบับ

3

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

2) อย่างไรก็ตามหากคุณมีไฟล์ต้นฉบับอยู่คุณควรที่จะสร้างไฟล์ที่เข้ารหัสใหม่ไปยังผู้รับใหม่

สมมติว่าคุณไม่ต้องการไปเส้นทางเซสชั่นคีย์จากคำแนะนำของ nathang ถ้าคุณเข้ารหัสไฟล์ไว้กับตัวคุณ (ดังที่แสดงไว้ใน # 1) ในตอนแรกจากนั้นถอดรหัสมันแล้วทำตามขั้นตอนที่ 2 ด้านบน

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


1
จริงๆแล้วมันไม่ใช่ความคิดที่ดีเสมอไป ดูPGP: รวมรหัสสาธารณะของคุณเป็นผู้รับหรือไม่ ปลอดภัยกว่าไหม? บน Information Security Stack Exchangeสำหรับบางอาร์กิวเมนต์สำหรับและต่อ
CVn

0

เป็นไปได้หรือไม่ที่จะเพิ่มผู้รับอื่นโดยไม่ต้องถอดรหัสไฟล์ก่อนตามด้วยการเข้ารหัสอื่น?

มันเป็นไปไม่ได้หากไม่ถอดรหัสเลยแต่ดูเหมือนว่าเป็นไปได้โดยไม่ต้องถอดรหัสไฟล์ :

gpg -d this_file.gpg | gpg -e -r "Some Name" -r "Another Name" -o this_file.gpg

ยกเว้นสิ่งนี้ดูเหมือนว่าจะส่งผลให้ไฟล์ที่เสียหาย (อย่างน้อยบางครั้ง) เพราะgpgทั้งการอ่านและการเขียนไปยังไฟล์เดียวกันพร้อมกัน:

แต่คุณสามารถทำสิ่งต่อไปนี้ (ในสคริปต์) เพื่อหลีกเลี่ยงความต้องการในการจัดการไฟล์ที่ถอดรหัส:

gpg -d -o this_file.txt this_file.gpg

gpg -e \
    -r "Some Name" \
    -r "Another Name" \
    -o this_file.gpg \
    --batch --yes \
    this_file.txt

shred -u this_file.txt

shredด้วย-uตัวเลือกให้เขียนทับข้อมูลอย่างปลอดภัยแล้วจึงลบไฟล์ที่คุณระบุ มีโปรแกรมที่คล้ายกันสำหรับแพลตฟอร์มอื่นเช่นsrmบน Mac OS X

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

gpg -d this_file.gpg \
| gpg -e \
    -r "Some Name" \
    -r "Another Name" \
    -o this_file.gpg.new \
    --batch --yes

mv -f this_file.gpg.new this_file.gpg

2
คุณไม่จำเป็นต้องเขียนไฟล์ temp ที่ชัดเจนหากคุณปล่อยการเข้ารหัสไว้ชั่วคราว: gpg -d file.gpg | gpg -e ... -o file.new; mv file.new file.gpgหรือมิเรอmv file.gpg file.old; gpg -d file.old | gpg -e ... -o file.gpgร์ หรือ (อาจจะเกินไป) อย่างชาญฉลาดเพียงแค่เก็บไอโหนดเก่า:{ rm file.gpg; gpg -d /dev/fd/3; } 3<file.gpg | gpg -e ... -o file.gpg
dave_thompson_085

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