การสื่อสารที่เข้ารหัสด้วย XOR ง่าย ๆ นี้ปลอดภัยหรือไม่?


23

สมมติว่า Alice และ Peter มีหน่วยความจำแฟลช USB 4GB พวกเขาพบและบันทึกไฟล์ทั้งสองไฟล์สองไฟล์ชื่อว่าalice_to_peter.key(2GB) และpeter_to_alice.key(2GB) ซึ่งมีบิตที่สร้างแบบสุ่ม พวกเขาไม่เคยพบกันอีก แต่สื่อสารด้วยระบบอิเล็กทรอนิกส์ อลิซยังคงรักษาตัวแปรที่เรียกว่าalice_pointerและปีเตอร์รักษาตัวแปรที่เรียกว่าpeter_pointerซึ่งทั้งสองจะถูกตั้งค่าเริ่มต้นเป็นศูนย์

เมื่ออลิซต้องการส่งข้อความถึงปีเตอร์เธอก็ทำ (อยู่ที่nข้อความที่ nthth):

encrypted_message_to_peter[n] = message_to_peter[n] XOR alice_to_peter.key[alice_pointer + n]
encrypted_payload_to_peter = alice_pointer + encrypted_message_to_peter
alice_pointer += length(encrypted_message_to_peter)

(และเพื่อความปลอดภัยสูงสุดสามารถลบส่วนที่ใช้แล้วของคีย์ได้)

ปีเตอร์ได้รับencrypted_payload_to_peterอ่านที่alice_pointerเก็บไว้ที่จุดเริ่มต้นของข้อความและทำ:

message_to_peter[n] = encrypted_message_to_peter[n] XOR alice_to_peter.key[alice_pointer + n]

และเพื่อความปลอดภัยสูงสุดหลังจากอ่านข้อความจะลบส่วนที่ใช้ไปของคีย์ด้วย - แก้ไข: อันที่จริงขั้นตอนนี้ด้วยอัลกอริทึมแบบง่าย ๆ (ไม่มีการตรวจสอบความสมบูรณ์และการรับรองความถูกต้อง) ช่วยลดความปลอดภัยให้ดูที่Paŭlo Ebermann โพสต์ด้านล่าง

เมื่อปีเตอร์ต้องการที่จะส่งข้อความไปยังอลิซที่พวกเขาทำกลับครั้งนี้ด้วยและpeter_to_alice.keypeter_pointer

ด้วยสคีมาเล็กน้อยนี้พวกเขาสามารถส่งในแต่ละวันในอีก 50 ปี 2GB / (50 * 365) = ~ 115kB ของข้อมูลที่เข้ารหัสในทั้งสองทิศทาง หากพวกเขาต้องการข้อมูลเพิ่มเติมในการส่งพวกเขาสามารถใช้ปุ่มที่ใหญ่กว่าได้ตัวอย่างเช่น HD 2TB ของวันนี้ (1TB คีย์) มันเป็นไปได้ที่จะแลกเปลี่ยน 60MB / วันในอีก 50 ปีข้างหน้า! นั่นเป็นข้อมูลจำนวนมากในทางปฏิบัติ ตัวอย่างเช่นการใช้การบีบอัดเป็นมากกว่าชั่วโมงของการสื่อสารด้วยเสียงคุณภาพสูง

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

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

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

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


4
นอกเหนือจากรูปแบบเฉพาะเพื่อประสานงานซึ่งเป็นส่วนหนึ่งของคีย์ที่ใช้นี่เป็นเพียงแผ่นครั้งเดียว แต่ภายใต้การตรวจสอบอย่างใกล้ชิดมันกลับกลายเป็นว่าไม่มีประโยชน์สำหรับกรณีใช้งาน 99%

10
ในฐานะที่เป็นคำถามนี้เป็นเรื่องเกี่ยวกับความแข็งแรงของอัลกอริทึมการเข้ารหัสลับเฉพาะก็อาจจะเหมาะสำหรับcrypto.stackexchange.com หากต้องการย้ายคำถามของคุณไปที่นั่นคุณสามารถตั้งค่าสถานะเพื่อเป็นผู้ดูแลและขอการโยกย้าย
Bart van Ingen Schenau

12
OTP ถูกประดิษฐ์ขึ้นเมื่อกว่าศตวรรษก่อนและถูกนำมาใช้เป็นแผ่นกระดาษจริงในสงครามโลกครั้งที่สอง ( en.wikipedia.org/wiki/One-time_pad ) ปัญหาในการเข้ารหัสตอนนี้คือการแลกเปลี่ยนกุญแจ
Gort the Robot

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

1
@keshlam การสร้างตัวเลขสุ่มควอนตัมที่แท้จริงนั้นเริ่มมีราคาถูกมาก บทความที่น่าสนใจที่ arxiv: การสร้างตัวเลขสุ่มควอนตัมบนโทรศัพท์มือถือ: arxiv.org/abs/1405.0435
user3123061

คำตอบ:


50

ใช่นี่เป็นเบาะขาเดียว หากวัสดุหลักไม่เคยถูกนำมาใช้ซ้ำมันจะปลอดภัยในทางทฤษฎี

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


52
ฉันคิดว่ามันคุ้มค่าที่จะเน้นย้ำว่า "ความปลอดภัยในเชิงทฤษฎี" หมายความว่ามันได้รับการพิสูจน์ทางคณิตศาสตร์ว่าไม่สามารถแตกหักได้หากกุญแจนั้นสุ่มและไม่นำกลับมาใช้ใหม่ นั่นเป็นการรับประกันที่แข็งแกร่งที่สุดที่คุณสามารถทำได้ทุกที่ในการเข้ารหัส
Michael Borgwardt

1
@MichaelBorgwardt จุดใหญ่ที่นั่น ในกรณีนี้ "ความปลอดภัยในทางทฤษฎี" จริง ๆ แล้วดีกว่า "ปลอดภัยจริง"
Mark

2
กรณีตรงประเด็น: ฉันมีคีย์สุ่ม 2GB ซึ่งเกิดขึ้นกับ 16 ไบต์ต่อเนื่องของ 0 0
Michael

@Michael โอกาสที่จะเกิดขึ้นประมาณ 1 ใน 10 ^ 27
นี้

1
@Floris "การคำนวณ" ของฉัน: ไบต์มีค่าที่เป็นไปได้ 256 ค่า นั่นคือหนึ่งใน 256 ที่ทั้งหมดจะเป็นศูนย์ 256 ^ 16 เพื่อรับโอกาสเป็น 16 ไบต์ จากนั้นหารจำนวนไบต์เป็น 2GB ด้วยโอกาสนั้น ฉันคิดว่าฉันพลาดการหารด้วย 16 อยู่แล้วที่นี่(1024 * 1024 * 1024 * 1024 * 2 * (1/16)) / (256 ^ 16)จุดสุดท้ายของคุณทำให้การคำนวณนี้ไม่เกี่ยวข้องเลย
นี้

32

ตามที่คำตอบของ Vatineบ่งชี้ว่าอัลกอริทึมของคุณนั้นเป็นแบบใช้ครั้งเดียว

อย่างไรก็ตามเพื่อแสดงความคิดเห็นในบันทึกย่อของคุณ:

หมายเหตุ: ถ้ามันปลอดภัยอย่างแน่นอนแล้วก็น่าทึ่งเพราะในปัจจุบันความทรงจำราคาประหยัดขนาดใหญ่มันเป็นวิธีสื่อสารที่ปลอดภัยกว่าการเข้ารหัสควอนตัมควอนตัมราคาแพงและความปลอดภัยที่เทียบเท่า!

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

และท้ายที่สุดด้าน XOR ของอัลกอริทึมของคุณไม่สำคัญ รหัสทดแทนง่าย ๆ ก็ใช้ได้กับ OTP จุดแข็งของ OTP คือกุญแจไม่เคยถูกนำกลับมาใช้ใหม่และสันนิษฐานว่า James Bond กำลังแลกเปลี่ยนกุญแจสำหรับทั้งสองฝ่ายอย่างไม่มีที่ติ (เช่นการแลกเปลี่ยนกุญแจที่ปลอดภัยก่อน)


13
สิ่งอื่น ๆ ที่เกี่ยวกับ OTP คือว่าที่สำคัญคือ (อย่างน้อย) ตราบใดที่ข้อความเพื่อเข้ารหัส, และความต้องการมากที่มีคุณภาพสูงที่มาตัวเลขสุ่ม
Donal Fellows

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

21

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

  • ผู้บุกรุกที่คาดเดาได้อย่างถูกต้องว่าข้อความล้วนสามารถจัดการกับไซเฟอร์เท็กซ์กับสิ่งที่เธอต้องการ (ที่มีความยาวเท่ากัน)

  • หากผู้โจมตีแทรกหรือลบข้อความบางส่วน (หรือบางส่วนของมัน) พอยน์ของอลิซและบ็อบหลุดพ้นจากการซิงค์และการสื่อสารในอนาคตทุกครั้งจะถูกทำลาย

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

ปัญหาทั้งสองนั้นเกิดจากการขาดความสมบูรณ์และการป้องกันการรับรองความถูกต้อง - คุณมีรหัสที่สมบูรณ์แบบ แต่ไม่มี MAC

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

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


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

แต่คุณพูดถูก นำเสนอ algoritm ง่ายๆความสมบูรณ์และการตรวจสอบ การใช้งานจริงจะต้องแข็งแกร่งขึ้น
user3123061

@ user3123061 ฉันจะไม่เพียงแค่ยักความซื่อสัตย์และการรับรองความถูกต้องถ้าฉันเป็นคุณ เทคนิคของการปรับตัวการโจมตี ciphertext รับเลือกให้ใช้ประโยชน์จากการขาดความสมบูรณ์ของการป้องกันการทำลายการรักษาความลับ ฉันจะบอกได้เลยว่าแผ่นครั้งเดียวแบบคลาสสิก (ซึ่งเป็นสิ่งที่คุณสร้างขึ้นใหม่) นั้นไม่ปลอดภัยแม้จะมีความมั่นคงทางคณิตศาสตร์ที่ชัดเจนเพียงเพราะการโจมตีครั้งนี้
zwol

2
การโจมตีแบบ cipertext ที่เลือกสรรเป็นทางเลือกที่ไม่ดีนักในการโจมตี OTP ที่มนุษย์ตรวจสอบ OOS จะสังเกตได้และผู้โจมตีของคุณจะเขวี้ยงเร็วมาก เฉพาะในกรณีที่ผู้รับถูกประมวลผลด้วยเครื่องจักรและให้การตอบสนองการโจมตีครั้งนี้เป็นการโจมตีที่ดีมาก
Joshua

@ แซคมีปัญหามากมายกับ OTPs แต่ก็ไม่มีใครคุกคามความลับ โปรดทราบว่าแม้ว่าคุณจะคาดเดาคีย์ plantext + ของข้อความก่อนหน้าได้อย่างสมบูรณ์ แต่ข้อความถัดไปจะถูกเข้ารหัสด้วยคีย์ใหม่ที่เป็นอิสระทั้งหมด ไม่มีอะไรที่จะปรับให้เข้ากับการโต้ตอบหลาย ๆ อย่างได้

4

จริงๆแล้วมันไม่ปลอดภัยอย่างสิ้นเชิง สิ่งที่โปรโตคอลของคุณรั่วไหลคือความยาวของข้อความที่สื่อสาร

ตัวอย่างเช่นหากสายลับรู้ว่าคุณจะตอบกลับด้วย "ใช่" หรือ "ไม่" และเห็นความยาว = 2 เขาสามารถอนุมานได้ว่า "ไม่"

จริงๆแล้วมันน่าอัศจรรย์เท่าไหร่ที่สามารถอนุมานได้จากความยาวที่รู้จักถ้าใครสามารถเดาบริบทได้


3
นั่นค่อนข้างง่ายในการแก้ไขในระดับความปลอดภัยที่เหมาะสมเนื่องจากคุณสามารถวางข้อความด้วยขยะแบบสุ่มดังนั้นความยาวของข้อความจึงเป็นทวีคูณของขนาดบล็อกคงที่ - พูดถึง 256 ตัวอักษร ที่จะเอาชนะง่าย ๆ ใช่ v ไม่มีการวิเคราะห์ต้นทุนของการใช้ OTP ที่เร็วขึ้น
Peter Bagnall

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