การเข้ารหัส / ถอดรหัสด้วยปุ่มหลายปุ่ม


110

เป็นไปได้หรือไม่ที่จะเข้ารหัสข้อมูลเพื่อให้สามารถถอดรหัสด้วยคีย์ต่างๆได้

ตัวอย่าง:

ฉันเข้ารหัสข้อมูลด้วย key1 แต่ฉันต้องการถอดรหัสด้วยคีย์ 2, 3 และ 4

เป็นไปได้หรือไม่

คำตอบ:


170

GnuPGทำการเข้ารหัสแบบหลายคีย์ในมาตรฐาน

คำสั่งต่อไปนี้จะเข้ารหัสdoc.txtโดยใช้คีย์สาธารณะสำหรับ Alice และคีย์สาธารณะสำหรับ Bob อลิซสามารถถอดรหัสโดยใช้คีย์ส่วนตัวของเธอ Bob ยังสามารถถอดรหัสโดยใช้คีย์ส่วนตัวของเขา

gpg --encrypt --recipient alice@example.com \
    --recipient bob@example.com doc.txt

คุณลักษณะนี้มีรายละเอียดอยู่ในส่วนคู่มือผู้ใช้ที่ชื่อว่า "การเข้ารหัสและถอดรหัสเอกสาร "


Ditto. มันเจ๋งมากที่รู้วิธีทำ แต่ฉันหา hide no man page ไม่เจอ
MarkusQ

@ มิทช์ฉันโพสต์คำตอบที่อาจมีคำตอบของเรา! (โปรดทดสอบและชมเชยถ้าเป็นเช่นนั้น / ไม่ - ชื่นชมมาก!)
pythonlarry

@MarkusQ ดูลิงค์ของฉันไปยัง Mitch ด้านบน ทดสอบ / ขอบคุณถ้าทำได้! :-)
pythonlarry

ดังนั้นผลลัพธ์จะเป็นไฟล์เข้ารหัส 1 ไฟล์ซึ่งสามารถอ่านได้โดยใช้คีย์ส่วนตัวไม่ใช่ 1 ไฟล์ต่อคีย์?
user8675309

7
@ user8675309 ครับ ข้อมูลถูกเข้ารหัสโดยคีย์สมมาตรทั่วไป เฉพาะคีย์สมมาตรเท่านั้นที่เข้ารหัสด้วยคีย์สาธารณะของผู้รับแต่ละราย ไม่ใช่การเข้ารหัสข้อมูลซ้ำสำหรับผู้รับแต่ละราย
wisbucky

55

ใช่มันเป็นไปได้

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

บรรทัดคำสั่ง

นี่คือวิธีดำเนินการผ่านgpgบรรทัดคำสั่ง (ตามที่อธิบายไว้ในคำตอบของ David Segonds ):

gpg --encrypt \
  --recipient alice@example.com \
  --recipient bob@example.com \
clear-message.txt

ไคลเอนต์ GUI

GUI ของคุณต้องมีวิธีเข้ารหัสสำหรับหลาย ๆ คน

กลไก

มีคำถามเกี่ยวกับการเป็นข้อมูลในการรักษาความปลอดภัย , ขนาดไฟล์ GPG กับผู้รับหลายคน? ซึ่งอธิบายกลไกการเข้ารหัส :

GPG เข้ารหัสไฟล์หนึ่งครั้งด้วยคีย์สมมาตรจากนั้นวางส่วนหัวที่ระบุคีย์คู่เป้าหมายและคีย์สมมาตรเวอร์ชันเข้ารหัส

[... ] เมื่อเข้ารหัสไปยังผู้รับหลายรายส่วนหัวนี้จะถูกวางหลายครั้งโดยให้คีย์สมมาตรเดียวกันในเวอร์ชันเข้ารหัสที่ไม่ซ้ำกันสำหรับผู้รับแต่ละราย


4
ขอขอบคุณเป็นพิเศษสำหรับสองประโยคสุดท้าย: ตอนนี้ทุกอย่างชัดเจนแล้ว!
radistao

31

โดยทั่วไปไคลเอนต์GnuPGและ PGP จะเข้ารหัสข้อมูลจริงด้วยคีย์สมมาตรที่เรียกว่า "คีย์เซสชัน" จากนั้นคีย์เซสชันจะถูกเข้ารหัสด้วย "คีย์ผู้รับ" แต่ละอัน (เช่นคีย์ที่คุณระบุด้วย -r / - ผู้รับ) นี้บางครั้งเรียกว่าเป็นตัวเลขไฮบริด ตอนนี้ฉันเชื่อว่าโดยค่าเริ่มต้น GnuPG ใช้คีย์เซสชัน 256 บิตและ AES เพื่อเข้ารหัสข้อมูลข้อความธรรมดาไปยังคีย์เซสชัน AES-256 นั้นและคีย์ผู้รับของคุณคือ RSA / DSA / ECDSA / ฯลฯ คีย์ assymetric ในกรณีนี้

เหตุผลหนึ่งในการทำเช่นนี้คืออัลกอริธึมการเข้ารหัสแบบสมมาตรเช่น AES โดยทั่วไปจะเร็วกว่าแบบอสมมาตรเช่น RSA ดังนั้น GnuPG จึงต้องเข้ารหัส ~ 256 บิต (คีย์เซสชัน) ด้วย RSA และสามารถใช้ AES เพื่อเข้ารหัสข้อมูล (ขนาดใหญ่เท่าที่คุณต้องการ!) ด้วยคีย์เซสชันนั้น เครื่องของ Intel ยังมีคำสั่งAES-NIในตัวเพื่อทำบางขั้นตอนของอัลกอริทึมในฮาร์ดแวร์ซึ่งทำให้ GnuPG มีความรวดเร็วในการเข้ารหัส / ถอดรหัสข้อมูล

อีกเหตุผลหนึ่งในการทำเช่นนี้คือการอนุญาตให้เอกสารที่เข้ารหัส PGP สามารถเข้ารหัสกับหลายฝ่ายได้โดยไม่ต้องเพิ่มขนาดของเอกสารเป็นสองเท่า โปรดสังเกตว่าเมื่อคุณระบุผู้รับหลายคนสำหรับเอกสารที่เข้ารหัส (เช่นgpg -ea -r Alice -r Bob -o ciphertext.asc) เอกสารเข้ารหัสที่จัดเก็บ (ciphertext.asc) จะไม่ใหญ่เท่ากับ 2 เท่าหากคุณเพิ่งเข้ารหัสให้ Alice

ดู--show-session-keyพารามิเตอร์ในหน้า man gpgเพื่อให้สามารถถอดรหัสเฉพาะคีย์เซสชันเช่นอนุญาตให้บุคคลที่สามถอดรหัสเอกสารที่เข้ารหัสให้คุณโดยไม่ต้องโอนไปยังคีย์ส่วนตัวของคุณหรือข้อมูลข้อความธรรมดา


1
ขอขอบคุณสำหรับคำอธิบายเกี่ยวกับเอกสารที่เข้ารหัสที่ไม่ใหญ่กว่า n เท่าโดยที่ n คือจำนวนผู้ลงนาม
theartofbeing

4

ใช่มันเป็นไปได้ "การเข้ารหัสหลายฝ่าย" ของ Google สำหรับการเริ่มต้น

AFAIK ไม่มีการดร็อป 'em และใช้แพ็คเกจ' em สำหรับมัน

- MarkusQ

ปล. สำหรับภาพร่างวิธีการทำได้ลองพิจารณาสิ่งนี้ ข้อความที่เข้ารหัสประกอบด้วย:

  • เพย์โหลดเข้ารหัสด้วยแพดครั้งเดียว
  • แผ่นเวลาเดียวเข้ารหัสด้วยคีย์ 1
  • แผ่นเวลาเดียวเข้ารหัสด้วยคีย์ 2
  • ...
  • แผ่นเวลาเดียวเข้ารหัสด้วย keyN

ผู้รับที่ถือคีย์ฉันเพียงแค่ถอดรหัสสำเนาของแผ่นด้วยคีย์ของพวกเขาจากนั้นถอดรหัสข้อมูล

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

----- แก้ไข ------------

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


1
สิ่งที่อาจดูดเกี่ยวกับเรื่องนี้คือเมื่อคุณรู้แผ่นเวลาเดียวคุณจะมีข้อความธรรมดาที่รู้จักพร้อมกับค่าที่เข้ารหัสสำหรับคีย์อื่น ๆ การใช้ข้อมูลนี้ช่วยให้คุณค้นหาได้ง่ายขึ้นว่าคีย์อื่น ๆ คืออะไร
Kibbee

2
Googling "การเข้ารหัสหลายฝ่าย" ไม่ได้เกิดขึ้นมากนัก คุณน่าจะโชคดีกว่ากับ "การเข้ารหัสการออกอากาศ" ซึ่งครอบคลุมกรณีนี้เช่นกัน
staktrace

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

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

-16

RSA คีย์หลายตัว (มากกว่าสอง) อาจเป็นแบบนี้ - ฉันไม่ใช่นักคณิตศาสตร์ดังนั้นอัลกอริทึมนี้จึงไม่จำเป็นต้องปลอดภัยฉันแค่อยากให้ความคิดกับมัน

ม = p * q * r; p, q, r เป็นจำนวนเฉพาะจำนวนมาก

fi (ม) = (p-1) (q-1) (r-1)

d == (e1 * e2 * e3 * ... * ei) ^ (- 1) (mod fi (m)); e1 ... ei เป็นตัวเลขโดยพลการ d ถูกคำนวณเพื่อเติมเต็มสมการ

y1 == x ^ e1 (สมัยม.)

y2 == y1 ^ e2 (mod ม.)

y3 == y2 ^ e3 (mod ม.)

...

x == yi ^ d (สมัยม.)

อัลกอริทึมนี้สามารถใช้เพื่อเพิ่มความเร็วของ The Onion Router

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