Score:2

ผู้โจมตีสามารถทำอะไรได้บ้างกับการใช้งาน AES-CFB8 ที่ไม่ปลอดภัยนี้

ธง in

ฉันเชื่อว่าฉันพบการใช้งาน AES-CFB8 ที่ไม่ปลอดภัยในแอปพลิเคชันที่ฉันกำลังทำงานอยู่ และหวังว่าจะมีคนอธิบายได้ว่าทำไมสิ่งนี้ถึงไม่ปลอดภัย และสิ่งที่ผู้โจมตีสามารถทำได้ เช่น การกู้คืนคีย์ ซึ่งจะเป็นผลลัพธ์ที่แย่กว่าสำหรับโปรโตคอลนี้ .

โดยทั่วไป AES-CFB8 (โดยชัดแจ้งโดยไม่มีการเติม) ใช้ในการเข้ารหัสสตรีมข้อมูลและ IV/คีย์จะถูกใช้ซ้ำระหว่างสตรีมเซิร์ฟเวอร์และไคลเอ็นต์ และ IV เหมือนกับคีย์ สิ่งนี้ไม่ปลอดภัยเพียงใด และเป็นไปได้หรือไม่ที่การโจมตีจะกู้คืน iv/key จากสิ่งนี้ คีย์ที่ใช้สำหรับ AES เป็นความลับที่ใช้ร่วมกันซึ่งอาจประนีประนอมได้มากกว่าแค่สตรีมแพ็กเก็ตดั้งเดิม เนื่องจากสตรีมที่มีการใช้งานที่ปลอดภัยที่เป็นไปได้นี้ไม่ละเอียดอ่อนเท่า แต่จะเป็นปัญหาที่ใหญ่กว่าหากคีย์ที่ใช้ถูกบุกรุก

SecretKey แบบคงที่สาธารณะ createSharedSecret () {
   สุดท้าย KeyGenerator gen = KeyGenerator.getInstance ("AES");
   gen.init (128); // AES-128
   กลับ gen.generateKey();
}
// ตัดสินใจโดยไคลเอนต์และส่งอย่างปลอดภัยไปยังเซิร์ฟเวอร์ผ่าน RSA และตรวจสอบผ่านแหล่งที่เชื่อถือได้
SecretKey สุดท้าย sharedSecret = createSharedSecret ();
 // ดำเนินการทั้งบนเซิร์ฟเวอร์และไคลเอนต์หลังจากเซิร์ฟเวอร์ได้รับความลับที่ใช้ร่วมกัน 
 รหัสสุดท้าย aesCFBEncrypt = Cipher.getInstance ("AES/CFB8/NoPadding");
 aesCFBEncrypt.init (Cipher.ENCRYPT_MODE, sharedSecret, IvParameterSpec ใหม่ (sharedSecret.getEncoded ()));

 รหัสสุดท้าย aesCFBDecrypt = Cipher.getInstance ("AES/CFB8/NoPadding");
 aesCFBDecrypt.init (Cipher.DECRYPT_MODE, sharedSecret, IvParameterSpec ใหม่ (sharedSecret.getEncoded ()));

 this.enableStreamEncryption (aesCFBEncrypt, aesCFBDecrypt);

ฉันได้ตรวจสอบปัญหาที่คล้ายกันแล้ว แต่ไม่มีสิ่งใดที่ฉันพบว่าเหมาะสมกับเกณฑ์ที่ฉันสนใจ นั่นคือการใช้รหัสเป็นสตรีมที่มีอินสแตนซ์ที่แตกต่างกันสำหรับ RX/TX บนไคลเอนต์และเซิร์ฟเวอร์และการใช้คีย์เป็น iv โดยไม่มีความแตกต่าง คีย์สำหรับเซิร์ฟเวอร์และไคลเอ็นต์

SAI Peregrinus avatar
si flag
ทำไมต้องซีเอฟบี? นั่นไม่ใช่โหมดที่ใช้ได้ทั่วไป และไม่ปลอดภัย AE ดังนั้น คำตอบคือ "ไม่" แม้จะเพิกเฉยต่อปัญหาอื่นๆ ของโหมดนี้ก็ตาม
in flag
@sai-peregrinus ฉันไม่รู้ว่าทำไมจึงใช้ CFB รหัสนี้เขียนขึ้นเมื่อกว่าทศวรรษที่แล้ว แต่มีคนที่ไม่ใช่ฉัน ฉันทราบดีว่าสตรีมนั้นสามารถถูกจัดการได้ แต่โปรโตคอลพื้นฐานมีกลไกที่ทำให้สิ่งนี้ยากหรือเป็นไปไม่ได้ในแบบเรียลไทม์สมมติว่าโปรโตคอลพื้นฐานกำลังใช้ MAC-then-Encrypt สำหรับการรับรองความถูกต้อง นี่คือการวิเคราะห์รหัสของโปรแกรมดั้งเดิม ไม่ใช่การใช้การเข้ารหัสลับที่ไม่ดีด้วยตนเองสำหรับโปรโตคอลใหม่ หากคุณสันนิษฐานเช่นนั้น มีข้อผิดพลาดและการปฏิบัติที่ไม่ดีมากมายเกิดขึ้นที่นี่ และอาจได้ผลเพราะโชคช่วยเท่านั้น แต่ฉันสงสัยเกี่ยวกับการโจมตีที่ใช้งานได้จริง
in flag
@SAIPeregrinus ฉันสนใจมากกว่าว่าความลับที่ใช้ร่วมกันนั้นใช้กับรหัสหรือไม่ และถ้าสามารถกู้คืนได้ แทนที่จะพยายามจัดการข้อความล้วนหากเหมาะสม เพราะสิ่งเหล่านี้ไม่ใช่ปัญหา เว้นแต่จะมีคนควบคุมอย่างเต็มที่และสามารถอ่านและเขียนได้ ข้อความธรรมดาทั้งสองทิศทางของกระแส เหตุผลเดียวที่ใช้การเข้ารหัสทั้งหมดเป็นเพราะความพยายามของ MITM ก่อนหน้านี้ผ่านวิศวกรรมสังคมซึ่งไม่เคยก่อให้เกิดอันตรายอย่างแท้จริง
Score:2
ธง in

หากคีย์และ IV เหมือนกัน ดังนั้นค่ากลางค่าแรกหลังจากการเข้ารหัสบล็อกที่มี XOR'ed กับไบต์แรกจะเหมือนกันระหว่างการดำเนินการเข้ารหัสสองครั้งซึ่งหมายความว่าหากไบต์แรกของข้อความธรรมดาเหมือนกัน ก็จะส่งผลให้ข้อความไซเฟอร์เท็กซ์เหมือนกัน ทำให้ข้อมูลรั่วไหลไปยังผู้โจมตีได้

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

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


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

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


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

ฉันค่อนข้างสงสัยในความปลอดภัยของโปรโตคอลที่คุณอธิบายเนื่องจากการปฏิบัติที่ไม่ดีในการเข้ารหัสเหล่านี้ แม้ว่าการใช้โหมด CFB-8 อาจเป็นข้อบ่งชี้ที่เพียงพอแล้วว่าผู้ออกแบบโปรโตคอลไม่รู้ว่ากำลังทำอะไรอยู่

Maarten Bodewes avatar
in flag
กล่าวอีกนัยหนึ่ง: ?ทำซ้ำตั้งแต่เริ่มต้น...
Score:-1
ธง si

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

ดูเหมือนว่าคุณอาจใช้ IV เดิมซ้ำสำหรับหลายข้อความ นั่นทำให้การอ้างสิทธิ์ด้านความปลอดภัยของ CFB เป็นโมฆะ แม้ว่าจะถูกเก็บเป็นความลับก็ตาม คุณอาจต้องการโหมดป้องกันการใช้งานในทางที่ผิด เช่น AES-GCM-SIV หากคุณไม่สามารถรับประกัน IV ใหม่สำหรับทุกข้อความ

in flag
ไม่มีการส่ง IV IV นั้นเหมือนกับคีย์เว้นแต่ว่านี่คือรายละเอียดการใช้งานของ AES-CFB ซึ่งรวม IV ไว้ในข้อความเข้ารหัส แต่ฉันสงสัยว่า "ดูเหมือนว่าคุณอาจใช้ IV เดิมซ้ำสำหรับหลายข้อความนั่นทำให้การอ้างสิทธิ์ด้านความปลอดภัยของ CFB เป็นโมฆะ แม้ว่าจะถูกเก็บเป็นความลับก็ตาม” นี่คือคำอธิบายที่ฉันต้องการทราบเพิ่มเติม แล้วมันพังได้อย่างไร? ฉันสนใจมากกว่าว่าทำไมมันถึงแย่แทนที่จะเป็นแย่เพราะฉันรู้ว่า IV ซ้ำและ IV เป็นคีย์ (IV ไม่เคยสร้างแบบสุ่มต่อ msg หรือส่ง)

โพสต์คำตอบ

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