มีผลที่แท้จริงของการโจมตี oracle padding หรือไม่?

Aug 18 2020

ฉันกำลังเขียนโปรแกรมที่เข้ารหัสข้อมูลใน Python และได้ยินเกี่ยวกับการโจมตี padding oracleแต่ฉันคิดว่ามันเกินจริง (ฉันหมายถึงการใช้งานในโลกแห่งความจริงคืออะไร) แม้แต่การใช้งานแบบเก่าที่มีช่องโหว่ (สิ่งที่บอกได้ว่า padding ถูกหรือผิดเช่น SSLv3)

เพราะ:

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

แต่ถ้าพูดว่าc2และc3ซึ่งอยู่ตรงกลางของข้อความทั้งหมดล่ะ? เรารู้ว่า c3 และ c2 แต่เราไม่ทราบและเราจะไม่เคยรู้ว่าอย่างใดอย่างหนึ่งหรือ p3 p2 (ธรรมดา) หรือรัฐกลางIS3 ; กล่าวคือเราไม่สามารถ XOR c2 กับ is3 เพื่อรับp3ได้ดังนั้นการโจมตีครั้งนี้ฉันคิดว่าแค่อนุญาตให้เราถอดรหัสบล็อกช่องว่างภายในด้วยสิ่งใหม่เดียวที่เรารู้ว่าเป็นสถานะกลางของบล็อกช่องว่างภายใน

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

คำตอบ

7 MaartenBodewes Aug 18 2020 at 23:14

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

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

แต่สิ่งที่เกี่ยวกับการพูด c2, c3 ซึ่งอยู่ตรงกลางของข้อความทั้งหมดเรารู้ c3 และ c2 แต่เราไม่รู้และเราจะไม่มีทางรู้ทั้ง p3 (ข้อความธรรมดาแน่นอน) หรือสถานะกลาง IS3

ไม่การโจมตีแบบออราเคิลแบบขยายสามารถถอดรหัสข้อความได้อย่างสมบูรณ์ เนื่องจาก XOR มีอิทธิพลต่อบล็อกถัดไป

โปรดสังเกตว่าการโจมตี padding oracle เป็นเพียงรูปแบบหนึ่งของการโจมตี oracle ธรรมดา ตัวอย่างเช่นคุณยังสามารถทำการโจมตี oracle ข้อความธรรมดาบน XML-enc ได้แม้ว่าจะไม่ใช้ช่องว่างภายในก็ตาม

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

ใช่นั่นผิดอย่างสิ้นเชิงและสมบูรณ์ การโจมตี padding oracle สามารถถอดรหัสข้อความทั้งหมดโดยใช้ 128 ครั้งต่อไบต์และ oracles ข้อความธรรมดาอื่น ๆ จะมีประสิทธิภาพมากยิ่งขึ้น

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

5 Gilles'SO-stopbeingevil' Aug 19 2020 at 07:33

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

การโจมตี Lucky Thirteenเป็นการโจมตี TLS ในโลกแห่งความเป็นจริง เป็นการโจมตีที่รุนแรงสำหรับโปรโตคอล TLS เวอร์ชันปัจจุบัน (TLS 1.0 ในขณะนั้น - มี TLS 1.1 และ 1.2 อยู่ แต่มีการนำไปใช้น้อยมาก) ดังนั้นไม่เลยการโจมตีของ oracle ในช่องว่างนั้นได้ผลอย่างแน่นอนในโลกแห่งความเป็นจริง

(สิ่งที่บอกว่าช่องว่างภายในถูกหรือผิดเช่น sslv3)

Lucky Thirteen ส่งผลกระทบต่อเวอร์ชันสูงสุด TLS 1.2 ซึ่งเป็นเวอร์ชันที่ใช้สำหรับการสื่อสารที่ปลอดภัยส่วนใหญ่ในปัจจุบัน มีผลเฉพาะกับชุดการเข้ารหัสที่ใช้ CBC ซึ่งเลิกใช้แล้วอย่างแม่นยำเนื่องจากการโจมตีนี้ แต่จุดสิ้นสุดส่วนใหญ่ยังคงอนุญาตแม้ว่าพวกเขาจะชอบการเข้ารหัส AEAD ก็ตาม การติดตั้ง TLS ยอดนิยมจำนวนมาก แต่ไม่ใช่ทั้งหมดจะมีโค้ดที่ป้องกันการโจมตีของ Lucky Thirteen (โดยเสียค่าประสิทธิภาพ) ดังนั้นไม่เลยการโจมตีของ oracle padding มีความเกี่ยวข้องกับโปรโตคอลที่ยังคงใช้กันอย่างแพร่หลาย

ฉันกำลังเขียนโปรแกรมที่เข้ารหัสข้อมูลใน python และได้ยินเกี่ยวกับการโจมตีของ oracle padding แต่ฉันคิดว่ามันเกินจริง

เป็นเรื่องจริงที่คุณไม่ควรกังวลเกี่ยวกับการโจมตีของ oracle แต่เหตุผลที่คุณไม่ควรกังวลก็คือเนื่องจากพวกเขาเป็นที่รู้จักเราจึงรู้วิธีป้องกันพวกเขา: อย่าใช้ช่องว่างภายใน และไม่มีโหมดการเข้ารหัสที่ทันสมัยใช้ช่องว่างภายใน เพียงใช้โหมด AEAD ทั่วไปเช่น GCM, CCM หรือ ChaCha20 + Poly1305 หรือแม้กระทั่งการที่ดีกว่าการใช้ห้องสมุดระดับสูงเช่นโซเดียมคลอไรด์ / libsodium ( PyNaClในหลาม): ถ้าคุณกำลังพิมพ์ตัวอักษร AES เป็นรหัสของคุณคุณกำลังทำมันผิด