เมื่อคุณได้ยินคำว่า “การเข้ารหัส” บางคนจำรหัสผ่าน WiFi ของตนได้ กุญแจสีเขียวที่อยู่ถัดจากที่อยู่เว็บไซต์โปรดของพวกเขา และความยากลำบากในการเข้าอีเมลของผู้อื่น คนอื่นๆ จำช่องโหว่ต่างๆ มากมายในช่วงไม่กี่ปีที่ผ่านมาโดยบอกคำย่อ (DROWN, FREAK, POODLE...) โลโก้ที่มีสไตล์ และคำเตือนให้อัปเดตเบราว์เซอร์ของคุณอย่างเร่งด่วน
การเข้ารหัสครอบคลุมทุกอย่าง แต่ สาระสำคัญ ในอีก ประเด็นก็คือมีเส้นแบ่งระหว่างความเรียบง่ายและซับซ้อน บางสิ่งทำง่ายแต่ประกอบกลับยาก เช่น ตอกไข่ สิ่งอื่นๆ ที่ทำได้ง่ายแต่ยากที่จะเอากลับคืนมาเมื่อชิ้นส่วนเล็กๆ สำคัญ และสำคัญหายไป เช่น การเปิดประตูที่ล็อคเมื่อมี "ส่วนสำคัญ" คือกุญแจ การเข้ารหัสศึกษาสถานการณ์เหล่านี้และวิธีการนำไปใช้ในทางปฏิบัติ
ในช่วงไม่กี่ปีที่ผ่านมา การรวบรวมการโจมตีด้วยการเข้ารหัสได้กลายเป็นสวนสัตว์ที่มีโลโก้ฉูดฉาด เต็มไปด้วยสูตรจากเอกสารทางวิทยาศาสตร์ และก่อให้เกิดความรู้สึกเศร้าหมองโดยทั่วไปว่าทุกอย่างพังทลาย แต่ในความเป็นจริงแล้ว การโจมตีหลายครั้งนั้นอิงตามหลักการทั่วไปบางประการ และหน้าสูตรต่างๆ ที่ไม่มีที่สิ้นสุดมักจะถูกนำมาสรุปเป็นแนวคิดที่เข้าใจง่าย
ในบทความชุดนี้ เราจะดูการโจมตีด้วยการเข้ารหัสประเภทต่างๆ โดยเน้นที่หลักการพื้นฐาน โดยทั่วไปและไม่ได้เรียงตามลำดับนี้ทั้งหมด แต่เราจะกล่าวถึงสิ่งต่อไปนี้:
- กลยุทธ์พื้นฐาน: กำลังเดรัจฉาน การวิเคราะห์ความถี่ การประมาณค่า การลดระดับ และข้ามโปรโตคอล
- ช่องโหว่ที่มีตราสินค้า: ประหลาด อาชญากรรม พุดเดิ้ล จมน้ำ Logjam
- กลยุทธ์ขั้นสูง: การโจมตีของออราเคิล (การโจมตีของ Vodenet, การโจมตีของ Kelsey); วิธีการพบปะตรงกลาง, การโจมตีวันเกิด, อคติทางสถิติ (การเข้ารหัสเชิงอนุพันธ์, การเข้ารหัสเชิงบูรณาการ ฯลฯ )
- การโจมตีช่องด้านข้าง และญาติสนิท เทคนิคการวิเคราะห์ความล้มเหลว
- การโจมตีการเข้ารหัสคีย์สาธารณะ: คิวบ์รูท, การออกอากาศ, ข้อความที่เกี่ยวข้อง, การโจมตีของคอปเปอร์สมิธ, อัลกอริธึม Pohlig-Hellman, ตะแกรงตัวเลข, การโจมตีของ Wiener, การโจมตีของ Bleichenbacher
บทความนี้ครอบคลุมเนื้อหาข้างต้นจนถึงการโจมตีของ Kelsey
กลยุทธ์พื้นฐาน
การโจมตีต่อไปนี้นั้นเรียบง่ายในแง่ที่ว่าสามารถอธิบายได้เกือบทั้งหมดโดยไม่มีรายละเอียดทางเทคนิคมากนัก มาอธิบายการโจมตีแต่ละประเภทด้วยคำศัพท์ที่ง่ายที่สุด โดยไม่ต้องพูดถึงตัวอย่างที่ซับซ้อนหรือกรณีการใช้งานขั้นสูง
การโจมตีเหล่านี้บางส่วนล้าสมัยไปมากและไม่ได้ใช้มาหลายปีแล้ว คนอื่นๆ เป็นคนรุ่นเก่าที่ยังคงแอบดูนักพัฒนาระบบ cryptosystem ที่ไม่สงสัยในศตวรรษที่ 21 อยู่เป็นประจำ ยุคของการเข้ารหัสสมัยใหม่ถือได้ว่าเริ่มต้นด้วยการถือกำเนิดของ IBM DES ซึ่งเป็นรหัสแรกที่ทนทานต่อการโจมตีทั้งหมดในรายการนี้
แรงดุร้ายที่เรียบง่าย
รูปแบบการเข้ารหัสประกอบด้วยสองส่วน: 1) ฟังก์ชั่นการเข้ารหัสซึ่งรับข้อความ (ข้อความธรรมดา) รวมกับคีย์จากนั้นสร้างข้อความที่เข้ารหัส - ไซเฟอร์เท็กซ์; 2) ฟังก์ชั่นถอดรหัสที่ใช้ไซเฟอร์เท็กซ์และคีย์และสร้างข้อความธรรมดา ทั้งการเข้ารหัสและการถอดรหัสจะต้องคำนวณได้ง่ายด้วยคีย์ และยากต่อการคำนวณหากไม่มีคีย์
สมมติว่าเราเห็นไซเฟอร์เท็กซ์แล้วพยายามถอดรหัสโดยไม่มีข้อมูลเพิ่มเติมใดๆ (ซึ่งเรียกว่าการโจมตีเฉพาะไซเฟอร์เท็กซ์) หากเราพบคีย์ที่ถูกต้องอย่างน่าอัศจรรย์ เราสามารถยืนยันได้อย่างง่ายดายว่าถูกต้องแน่นอนหากผลลัพธ์เป็นข้อความที่สมเหตุสมผล
โปรดทราบว่ามีข้อสันนิษฐานโดยนัยสองข้อที่นี่ อันดับแรก เรารู้วิธีทำการถอดรหัส ซึ่งก็คือวิธีการทำงานของระบบเข้ารหัส นี่เป็นสมมติฐานมาตรฐานเมื่อพูดถึงการเข้ารหัส การซ่อนรายละเอียดการใช้งานการเข้ารหัสจากผู้โจมตีอาจดูเหมือนเป็นมาตรการรักษาความปลอดภัยเพิ่มเติม แต่เมื่อผู้โจมตีทราบรายละเอียดเหล่านี้แล้ว การรักษาความปลอดภัยเพิ่มเติมนี้จะสูญหายไปอย่างเงียบๆ และไม่สามารถย้อนกลับได้ นั่นเป็นวิธีที่
ประการที่สอง เราถือว่าคีย์ที่ถูกต้องเป็นคีย์เดียวที่จะนำไปสู่การถอดรหัสที่สมเหตุสมผล นี่เป็นสมมติฐานที่สมเหตุสมผลเช่นกัน จะพอใจถ้าไซเฟอร์เท็กซ์ยาวกว่าคีย์มากและสามารถอ่านได้ โดยปกติจะเป็นสิ่งที่เกิดขึ้นในโลกแห่งความเป็นจริง ยกเว้น
จากที่กล่าวมาข้างต้น จึงมีกลยุทธ์เกิดขึ้น: ตรวจสอบทุกคีย์ที่เป็นไปได้ สิ่งนี้เรียกว่ากำลังดุร้าย และการโจมตีดังกล่าวรับประกันว่าจะได้ผลกับยันต์ที่ใช้งานได้จริงทั้งหมด - ในที่สุด ตัวอย่างเช่น การใช้กำลังดุร้ายก็เพียงพอที่จะแฮ็กได้
น่าเสียดายสำหรับนักเข้ารหัสลับ การเพิ่มขนาดคีย์เป็นการป้องกันที่ดีต่อการใช้กำลังดุร้าย เมื่อขนาดคีย์เพิ่มขึ้น จำนวนคีย์ที่เป็นไปได้จะเพิ่มขึ้นแบบทวีคูณ ด้วยขนาดคีย์ที่ทันสมัย การใช้กำลังแบบเดรัจฉานธรรมดาจึงทำไม่ได้โดยสิ้นเชิง เพื่อให้เข้าใจถึงสิ่งที่เราหมายถึง มาดูซูเปอร์คอมพิวเตอร์ที่รู้จักเร็วที่สุดในช่วงกลางปี 2019 กัน:
การใช้กำลังดุร้ายควรถือเป็นความอยากรู้อยากเห็นทางประวัติศาสตร์หรือไม่? ไม่ใช่เลย: มันเป็นส่วนประกอบที่จำเป็นในตำราอาหารด้านการเข้ารหัส ไม่ค่อยมีรหัสที่อ่อนแอมากจนสามารถถูกทำลายได้ด้วยการโจมตีที่ชาญฉลาดเท่านั้น โดยไม่ต้องใช้กำลังแม้แต่น้อย การแฮ็กที่ประสบความสำเร็จหลายครั้งใช้วิธีอัลกอริธึมเพื่อทำให้การเข้ารหัสเป้าหมายอ่อนลงก่อน จากนั้นจึงทำการโจมตีแบบเดรัจฉาน
การวิเคราะห์ความถี่
ข้อความส่วนใหญ่ไม่พูดพล่อยๆ ตัวอย่างเช่น ในข้อความภาษาอังกฤษมีตัวอักษร 'e' และบทความ 'the' หลายตัว; ในไฟล์ไบนารี่ จะมีไบต์เป็นศูนย์จำนวนมากเป็นช่องว่างระหว่างส่วนข้อมูล การวิเคราะห์ความถี่คือการโจมตีใดๆ ที่ใช้ประโยชน์จากข้อเท็จจริงข้อนี้
ตัวอย่างที่ยอมรับได้ของการเข้ารหัสที่เสี่ยงต่อการโจมตีนี้คือการเข้ารหัสแบบแทนที่อย่างง่าย ในรหัสนี้ คีย์คือตารางที่มีการแทนที่ตัวอักษรทั้งหมด ตัวอย่างเช่น 'g' จะถูกแทนที่ด้วย 'h', 'o' ด้วย j ดังนั้นคำว่า 'go' จึงกลายเป็น 'hj' รหัสนี้ยากที่จะใช้กำลังเดรัจฉานเนื่องจากมีตารางการค้นหาที่เป็นไปได้มากมาย หากคุณสนใจคณิตศาสตร์ ความยาวคีย์ที่มีประสิทธิภาพคือประมาณ 88 บิต นั่นก็คือ
. แต่การวิเคราะห์ความถี่มักจะทำให้งานเสร็จเร็ว
พิจารณาไซเฟอร์เท็กซ์ต่อไปนี้ที่ประมวลผลด้วยรหัสทดแทนแบบง่าย:
XDYLY น่าเกลียด XDWNKE WN DYAJYN ANF YALXD DGLAXWG XDAN ALY FLYAUX GR WN OGQL ZDWBGEGZDO
ตั้งแต่ Y
เกิดขึ้นบ่อยครั้ง รวมทั้งต่อท้ายคำหลายๆ คำ เราก็สามารถสันนิษฐานได้ว่านี่คือตัวอักษร e
:
XDeLe ALe UGLe XDWNKE WN DeAJeN ANF eALXD DGLAXWG XDAN ALe FLeAUX GR WN OGQL ZDWBGEGZDO
คู่ XD
ซ้ำที่จุดเริ่มต้นของคำหลายคำ โดยเฉพาะอย่างยิ่งการรวมกัน XDeLe แนะนำคำนี้อย่างชัดเจน these
หรือ there
เรามาทำต่อ:
theLe ALe UGLe thWNKE WN heAJeN ANF eALth DGLAtWG กว่า ALe FLeAUt GR WN OGQL ZDWBGEGZDO
ให้เราสันนิษฐานต่อไปว่า L
สอดคล้องกับ r
, A
- a
และอื่น ๆ อาจต้องใช้เวลาพยายามสักสองสามครั้ง แต่เมื่อเปรียบเทียบกับการโจมตีแบบเดรัจฉานเต็มกำลัง การโจมตีนี้จะกู้คืนข้อความต้นฉบับได้ในเวลาไม่นาน:
มีหลายสิ่งหลายอย่างในสวรรค์และโลก Horatio มากกว่าที่คุณฝันถึงในปรัชญาของคุณ
สำหรับบางคน การแก้ปัญหา “คริปโทแกรม” ดังกล่าวเป็นงานอดิเรกที่น่าตื่นเต้น
แนวคิดของการวิเคราะห์ความถี่นั้นเป็นพื้นฐานมากกว่าที่เห็นในครั้งแรก และใช้ได้กับยันต์ที่ซับซ้อนกว่ามาก ตลอดประวัติศาสตร์ การออกแบบการเข้ารหัสต่างๆ ได้พยายามตอบโต้การโจมตีดังกล่าวโดยใช้ "การทดแทนแบบพหุอักษร" ในระหว่างขั้นตอนการเข้ารหัส ตารางการแทนที่ตัวอักษรได้รับการแก้ไขด้วยวิธีที่ซับซ้อนแต่คาดเดาได้ซึ่งขึ้นอยู่กับคีย์ ยันต์ทั้งหมดนี้ถือว่ายากที่จะทำลายในคราวเดียว แต่การวิเคราะห์ความถี่เพียงเล็กน้อยก็เอาชนะพวกเขาทั้งหมดได้ในที่สุด
รหัสพหุอักษรที่ทะเยอทะยานที่สุดในประวัติศาสตร์ และอาจมีชื่อเสียงมากที่สุดคือรหัสปริศนาแห่งสงครามโลกครั้งที่สอง มันค่อนข้างซับซ้อนเมื่อเทียบกับรุ่นก่อน แต่หลังจากทำงานหนักมาก นักเข้ารหัสลับชาวอังกฤษก็ถอดรหัสมันได้โดยใช้การวิเคราะห์ความถี่ แน่นอนว่าพวกเขาไม่สามารถพัฒนาการโจมตีที่สง่างามเหมือนที่แสดงไว้ด้านบนได้ พวกเขาต้องเปรียบเทียบคู่ของข้อความธรรมดาและไซเฟอร์เท็กซ์ที่รู้จัก (ที่เรียกว่า "การโจมตีด้วยข้อความธรรมดา") กระทั่งกระตุ้นให้ผู้ใช้ Enigma เข้ารหัสข้อความบางข้อความและวิเคราะห์ผลลัพธ์ ("การโจมตีด้วยข้อความธรรมดาที่เลือก") แต่สิ่งนี้ไม่ได้ทำให้ชะตากรรมของกองทัพศัตรูที่พ่ายแพ้และเรือดำน้ำที่จมได้ง่ายขึ้นอีกต่อไป
หลังจากชัยชนะนี้ การวิเคราะห์ความถี่ก็หายไปจากประวัติศาสตร์ของการเข้ารหัส การเข้ารหัสในยุคดิจิทัลสมัยใหม่ได้รับการออกแบบมาให้ทำงานกับบิต ไม่ใช่ตัวอักษร ที่สำคัญกว่านั้น รหัสเหล่านี้ได้รับการออกแบบมาโดยมีความเข้าใจอันลึกซึ้งเกี่ยวกับสิ่งที่ต่อมากลายเป็นที่รู้จักในนาม
การคำนวณเบื้องต้น
เอาเมืองสมมุติ พรีคอมไฮท์ส ประชากร 200 คน บ้านแต่ละหลังในเมืองมีมูลค่าของมีค่าโดยเฉลี่ย 000 ดอลลาร์ แต่มีมูลค่าไม่เกิน 30 ดอลลาร์ ตลาดความปลอดภัยใน Precom ถูกผูกขาดโดย ACME Industries ซึ่งเป็นผู้ผลิตระบบล็อคประตูระดับ Coyote™ ในตำนาน ตามการวิเคราะห์ของผู้เชี่ยวชาญ ระบบล็อคระดับโคโยตี้สามารถถูกทำลายได้ด้วยเครื่องจักรสมมุติที่ซับซ้อนมากเท่านั้น การสร้างซึ่งต้องใช้เงินลงทุนประมาณห้าปีและ 000 ดอลลาร์ เมืองนี้ปลอดภัยหรือไม่?
เป็นไปได้มากว่าไม่มี ในที่สุดอาชญากรที่มีความทะเยอทะยานก็ปรากฏตัวขึ้น เขาจะให้เหตุผลดังนี้: “ใช่ ฉันต้องเสียค่าใช้จ่ายล่วงหน้าจำนวนมาก อดทนรอห้าปี และ $50 แต่เมื่อฉันทำเสร็จแล้ว ฉันจะเข้าถึง ความมั่งคั่งทั้งหมดของเมืองนี้. ถ้าฉันเล่นไพ่ได้ถูกต้อง การลงทุนนี้จะจ่ายให้กับตัวเองหลายเท่า”
เช่นเดียวกับในการเข้ารหัส การโจมตีรหัสเฉพาะนั้นต้องได้รับการวิเคราะห์ต้นทุนและผลประโยชน์อย่างโหดเหี้ยม หากอัตราส่วนเป็นที่น่าพอใจ การโจมตีจะไม่เกิดขึ้น แต่การโจมตีที่โจมตีผู้ที่อาจเป็นเหยื่อจำนวนมากในคราวเดียวมักจะให้ผลดีเสมอไป ซึ่งในกรณีนี้แนวทางปฏิบัติในการออกแบบที่ดีที่สุดคือถือว่าการโจมตีเหล่านั้นเริ่มต้นตั้งแต่วันแรก เรามีกฎของเมอร์ฟี่เวอร์ชันที่เข้ารหัสไว้: "สิ่งใดก็ตามที่สามารถทำลายระบบได้จริงก็จะทำลายระบบ"
ตัวอย่างที่ง่ายที่สุดของระบบการเข้ารหัสลับที่เสี่ยงต่อการโจมตีด้วยการคำนวณล่วงหน้าคือการเข้ารหัสแบบไม่มีคีย์คงที่ นี่เป็นกรณีของ
แนวคิดนี้เรียบง่าย แม้แต่นักพัฒนาระบบเข้ารหัสมือใหม่ก็มีแนวโน้มที่จะรับรู้ถึงภัยคุกคามและเตรียมพร้อมตามนั้น เมื่อพิจารณาถึงวิวัฒนาการของการเข้ารหัส การโจมตีดังกล่าวไม่เหมาะสมสำหรับการเข้ารหัสส่วนใหญ่ ตั้งแต่เวอร์ชันปรับปรุงครั้งแรกของการเข้ารหัส Caesar จนกระทั่งการเสื่อมถอยของการเข้ารหัสแบบหลายตัวอักษร การโจมตีดังกล่าวกลับมาพร้อมกับการถือกำเนิดของยุคการเข้ารหัสสมัยใหม่เท่านั้น
การกลับมาครั้งนี้เกิดจากปัจจัยสองประการ ประการแรก ในที่สุดระบบเข้ารหัสที่ซับซ้อนเพียงพอก็ปรากฏขึ้น โดยที่ความเป็นไปได้ของการถูกโจมตีหลังจากการแฮ็กไม่ชัดเจน ประการที่สอง การเข้ารหัสแพร่หลายมากจนคนธรรมดาหลายล้านคนตัดสินใจทุกวันว่าจะนำการเข้ารหัสไปใช้ที่ไหนและส่วนใด ต้องใช้เวลาสักระยะก่อนที่ผู้เชี่ยวชาญจะตระหนักถึงความเสี่ยงและแจ้งเตือน
จำการโจมตีแบบคำนวณล่วงหน้าไว้: ในตอนท้ายของบทความ เราจะดูตัวอย่างการเข้ารหัสในชีวิตจริงสองตัวอย่างที่มีบทบาทสำคัญ
การแก้ไข
นี่คือนักสืบชื่อดัง Sherlock Holmes ที่ทำการแทรกแซงโจมตีดร. วัตสันผู้เคราะห์ร้าย:
ฉันเดาได้ทันทีว่าคุณมาจากอัฟกานิสถาน... ความคิดของฉันมีดังนี้: “ ผู้ชายคนนี้เป็นหมอประเภทหนึ่ง แต่เขามีฐานะทางทหาร ก็เป็นหมอทหาร.. เขาเพิ่งมาจากเขตร้อน - ใบหน้าของเขามีสีเข้ม แต่นี่ไม่ใช่สีผิวตามธรรมชาติของเขา เนื่องจากข้อมือของเขาขาวกว่ามาก ใบหน้าซีดเซียว - เห็นได้ชัดว่าเขาต้องทนทุกข์ทรมานมากมายและป่วยหนัก เขาได้รับบาดเจ็บที่มือซ้าย - เขาจับมันไว้โดยไม่เคลื่อนไหวและผิดธรรมชาติเล็กน้อย แพทย์ทหารอังกฤษจะอดทนต่อความยากลำบากและได้รับบาดเจ็บได้ที่ไหนในเขตร้อน? แน่นอนในอัฟกานิสถาน” กระบวนความคิดทั้งหมดใช้เวลาเพียงวินาทีเดียว ฉันเลยบอกว่าคุณมาจากอัฟกานิสถาน และคุณก็ประหลาดใจ
โฮล์มส์สามารถดึงข้อมูลเพียงเล็กน้อยจากหลักฐานแต่ละชิ้นแยกกัน เขาสามารถบรรลุข้อสรุปได้โดยการพิจารณาทั้งหมดร่วมกัน การโจมตีแบบสอดแทรกทำงานในลักษณะเดียวกันโดยการตรวจสอบคู่ข้อความธรรมดาและข้อความไซเฟอร์เท็กซ์ที่รู้จักซึ่งเป็นผลมาจากคีย์เดียวกัน จากแต่ละคู่ การสังเกตส่วนบุคคลจะถูกแยกออกมาเพื่อให้สามารถสรุปทั่วไปเกี่ยวกับคีย์ได้ ข้อสรุปทั้งหมดนี้คลุมเครือและดูไร้ประโยชน์จนกระทั่งถึงจุดวิกฤตอย่างกะทันหันและนำไปสู่ข้อสรุปเดียวที่เป็นไปได้: ไม่ว่ามันจะเหลือเชื่อแค่ไหน มันก็ต้องเป็นเรื่องจริง หลังจากนี้คีย์จะถูกเปิดเผยหรือกระบวนการถอดรหัสได้รับการปรับปรุงให้ดีขึ้นจนสามารถจำลองแบบได้
เรามาอธิบายด้วยตัวอย่างง่ายๆ ว่าการแก้ไขทำงานอย่างไร สมมติว่าเราต้องการอ่านไดอารี่ส่วนตัวของศัตรูของเรา บ๊อบ เขาเข้ารหัสทุกตัวเลขในไดอารี่โดยใช้ระบบเข้ารหัสง่ายๆ ที่เขาเรียนรู้จากโฆษณาในนิตยสาร "A Mock of Cryptography" ระบบทำงานดังนี้: บ๊อบเลือกตัวเลขสองตัวที่เขาชอบ: и . จากนี้ไปจะเข้ารหัสหมายเลขใดก็ได้ มันจะคำนวณ . เช่น ถ้าบ๊อบเลือก и แล้วตามด้วยหมายเลข จะถูกเข้ารหัสเป็น .
สมมติว่าในวันที่ 28 ธันวาคม เราสังเกตเห็นว่าบ๊อบกำลังขีดเขียนอะไรบางอย่างในไดอารี่ของเขา เมื่อเสร็จแล้วเราจะหยิบมันขึ้นมาดูรายการสุดท้ายอย่างเงียบ ๆ :
วันที่:
235/520
ถึงไดรี่,
วันนี้เป็นวันดี. ผ่าน
64
วันนี้ฉันมีนัดกับอลิสาซึ่งอาศัยอยู่ในอพาร์ตเมนต์843
. ฉันคิดจริงๆว่าเธออาจจะเป็น26
!
เนื่องจากเราจริงจังมากกับการติดตาม Bob ในวันที่ของเขา (เราอายุ 15 ปีทั้งคู่ในสถานการณ์นี้) จึงจำเป็นอย่างยิ่งที่จะต้องทราบวันที่และที่อยู่ของ Alice โชคดีที่เราสังเกตเห็นว่าระบบเข้ารหัสของ Bob เสี่ยงต่อการถูกโจมตีแบบสอดแทรก เราอาจจะไม่รู้ и แต่เรารู้วันที่ของวันนี้ ดังนั้นเราจึงมีคู่ข้อความธรรมดา-ไซเฟอร์เท็กซ์สองคู่ กล่าวคือเรารู้สิ่งนั้น เข้ารหัสใน และ - ใน . นี่คือสิ่งที่เราจะเขียนลงไป:
เนื่องจากเราอายุ 15 ปี เราจึงรู้อยู่แล้วเกี่ยวกับระบบสมการสองสมการที่มีไม่ทราบค่าสองตัว ซึ่งในกรณีนี้ก็เพียงพอที่จะค้นหา и โดยไม่มีปัญหาใดๆ คู่ข้อความธรรมดา-ไซเฟอร์เท็กซ์แต่ละคู่วางข้อจำกัดบนคีย์ของ Bob และข้อจำกัดทั้งสองร่วมกันก็เพียงพอที่จะกู้คืนคีย์ได้อย่างสมบูรณ์ ในตัวอย่างของเรา คำตอบคือ и (ที่ , ดังนั้น 26
ในไดอารี่ตรงกับคำว่า 'อันหนึ่ง' นั่นคือ "อันเดียวกัน" - ประมาณ เลน)
แน่นอนว่าการโจมตีแบบสอดแทรกนั้นไม่จำกัดเพียงตัวอย่างง่ายๆ ดังกล่าว ระบบเข้ารหัสทุกระบบที่ลดขนาดลงเหลือวัตถุทางคณิตศาสตร์ที่เข้าใจกันดีและรายการพารามิเตอร์มีความเสี่ยงที่จะถูกโจมตีด้วยการประมาณค่า—ยิ่งวัตถุนั้นเข้าใจได้มากเท่าใด ความเสี่ยงก็จะยิ่งสูงขึ้นเท่านั้น
ผู้มาใหม่มักบ่นว่าการเข้ารหัสคือ “ศิลปะของการออกแบบสิ่งต่าง ๆ ที่น่าเกลียดที่สุด” การโจมตีแบบสอดแทรกอาจเป็นโทษส่วนใหญ่ Bob สามารถใช้การออกแบบทางคณิตศาสตร์ที่หรูหราหรือเก็บเดทของเขากับอลิซไว้เป็นส่วนตัว แต่อนิจจา โดยปกติคุณไม่สามารถมีทั้งสองวิธีได้ สิ่งนี้จะชัดเจนมากขึ้นเมื่อเราเข้าสู่หัวข้อการเข้ารหัสคีย์สาธารณะในที่สุด
ข้ามโปรโตคอล/ดาวน์เกรด
ใน Now You See Me (2013) กลุ่มนักเล่นกลลวงตาพยายามที่จะฉ้อโกงเจ้าสัวประกันภัยที่ทุจริต Arthur Tressler จากทรัพย์สมบัติทั้งหมดของเขา เพื่อเข้าถึงบัญชีธนาคารของอาเธอร์ นักเล่นกลลวงตาจะต้องระบุชื่อผู้ใช้และรหัสผ่านหรือบังคับให้เขาปรากฏตัวที่ธนาคารด้วยตนเองและเข้าร่วมในโครงการ
ทั้งสองตัวเลือกนั้นยากมาก พวกเขาคุ้นเคยกับการแสดงบนเวทีและไม่มีส่วนร่วมในการปฏิบัติการข่าวกรอง ดังนั้นพวกเขาจึงเลือกตัวเลือกที่สาม: ผู้สมรู้ร่วมคิดโทรหาธนาคารและแกล้งทำเป็นอาเธอร์ ธนาคารถามคำถามหลายข้อเพื่อยืนยันตัวตน เช่น ชื่อลุงและชื่อของสัตว์เลี้ยงตัวแรก ฮีโร่ของเราล่วงหน้า
(ตามตำนานเมืองที่เราได้ตรวจสอบและยืนยันเป็นการส่วนตัวแล้ว Eli Beaham นักเข้ารหัสลับเคยพบกับพนักงานธนาคารที่ยืนกรานที่จะตั้งคำถามเพื่อความปลอดภัย เมื่อพนักงานบอกชื่อคุณยายของเขา Beaham ก็เริ่มพูดว่า: “Capital X, เล็ก ย สาม... ")
ในการเข้ารหัสจะเหมือนกัน หากมีการใช้โปรโตคอลการเข้ารหัสสองโปรโตคอลพร้อมกันเพื่อปกป้องสินทรัพย์เดียวกัน และโปรโตคอลหนึ่งอ่อนแอกว่าอีกโปรโตคอลหนึ่งมาก ระบบที่เกิดขึ้นจะเสี่ยงต่อการโจมตีข้ามโปรโตคอล โดยที่โปรโตคอลที่อ่อนแอกว่าจะถูกโจมตีเพื่อรับรางวัลโดยไม่ต้องแตะต้องโปรโตคอลที่แข็งแกร่งกว่า
ในบางกรณีที่ซับซ้อน การติดต่อเซิร์ฟเวอร์โดยใช้โปรโตคอลที่อ่อนแอกว่านั้นไม่เพียงพอ แต่ต้องอาศัยการมีส่วนร่วมโดยไม่สมัครใจของลูกค้าที่ถูกต้องตามกฎหมาย สิ่งนี้สามารถจัดระเบียบได้โดยใช้สิ่งที่เรียกว่าการโจมตีดาวน์เกรด เพื่อให้เข้าใจการโจมตีนี้ สมมติว่านักเล่นกลลวงตาของเรามีภารกิจที่ยากกว่าในภาพยนตร์ สมมติว่าพนักงานธนาคาร (แคชเชียร์) และอาเธอร์เผชิญกับสถานการณ์ที่ไม่คาดฝันบางประการ ส่งผลให้เกิดบทสนทนาดังต่อไปนี้:
ขโมย: สวัสดี? นี่คืออาเธอร์ เทรสเลอร์ ฉันต้องการรีเซ็ตรหัสผ่านของฉัน
แคชเชียร์: ยอดเยี่ยม. โปรดดูหนังสือรหัสลับส่วนตัวของคุณ หน้า 28 คำ 3 ข้อความต่อไปนี้ทั้งหมดจะถูกเข้ารหัสโดยใช้คำเฉพาะนี้เป็นกุญแจ PQJGH. LOTJNAM PGGY MXVRL ZZLQ SRIU HHNMLPPPV…
ขโมย: เฮ้ เฮ้ รอ รอ นี่จำเป็นจริงๆเหรอ? เราคุยกันแบบคนปกติไม่ได้เหรอ?
แคชเชียร์: ฉันไม่แนะนำให้ทำเช่นนี้
ขโมย: ฉันแค่... ดูสิ ฉันมีวันที่แย่มาก โอเคไหม? ฉันเป็นลูกค้าวีไอพี และฉันไม่อยู่ในอารมณ์ที่จะค้นหาหนังสือโค้ดโง่ๆ พวกนี้
แคชเชียร์: ดี. ถ้าคุณยืนกราน คุณเทรสเลอร์ คุณต้องการอะไร?
ขโมย: ได้โปรด ฉันอยากจะบริจาคเงินทั้งหมดของฉันให้กับกองทุนเหยื่อแห่งชาติของอาเธอร์ เทรสเลอร์
(หยุดชั่วคราว).
แคชเชียร์: ตอนนี้ชัดเจนแล้ว. โปรดระบุ PIN ของคุณสำหรับธุรกรรมขนาดใหญ่
ขโมย: อะไรของฉัน?
แคชเชียร์: ตามคำขอส่วนตัวของคุณ ธุรกรรมขนาดนี้ต้องใช้ PIN สำหรับธุรกรรมขนาดใหญ่ รหัสนี้มอบให้กับคุณเมื่อคุณเปิดบัญชีของคุณ
ขโมย:... ฉันทำมันหาย. นี่จำเป็นจริงๆเหรอ? คุณไม่สามารถอนุมัติข้อตกลงได้หรือไม่?
แคชเชียร์: เลขที่ ฉันขอโทษ คุณเทรสเลอร์ นี่เป็นมาตรการรักษาความปลอดภัยที่คุณขออีกครั้ง หากคุณต้องการ เราสามารถส่งรหัส PIN ใหม่ไปยังกล่องจดหมายของคุณได้
ฮีโร่ของเราเลื่อนการดำเนินการออกไป พวกเขาแอบฟังธุรกรรมจำนวนมากของ Tressler โดยหวังว่าจะได้ยิน PIN; แต่ทุกครั้งที่บทสนทนากลายเป็นคำพูดที่ไม่มีความหมายก่อนที่จะพูดอะไรที่น่าสนใจ ในที่สุดวันหนึ่ง แผนนี้ก็ถูกนำไปปฏิบัติ พวกเขารออย่างอดทนเมื่อ Tressler ต้องทำธุรกรรมขนาดใหญ่ทางโทรศัพท์ เขาก็กดรับสาย จากนั้น...
เทรสเลอร์: สวัสดี ฉันต้องการทำธุรกรรมระยะไกลให้เสร็จสิ้น โปรด
แคชเชียร์: ยอดเยี่ยม. โปรดดูสมุดรหัสลับส่วนตัวของคุณ หน้า...
(หัวขโมยกดปุ่ม; เสียงแคชเชียร์เปลี่ยนเป็นเสียงที่ไม่อาจเข้าใจได้)
แคชเชียร์: - #@$#@$#*@$$@#* จะถูกเข้ารหัสโดยใช้คำนี้เป็นกุญแจ AAAYRR PLRQRZ MMNJK LOJBAN…
เทรสเลอร์: ขออภัย ฉันไม่ค่อยเข้าใจ อีกครั้ง? ในหน้าไหน? คำอะไร?
แคชเชียร์: นี่คือเพจ @#$@#*$)#*#@()#@$(#@*$(#@*.
เทรสเลอร์: อะไร
แคชเชียร์: คำหมายเลขยี่สิบ @$#@$#%#$
เทรสเลอร์: อย่างจริงจัง! พอแล้ว! คุณและโปรโตคอลความปลอดภัยของคุณเป็นเหมือนละครสัตว์ ฉันรู้ว่าคุณคุยกับฉันได้ตามปกติ
แคชเชียร์: ฉันไม่แนะนำ…
เทรสเลอร์: และฉันไม่แนะนำให้คุณเสียเวลาของฉัน ฉันไม่ต้องการได้ยินเรื่องนี้อีกจนกว่าคุณจะแก้ไขปัญหาสายโทรศัพท์ของคุณ เราสามารถสรุปข้อตกลงนี้ได้หรือไม่?
แคชเชียร์:… ใช่. ดี. คุณต้องการอะไร?
เทรสเลอร์: ฉันต้องการโอนเงิน $20 ไปยัง Lord Business Investments เลขที่บัญชี...
แคชเชียร์: ขอเวลาหนึ่งนาที มันเป็นเรื่องใหญ่ โปรดระบุ PIN ของคุณสำหรับธุรกรรมขนาดใหญ่
เทรสเลอร์: อะไร โอ้แม่นเลย 1234.
นี่คือการโจมตีด้านล่าง โปรโตคอลที่อ่อนแอกว่า "เพียงแค่พูดโดยตรง" ถูกมองว่าเป็น ตัวเลือก ในกรณีฉุกเฉิน และยังอยู่ที่นี่
คุณอาจสงสัยว่าใครที่มีจิตใจถูกต้องจะออกแบบระบบ "ปลอดภัยจนกว่าจะถูกถามเป็นอย่างอื่น" จริง ๆ เหมือนที่อธิบายไว้ข้างต้น แต่เช่นเดียวกับธนาคารสมมุติที่เสี่ยงเพื่อรักษาลูกค้าที่ไม่ชอบการเข้ารหัส ระบบโดยทั่วไปมักจะหันไปสู่ข้อกำหนดที่ไม่แยแสหรือแม้แต่เป็นศัตรูกับความปลอดภัยโดยสิ้นเชิง
นี่คือสิ่งที่เกิดขึ้นกับโปรโตคอล SSLv2 ในปี 1995 รัฐบาลสหรัฐฯ เริ่มมองว่าการเข้ารหัสเป็นอาวุธที่ป้องกันศัตรูทั้งในประเทศและต่างประเทศได้ดีที่สุด โค้ดแต่ละส่วนได้รับการอนุมัติให้ส่งออกจากสหรัฐอเมริกาเป็นรายบุคคล โดยมักจะมีเงื่อนไขว่าอัลกอริทึมจงใจทำให้อ่อนแอลง Netscape ผู้พัฒนาเบราว์เซอร์ยอดนิยม Netscape Navigator ได้รับอนุญาตสำหรับ SSLv2 เฉพาะกับคีย์ RSA 512 บิตที่มีช่องโหว่โดยเนื้อแท้ (และ 40 บิตสำหรับ RC4)
ในตอนท้ายของสหัสวรรษ กฎเกณฑ์ต่างๆ ได้ผ่อนคลายลง และการเข้าถึงการเข้ารหัสสมัยใหม่ก็มีให้ใช้กันอย่างแพร่หลาย อย่างไรก็ตาม ไคลเอนต์และเซิร์ฟเวอร์รองรับการเข้ารหัส "ส่งออก" ที่อ่อนแอลงมานานหลายปี เนื่องจากความเฉื่อยแบบเดียวกับที่รักษาการรองรับระบบเดิมใดๆ ลูกค้าเชื่อว่าพวกเขาอาจพบกับเซิร์ฟเวอร์ที่ไม่รองรับสิ่งอื่นใด เซิร์ฟเวอร์ก็ทำเช่นเดียวกัน แน่นอนว่าโปรโตคอล SSL กำหนดว่าไคลเอนต์และเซิร์ฟเวอร์ไม่ควรใช้โปรโตคอลที่อ่อนแอเมื่อมีโปรโตคอลที่ดีกว่า แต่หลักฐานเดียวกันนี้ใช้กับ Tressler และธนาคารของเขา
ทฤษฎีนี้ค้นพบหนทางสู่การโจมตีระดับสูงสองครั้งที่ทำให้การรักษาความปลอดภัยของโปรโตคอล SSL สั่นคลอนในปี 2015 ซึ่งทั้งสองค้นพบโดยนักวิจัยของ Microsoft และ
ช่องโหว่
ในเวลานั้น การเข้ารหัสเพื่อการส่งออกได้รับการพิจารณาอย่างกว้างขวางว่าล้าสมัยและจำกัด ดังนั้นการโจมตีจึงสร้างความตกใจอย่างยิ่งและส่งผลกระทบต่อโดเมนสำคัญหลายแห่ง รวมถึงเว็บไซต์ทำเนียบขาว, IRS และ NSA ที่แย่ไปกว่านั้นคือปรากฎว่าเซิร์ฟเวอร์ที่มีช่องโหว่จำนวนมากกำลังเพิ่มประสิทธิภาพโดยการใช้คีย์เดียวกันซ้ำแทนที่จะสร้างคีย์ใหม่สำหรับแต่ละเซสชัน สิ่งนี้ทำให้หลังจากดาวน์เกรดโปรโตคอลแล้ว ก็สามารถดำเนินการโจมตีก่อนการคำนวณได้: การแคร็กคีย์หนึ่งคีย์ยังคงมีราคาค่อนข้างแพง ($100 และ 12 ชั่วโมง ณ เวลาที่เผยแพร่) แต่ต้นทุนจริงในการโจมตีการเชื่อมต่อลดลงอย่างมาก การเลือกรหัสเซิร์ฟเวอร์เพียงครั้งเดียวและถอดรหัสการเข้ารหัสสำหรับการเชื่อมต่อที่ตามมาทั้งหมดนับจากนั้นก็เพียงพอแล้ว
และก่อนที่เราจะไปต่อ มีการโจมตีขั้นสูงอย่างหนึ่งที่ต้องพูดถึง...
การโจมตีของออราเคิล
ปล่อยให้บัฟเฟอร์ล้น การฉีดคำสั่ง และอื่นๆ กัน พวกเขาอยู่นอกเหนือขอบเขตของการสนทนานี้ การละเมิด "หลักการลงโทษ" นำไปสู่การแฮ็กการเข้ารหัสที่ร้ายแรงเนื่องจากโปรโตคอลทำงานตรงตามที่คาดไว้
ตัวอย่างเช่น ลองใช้การออกแบบสมมติด้วยรหัสทดแทนที่มีช่องโหว่ แล้วสาธิตการโจมตีที่เป็นไปได้ แม้ว่าเราจะเคยเห็นการโจมตีรหัสทดแทนโดยใช้การวิเคราะห์ความถี่แล้ว แต่ก็ไม่ได้เป็นเพียง "วิธีอื่นในการทำลายรหัสเดียวกัน" ในทางตรงกันข้าม การโจมตีของ Oracle เป็นสิ่งประดิษฐ์ที่ทันสมัยกว่ามาก ซึ่งใช้ได้กับหลาย ๆ สถานการณ์ที่การวิเคราะห์ความถี่ล้มเหลว และเราจะเห็นการสาธิตสิ่งนี้ในหัวข้อถัดไป ที่นี่เลือกรหัสอย่างง่ายเพื่อทำให้ตัวอย่างชัดเจนยิ่งขึ้นเท่านั้น
ดังนั้นอลิซและบ็อบจึงสื่อสารกันโดยใช้รหัสทดแทนแบบง่ายๆ โดยใช้คีย์ที่พวกเขารู้จักเท่านั้น พวกเขาเข้มงวดมากเกี่ยวกับความยาวของข้อความ โดยมีความยาว 20 อักขระพอดี ดังนั้นพวกเขาจึงเห็นพ้องกันว่าหากใครต้องการส่งข้อความที่สั้นกว่านี้ พวกเขาควรเพิ่มข้อความจำลองที่ส่วนท้ายของข้อความเพื่อให้มีความยาว 20 ตัวอักษรพอดี หลังจากพูดคุยกัน พวกเขาก็ตัดสินใจว่าจะยอมรับเฉพาะข้อความจำลองต่อไปนี้เท่านั้น: a
, bb
, ccc
, dddd
ฯลฯ ดังนั้นจึงทราบข้อความจำลองที่มีความยาวตามต้องการ
เมื่ออลิซหรือบ็อบได้รับข้อความ จะต้องตรวจสอบก่อนว่าข้อความนั้นมีความยาวถูกต้อง (20 ตัวอักษร) และส่วนต่อท้ายเป็นข้อความจำลองที่ถูกต้อง หากไม่เป็นเช่นนั้น พวกเขาจะตอบกลับพร้อมข้อความแสดงข้อผิดพลาดที่เหมาะสม หากความยาวของข้อความและข้อความจำลองใช้ได้ ผู้รับจะอ่านข้อความเองและส่งการตอบกลับที่เข้ารหัส
ในระหว่างการโจมตี ผู้โจมตีแอบอ้างเป็นบ็อบและส่งข้อความปลอมถึงอลิซ ข้อความเหล่านี้ไร้สาระโดยสิ้นเชิง - ผู้โจมตีไม่มีรหัส จึงไม่สามารถปลอมแปลงข้อความที่มีความหมายได้ แต่เนื่องจากโปรโตคอลละเมิดหลักการลงโทษ ผู้โจมตียังคงสามารถดักจับอลิซให้เปิดเผยข้อมูลสำคัญได้ ดังที่แสดงด้านล่าง
ขโมย:
PREWF ZHJKL MMMN. LA
อลิซ: ข้อความจำลองไม่ถูกต้อง
ขโมย:
PREWF ZHJKL MMMN. LB
อลิซ: ข้อความจำลองไม่ถูกต้อง
ขโมย:
PREWF ZHJKL MMMN. LC
อลิซ:
ILCT? TLCT RUWO PUT KCAW CPS OWPOW!
หัวขโมยไม่รู้ว่าอลิซพูดอะไร แต่สังเกตเห็นสัญลักษณ์นั้น C
ต้องสอดคล้องกัน a
เนื่องจากอลิซยอมรับข้อความจำลอง
ขโมย:
REWF ZHJKL MMMN. LAA
อลิซ: ข้อความจำลองไม่ถูกต้อง
ขโมย:
REWF ZHJKL MMMN. LBB
อลิซ: ข้อความจำลองไม่ถูกต้อง
หลังจากพยายามมาหลายครั้ง...
ขโมย:
REWF ZHJKL MMMN. LGG
อลิซ: ข้อความจำลองไม่ถูกต้อง
ขโมย:
REWF ZHJKL MMMN. LHH
อลิซ:
TLQO JWCRO FQAW SUY LCR C OWQXYJW. IW PWWR TU TCFA CHUYT TLQO JWFCTQUPOLQZ.
เป็นอีกครั้งที่ผู้โจมตีไม่รู้ว่าอลิซพูดอะไร แต่ตั้งข้อสังเกตว่า H ต้องตรงกับ b เนื่องจากอลิซยอมรับข้อความจำลอง
และอื่นๆจนกว่าผู้โจมตีจะรู้ความหมายของตัวละครแต่ละตัว
เมื่อมองแวบแรก วิธีการนี้จะคล้ายกับการโจมตีด้วยข้อความธรรมดาที่เลือกไว้ ในท้ายที่สุด ผู้โจมตีจะเลือกข้อความไซเฟอร์เท็กซ์ และเซิร์ฟเวอร์จะประมวลผลข้อความเหล่านั้นอย่างเชื่อฟัง ข้อแตกต่างหลักที่ทำให้การโจมตีเหล่านี้ทำงานได้ในโลกแห่งความเป็นจริงก็คือ ผู้โจมตีไม่จำเป็นต้องเข้าถึงข้อความถอดเสียงจริง การตอบสนองของเซิร์ฟเวอร์ แม้แต่การตอบสนองที่ไม่เป็นอันตรายอย่าง “ข้อความจำลองที่ไม่ถูกต้อง” ก็เพียงพอแล้ว
แม้ว่าการโจมตีนี้จะเป็นการให้คำแนะนำ อย่ายึดติดกับข้อมูลเฉพาะของรูปแบบ "ข้อความจำลอง" ระบบเข้ารหัสเฉพาะที่ใช้ หรือลำดับข้อความที่ส่งโดยผู้โจมตีมากเกินไป แนวคิดพื้นฐานคือวิธีที่อลิซมีปฏิกิริยาแตกต่างออกไปตามคุณสมบัติของข้อความธรรมดา และทำเช่นนั้นโดยไม่ได้ตรวจสอบว่าไซเฟอร์เท็กซ์ที่เกี่ยวข้องนั้นมาจากฝ่ายที่เชื่อถือได้จริงๆ ดังนั้นอลิซจึงยอมให้ผู้โจมตีบีบข้อมูลลับออกจากคำตอบของเธอ
มีหลายสิ่งที่สามารถเปลี่ยนแปลงได้ในสถานการณ์นี้ สัญลักษณ์ที่อลิซโต้ตอบ หรือความแตกต่างในพฤติกรรมของเธอ หรือแม้แต่ระบบการเข้ารหัสที่ใช้ แต่หลักการจะยังคงเหมือนเดิม และการโจมตีโดยรวมจะยังคงเกิดขึ้นได้ไม่ทางใดก็ทางหนึ่ง การใช้งานพื้นฐานของการโจมตีนี้ช่วยเปิดเผยจุดบกพร่องด้านความปลอดภัยหลายประการ ซึ่งเราจะมาดูกันเร็วๆ นี้ แต่ก่อนอื่นมีบทเรียนเชิงทฤษฎีที่ต้องเรียนรู้ก่อน จะใช้ "สคริปต์อลิซ" ที่สมมติขึ้นนี้ในการโจมตีที่สามารถทำงานกับรหัสสมัยใหม่ที่แท้จริงได้อย่างไร สิ่งนี้เป็นไปได้แม้กระทั่งในทางทฤษฎีด้วยซ้ำ?
ในปี 1998 Daniel Bleichenbacher นักเข้ารหัสชาวสวิสตอบคำถามนี้ด้วยการยืนยัน เขาสาธิตการโจมตีแบบออราเคิลต่อระบบการเข้ารหัสคีย์สาธารณะ RSA ที่ใช้กันอย่างแพร่หลาย โดยใช้รูปแบบข้อความเฉพาะ ในการใช้งาน RSA บางอย่าง เซิร์ฟเวอร์จะตอบกลับด้วยข้อความแสดงข้อผิดพลาดที่แตกต่างกัน ขึ้นอยู่กับว่าข้อความธรรมดาตรงกับแบบแผนหรือไม่ นี่ก็เพียงพอแล้วสำหรับการโจมตี
สี่ปีต่อมา ในปี 2002 นักเข้ารหัสชาวฝรั่งเศส Serge Vaudenay สาธิตการโจมตีแบบ Oracle เกือบจะเหมือนกับที่อธิบายไว้ในสถานการณ์ของ Alice ข้างต้น ยกเว้นว่าแทนที่จะเป็นรหัสปลอม เขาได้ทำลายรหัสลับสมัยใหม่ระดับที่น่านับถือทั้งหมดซึ่งผู้คนนำไปใช้จริง โดยเฉพาะอย่างยิ่ง การโจมตีของ Vaudenay มุ่งเป้าไปที่การเข้ารหัสที่มีขนาดอินพุตคงที่ ("บล็อคไซเฟอร์") เมื่อใช้ในสิ่งที่เรียกว่า "โหมดการเข้ารหัส CBC" และด้วยรูปแบบการเติมที่ได้รับความนิยม โดยทั่วไปจะเทียบเท่ากับรูปแบบในสถานการณ์ของ Alice
นอกจากนี้ในปี 2002 John Kelsey นักเข้ารหัสชาวอเมริกัน - ผู้เขียนร่วม
ด้านล่างนี้เราจะให้คำอธิบายโดยละเอียดเพิ่มเติมเกี่ยวกับการโจมตี Vaudenay และ Kelsey (เราจะให้คำอธิบายโดยละเอียดเพิ่มเติมเกี่ยวกับการโจมตี Bleichenbacher เมื่อเราไปสู่การโจมตีด้วยการเข้ารหัสคีย์สาธารณะ) แม้ว่าเราจะพยายามอย่างเต็มที่แล้ว แต่ข้อความก็ค่อนข้างเป็นเรื่องทางเทคนิค ดังนั้นหากสิ่งที่กล่าวมาข้างต้นเพียงพอสำหรับคุณ ให้ข้ามสองส่วนถัดไปไปได้เลย
การโจมตีของโวเดเน
เพื่อให้เข้าใจถึงการโจมตี Vaudenay ก่อนอื่นเราต้องพูดคุยเพิ่มเติมอีกเล็กน้อยเกี่ยวกับบล็อคไซเฟอร์และโหมดการเข้ารหัส ดังที่กล่าวไปแล้ว "รหัสบล็อก" คือรหัสที่รับคีย์และอินพุตที่มีความยาวคงที่ ("ความยาวบล็อก") และสร้างบล็อกที่เข้ารหัสซึ่งมีความยาวเท่ากัน บล็อกไซเฟอร์มีการใช้กันอย่างแพร่หลายและถือว่าค่อนข้างปลอดภัย DES ที่เลิกใช้แล้วซึ่งถือเป็นรหัสสมัยใหม่ตัวแรกคือรหัสบล็อก ดังที่กล่าวข้างต้น AES ก็เช่นเดียวกันซึ่งใช้กันอย่างแพร่หลายในปัจจุบัน
น่าเสียดายที่ Block Cipher มีจุดอ่อนที่เห็นได้ชัดอยู่ประการหนึ่ง ขนาดบล็อกโดยทั่วไปคือ 128 บิต หรือ 16 อักขระ แน่นอนว่าการเข้ารหัสสมัยใหม่จำเป็นต้องทำงานกับข้อมูลอินพุตที่มีขนาดใหญ่กว่า และนี่คือจุดที่โหมดการเข้ารหัสเข้ามามีบทบาท โหมดการเข้ารหัสนั้นเป็นแฮ็กโดยพื้นฐานแล้ว มันเป็นวิธีการใช้บล็อกรหัสที่ยอมรับเฉพาะอินพุตขนาดที่กำหนดเท่านั้นเพื่ออินพุตที่มีความยาวตามใจชอบ
การโจมตีของ Vodene มุ่งเน้นไปที่โหมดการทำงานของ CBC (Cipher Block Chaining) ยอดนิยม การโจมตีจะถือว่าบล็อกไซเฟอร์ที่ซ่อนอยู่นั้นเป็นกล่องดำที่มีมนต์ขลังและไม่สามารถเจาะเข้าไปได้ และเลี่ยงการรักษาความปลอดภัยโดยสิ้นเชิง
ต่อไปนี้เป็นแผนภาพที่แสดงวิธีการทำงานของโหมด CBC:
เครื่องหมายบวกวงกลมหมายถึงการดำเนินการ XOR (OR พิเศษ) ตัวอย่างเช่น ได้รับบล็อกที่สองของไซเฟอร์เท็กซ์:
- โดยการดำเนินการ XOR บนบล็อกข้อความธรรมดาที่สองพร้อมกับบล็อกไซเฟอร์เท็กซ์แรก
- การเข้ารหัสบล็อกผลลัพธ์ด้วยรหัสบล็อกโดยใช้คีย์
เนื่องจาก CBC ใช้การดำเนินการไบนารี XOR อย่างหนัก เราจึงใช้เวลาสักครู่เพื่อระลึกถึงคุณสมบัติบางอย่างของมัน:
- ความเป็นอมตะ:
- การสับเปลี่ยน:
- การเชื่อมโยง:
- การย้อนกลับได้เอง:
- ขนาดไบต์: ไบต์ n จาก = (ไบต์ n จาก ) (ไบต์ n จาก )
โดยทั่วไป คุณสมบัติเหล่านี้บอกเป็นนัยว่าถ้าเรามีสมการที่เกี่ยวข้องกับการดำเนินการ XOR และไม่ทราบค่า ก็จะสามารถแก้ไขได้ เช่นถ้าเรารู้ว่า กับสิ่งที่ไม่รู้จัก และมีชื่อเสียง и จากนั้นเราก็สามารถอาศัยคุณสมบัติข้างต้นในการแก้สมการได้ . โดยใส่ XOR ทั้งสองข้างของสมการด้วย , เราได้รับ . ทั้งหมดนี้จะมีความเกี่ยวข้องมากในอีกสักครู่
มีความแตกต่างเล็กน้อยสองประการและความแตกต่างที่สำคัญอย่างหนึ่งระหว่างสถานการณ์อลิซของเรากับการโจมตีของโวเดเนย์ ผู้เยาว์สองคน:
- ในบทภาพยนตร์ อลิซคาดหวังว่าข้อความธรรมดาจะลงท้ายด้วยอักขระ
a
,bb
,ccc
และอื่น ๆ ในการโจมตี Wodene เหยื่อคาดหวังว่าข้อความธรรมดาจะสิ้นสุด N ครั้งด้วยไบต์ N (นั่นคือ เลขฐานสิบหก 01 หรือ 02 02 หรือ 03 03 03 และอื่นๆ) นี่เป็นความแตกต่างด้านเครื่องสำอางล้วนๆ - ในสถานการณ์ของ Alice มันง่ายที่จะบอกได้ว่า Alice ยอมรับข้อความแล้วหรือไม่โดยการตอบกลับว่า "ข้อความจำลองไม่ถูกต้อง" ในการโจมตีของ Vodene จำเป็นต้องมีการวิเคราะห์เพิ่มเติม และการดำเนินการที่แม่นยำกับฝั่งเหยื่อเป็นสิ่งสำคัญ แต่เพื่อความกระชับ ลองถือว่าการวิเคราะห์นี้ยังเป็นไปได้
ความแตกต่างหลัก:
- เนื่องจากเราไม่ได้ใช้ระบบเข้ารหัสเดียวกัน ความสัมพันธ์ระหว่างไบต์ไซเฟอร์เท็กซ์ที่ผู้โจมตีควบคุมและความลับ (คีย์และข้อความธรรมดา) จะแตกต่างกันอย่างเห็นได้ชัด ดังนั้นผู้โจมตีจะต้องใช้กลยุทธ์อื่นเมื่อสร้างไซเฟอร์เท็กซ์และตีความการตอบสนองของเซิร์ฟเวอร์
ความแตกต่างที่สำคัญนี้คือชิ้นส่วนสุดท้ายของปริศนาที่จะเข้าใจการโจมตีของ Vaudenay ดังนั้นเราลองใช้เวลาสักครู่เพื่อคิดว่าเหตุใดและอย่างไรจึงสามารถติดตั้งการโจมตีของ Oracle บน CBC ได้ตั้งแต่แรก
สมมติว่าเราได้รับข้อความไซเฟอร์เท็กซ์ CBC จำนวน 247 บล็อก และเราต้องการถอดรหัสมัน เราสามารถส่งข้อความปลอมไปยังเซิร์ฟเวอร์ได้ เช่นเดียวกับที่เราส่งข้อความปลอมถึงอลิซเมื่อก่อน เซิร์ฟเวอร์จะถอดรหัสข้อความให้เรา แต่จะไม่แสดงการถอดรหัส - ในทางกลับกัน เช่นเดียวกับ Alice เซิร์ฟเวอร์จะรายงานข้อมูลเพียงบิตเดียว: ข้อความธรรมดามีช่องว่างภายในที่ถูกต้องหรือไม่
พิจารณาว่าในสถานการณ์ของอลิซเรามีความสัมพันธ์ดังต่อไปนี้:
$$display$$text{SIMPLE_SUBSTITUTION}(ข้อความ{ciphertext},ข้อความ{key}) = ข้อความ{ข้อความธรรมดา}$$display$$
เรียกสิ่งนี้ว่า "สมการของอลิซ" เราควบคุมไซเฟอร์เท็กซ์ เซิร์ฟเวอร์ (อลิซ) รั่วไหลข้อมูลที่คลุมเครือเกี่ยวกับข้อความธรรมดาที่ได้รับ และสิ่งนี้ทำให้เราสามารถอนุมานข้อมูลเกี่ยวกับปัจจัยสุดท้ายได้ นั่นคือกุญแจสำคัญ โดยการเปรียบเทียบ หากเราพบความเชื่อมโยงดังกล่าวกับสคริปต์ CBC เราอาจสามารถดึงข้อมูลลับบางอย่างจากที่นั่นได้เช่นกัน
โชคดีที่มีความสัมพันธ์ที่เราสามารถใช้ได้จริงๆ พิจารณาผลลัพธ์ของการเรียกครั้งสุดท้ายเพื่อถอดรหัสบล็อคไซเฟอร์และแสดงว่าเอาต์พุตนี้เป็น . เรายังแสดงถึงบล็อกข้อความธรรมดาอีกด้วย และบล็อกไซเฟอร์เท็กซ์ . ลองดูแผนภาพ CBC อีกครั้ง และสังเกตว่าเกิดอะไรขึ้น:
เรียกสิ่งนี้ว่า "สมการ CBC"
ในสถานการณ์ของ Alice ด้วยการตรวจสอบไซเฟอร์เท็กซ์และดูการรั่วไหลของข้อความธรรมดาที่เกี่ยวข้อง เราจึงสามารถติดตั้งการโจมตีที่กู้คืนเทอมที่สามในสมการ ซึ่งก็คือคีย์ได้ ในสถานการณ์ CBC เรายังตรวจสอบไซเฟอร์เท็กซ์และสังเกตการรั่วไหลของข้อมูลบนข้อความธรรมดาที่เกี่ยวข้อง หากการเปรียบเทียบยังคงอยู่เราสามารถรับข้อมูลเกี่ยวกับได้ .
สมมติว่าเราได้ฟื้นฟูจริงๆ แล้วไงล่ะ? ถ้าอย่างนั้น เราก็สามารถพิมพ์ข้อความธรรมดาบล็อกสุดท้ายทั้งหมดพร้อมกันได้ () เพียงเข้าไป (ซึ่งเรามี) และ
ได้รับ ลงในสมการ CBC
ตอนนี้เรามองในแง่ดีเกี่ยวกับแผนการโจมตีโดยรวมแล้ว ก็ถึงเวลาลงรายละเอียด โปรดใส่ใจว่าข้อมูลข้อความธรรมดารั่วไหลบนเซิร์ฟเวอร์ได้อย่างไร ในสคริปต์ของ Alice การรั่วไหลเกิดขึ้นเนื่องจาก Alice จะตอบกลับด้วยข้อความที่ถูกต้องก็ต่อเมื่อ $inline$text{SIMPLE_SUBSTITUTION}(text{ciphertext},text{key})$inline$ ลงท้ายด้วยบรรทัด a
(หรือ bb
และอื่นๆ แต่โอกาสที่เงื่อนไขเหล่านี้จะถูกกระตุ้นโดยบังเอิญนั้นมีน้อยมาก) เช่นเดียวกับ CBC เซิร์ฟเวอร์ยอมรับช่องว่างภายในหากและหากเท่านั้น ลงท้ายด้วยเลขฐานสิบหก 01
. ลองใช้เคล็ดลับเดียวกันนี้: การส่งไซเฟอร์เท็กซ์ปลอมด้วยค่าปลอมของเราเอง จนกว่าเซิร์ฟเวอร์จะยอมรับการเติม
เมื่อเซิร์ฟเวอร์ยอมรับการเติมข้อความปลอมของเรา นั่นหมายความว่า:
ตอนนี้เราใช้คุณสมบัติ XOR ไบต์ไบต์:
เรารู้เทอมที่หนึ่งและสาม และเราได้เห็นแล้วว่าสิ่งนี้ช่วยให้เราสามารถกู้คืนคำที่เหลือ - ไบต์สุดท้ายจาก :
นอกจากนี้ยังให้ไบต์สุดท้ายของบล็อกข้อความธรรมดาสุดท้ายผ่านทางสมการ CBC และคุณสมบัติแบบไบต์ต่อไบต์
เราอาจปล่อยไว้อย่างนั้นและพอใจที่เราได้ทำการโจมตีรหัสที่แข็งแกร่งตามทฤษฎีแล้ว แต่ในความเป็นจริงแล้ว เราสามารถทำอะไรได้มากกว่านั้นอีกมาก: เราสามารถกู้คืนข้อความทั้งหมดได้ สิ่งนี้ต้องใช้กลเม็ดที่ไม่ได้อยู่ในสคริปต์ดั้งเดิมของ Alice และไม่จำเป็นสำหรับการโจมตีของ Oracle แต่ก็ยังคุ้มค่าที่จะเรียนรู้
เพื่อทำความเข้าใจก่อนอื่น โปรดทราบว่าผลลัพธ์ของการส่งออกค่าที่ถูกต้องของไบต์สุดท้ายคือ เรามีความสามารถใหม่ ตอนนี้ เมื่อสร้างไซเฟอร์เท็กซ์ เราสามารถจัดการไบต์สุดท้ายของข้อความธรรมดาที่เกี่ยวข้องได้ สิ่งนี้เกี่ยวข้องกับสมการ CBC และคุณสมบัติแบบไบต์ต่อไบต์อีกครั้ง:
เนื่องจากตอนนี้เรารู้เทอมที่สองแล้ว เราจึงสามารถใช้การควบคุมเหนือเทอมแรกเพื่อควบคุมเทอมที่สามได้ เราเพียงแค่คำนวณ:
ก่อนหน้านี้เราไม่สามารถทำเช่นนี้ได้เนื่องจากเรายังไม่มีไบต์สุดท้าย .
สิ่งนี้จะช่วยเราได้อย่างไร? สมมติว่าตอนนี้เราสร้างไซเฟอร์เท็กซ์ทั้งหมดโดยที่ไบต์สุดท้ายจะเท่ากับในข้อความธรรมดาที่สอดคล้องกัน 02
. ขณะนี้เซิร์ฟเวอร์ยอมรับเฉพาะช่องว่างภายในหากข้อความธรรมดาลงท้ายด้วย 02 02
. เนื่องจากเราแก้ไขไบต์สุดท้าย สิ่งนี้จะเกิดขึ้นก็ต่อเมื่อไบต์สุดท้ายของข้อความธรรมดาเป็น 02 เช่นกัน เราจะส่งบล็อกไซเฟอร์เท็กซ์ปลอมต่อไป โดยเปลี่ยนไบต์สุดท้าย จนกว่าเซิร์ฟเวอร์จะยอมรับการเสริมสำหรับหนึ่งในนั้น ณ จุดนี้เราได้รับ:
และเราจะกู้คืนไบต์สุดท้าย เช่นเดียวกับครั้งล่าสุดที่ได้รับการบูรณะ เราดำเนินต่อไปด้วยจิตวิญญาณเดียวกัน: เราแก้ไขสองไบต์สุดท้ายของข้อความธรรมดาเป็น 03 03
เราทำซ้ำการโจมตีนี้สำหรับไบต์ที่สามจากจุดสิ้นสุดและต่อๆ ไป ในที่สุดก็กู้คืนได้อย่างสมบูรณ์ .
แล้วข้อความที่เหลือล่ะ? โปรดทราบว่าค่า จริงๆ แล้วคือ $inline$text{BLOCK_DECRYPT}(text{key},C_{247})$inline$ เราสามารถใส่บล็อกอื่นแทนได้ และการโจมตีจะยังคงสำเร็จ ในความเป็นจริง เราสามารถขอให้เซิร์ฟเวอร์ทำ $inline$text{BLOCK_DECRYPT}$inline$ สำหรับข้อมูลใดๆ ก็ได้ ณ จุดนี้ เกมจบลงแล้ว - เราสามารถถอดรหัสไซเฟอร์เท็กซ์ใดๆ ก็ได้ (ลองดูแผนภาพการถอดรหัส CBC อีกครั้งเพื่อดูสิ่งนี้ และโปรดทราบว่า IV เป็นแบบสาธารณะ)
วิธีการเฉพาะนี้มีบทบาทสำคัญในการโจมตีของ Oracle ที่เราจะพบในภายหลัง
การโจมตีของเคลซีย์
John Kelsey ผู้ใจดีของเราวางหลักการที่เป็นรากฐานของการโจมตีที่เป็นไปได้มากมาย ไม่ใช่แค่รายละเอียดของการโจมตีเฉพาะกับรหัสเฉพาะ ของเขา
ผลลัพธ์ที่น่าประหลาดใจนี้เกิดจากหลักการสองประการ ประการแรก มีความสัมพันธ์กันอย่างมากระหว่างความยาวของข้อความธรรมดาและความยาวของไซเฟอร์เท็กซ์ สำหรับยันต์หลายตัวมีความเท่าเทียมกันอย่างแน่นอน ประการที่สอง เมื่อทำการบีบอัด ก็มีความสัมพันธ์กันอย่างมากระหว่างความยาวของข้อความที่ถูกบีบอัดและระดับของ "สัญญาณรบกวน" ของข้อความธรรมดา นั่นคือสัดส่วนของอักขระที่ไม่ซ้ำกัน (ศัพท์ทางเทคนิคคือ "เอนโทรปีสูง" ).
หากต้องการดูหลักการในการดำเนินการ ให้พิจารณาข้อความธรรมดาสองข้อความ:
ข้อความธรรมดา 1:
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
ข้อความธรรมดา 2:
ATVXCAGTRSVPTVVULSJQHGEYCMQPCRQBGCYIXCFJGJ
สมมติว่าข้อความธรรมดาทั้งสองถูกบีบอัดแล้วเข้ารหัส คุณได้รับไซเฟอร์เท็กซ์ผลลัพธ์สองอัน และต้องเดาว่าไซเฟอร์เท็กซ์ใดตรงกับข้อความธรรมดาใด:
ไซเฟอร์เท็กซ์ 1:
PVOVEYBPJDPVANEAWVGCIUWAABCIYIKOOURMYDTA
ไซเฟอร์เท็กซ์ 2:
DWKJZXYU
คำตอบนั้นชัดเจน ในบรรดาข้อความธรรมดานั้น เฉพาะข้อความธรรมดา 1 เท่านั้นที่สามารถบีบอัดให้มีความยาวน้อยกว่าของไซเฟอร์เท็กซ์ตัวที่สองได้ เราค้นพบสิ่งนี้โดยไม่รู้อะไรเลยเกี่ยวกับอัลกอริธึมการบีบอัด คีย์เข้ารหัส หรือแม้แต่ตัวเข้ารหัสเอง เมื่อเทียบกับลำดับชั้นของการโจมตีด้วยการเข้ารหัสที่เป็นไปได้ นี่มันค่อนข้างบ้าเลย
เคลซีย์ชี้ให้เห็นเพิ่มเติมว่าภายใต้สถานการณ์ที่ไม่ปกติบางประการ หลักการนี้สามารถนำไปใช้ในการโจมตีแบบออราเคิลได้ โดยเฉพาะอย่างยิ่งจะอธิบายว่าผู้โจมตีสามารถกู้คืนข้อความธรรมดาที่เป็นความลับได้อย่างไรหากเขาสามารถบังคับให้เซิร์ฟเวอร์เข้ารหัสข้อมูลในแบบฟอร์มได้ (ข้อความธรรมดาตามด้วย ขณะที่เขาควบคุมอยู่ และสามารถตรวจสอบความยาวของผลลัพธ์ที่เข้ารหัสได้
เช่นเดียวกับการโจมตีของ Oracle อื่นๆ เรามีความสัมพันธ์:
อีกครั้ง เราควบคุมหนึ่งคำ () เราเห็นข้อมูลรั่วไหลเล็กน้อยเกี่ยวกับสมาชิกรายอื่น (ข้อความเข้ารหัส) และพยายามกู้คืนข้อมูลล่าสุด (ข้อความธรรมดา) แม้จะมีการเปรียบเทียบ แต่นี่เป็นสถานการณ์ที่ค่อนข้างผิดปกติเมื่อเทียบกับการโจมตีของ Oracle อื่น ๆ ที่เราเคยเห็น
เพื่อแสดงให้เห็นว่าการโจมตีดังกล่าวทำงานอย่างไร ลองใช้รูปแบบการบีบอัดข้อมูลสมมติที่เราเพิ่งคิดขึ้นมา: TOYZIP มันจะค้นหาบรรทัดของข้อความที่ปรากฏก่อนหน้านี้ในข้อความ และแทนที่ด้วยไบต์ตัวยึดตำแหน่งสามไบต์ที่ระบุตำแหน่งที่จะค้นหาอินสแตนซ์ก่อนหน้าของบรรทัดและจำนวนครั้งที่ปรากฏที่นั่น เช่น เส้น helloworldhello
สามารถบีบอัดเข้าไปได้ helloworld[00][00][05]
ยาว 13 ไบต์ เทียบกับ 15 ไบต์ดั้งเดิม
สมมติว่าผู้โจมตีพยายามกู้คืนข้อความธรรมดาของแบบฟอร์ม password=...
โดยที่ไม่ทราบรหัสผ่าน ตามรูปแบบการโจมตีของ Kelsey ผู้โจมตีสามารถขอให้เซิร์ฟเวอร์บีบอัดและเข้ารหัสข้อความในแบบฟอร์ม (ข้อความธรรมดาตามด้วย ) ที่ไหน - ข้อความฟรี. เมื่อเซิร์ฟเวอร์ทำงานเสร็จแล้ว ระบบจะรายงานความยาวของผลลัพธ์ การโจมตีดำเนินไปดังนี้:
ขโมย: โปรดบีบอัดและเข้ารหัสข้อความธรรมดาโดยไม่มีช่องว่างภายใน
เซิร์ฟเวอร์: ความยาวผลลัพธ์ 14.
ขโมย: โปรดบีบอัดและเข้ารหัสข้อความธรรมดาที่ต่อท้ายไว้
password=a
.เซิร์ฟเวอร์: ความยาวผลลัพธ์ 18.
หมายเหตุแครกเกอร์: [ต้นฉบับ 14] + [สามไบต์ที่แทนที่ password=
- a
ขโมย: โปรดบีบอัดและเข้ารหัสข้อความธรรมดาที่เพิ่มเข้าไป
password=b
.เซิร์ฟเวอร์: ความยาวผลลัพธ์ 18.
ขโมย: โปรดบีบอัดและเข้ารหัสข้อความธรรมดาที่เพิ่มเข้าไป
password=с
.เซิร์ฟเวอร์: ความยาวผลลัพธ์ 17.
หมายเหตุแครกเกอร์: [ต้นฉบับ 14] + [สามไบต์ที่แทนที่ password=c
] นี่ถือว่าข้อความธรรมดาต้นฉบับประกอบด้วยสตริง password=c
. นั่นคือรหัสผ่านเริ่มต้นด้วยตัวอักษร c
ขโมย: โปรดบีบอัดและเข้ารหัสข้อความธรรมดาที่เพิ่มเข้าไป
password=сa
.เซิร์ฟเวอร์: ความยาวผลลัพธ์ 18.
หมายเหตุแครกเกอร์: [ต้นฉบับ 14] + [สามไบต์ที่แทนที่ password=с
- a
ขโมย: โปรดบีบอัดและเข้ารหัสข้อความธรรมดาที่เพิ่มเข้าไป
password=сb
.เซิร์ฟเวอร์: ความยาวผลลัพธ์ 18.
(… ในเวลาต่อมา…)
ขโมย: โปรดบีบอัดและเข้ารหัสข้อความธรรมดาที่เพิ่มเข้าไป
password=со
.เซิร์ฟเวอร์: ความยาวผลลัพธ์ 17.
หมายเหตุแครกเกอร์: [ต้นฉบับ 14] + [สามไบต์ที่แทนที่ password=co
] ผู้โจมตีสรุปว่ารหัสผ่านขึ้นต้นด้วยตัวอักษรโดยใช้ตรรกะเดียวกัน co
และต่อไปเรื่อย ๆ จนกว่ารหัสผ่านทั้งหมดจะถูกกู้คืน
ผู้อ่านจะได้รับการอภัยหากคิดว่านี่เป็นแบบฝึกหัดเชิงวิชาการล้วนๆ และสถานการณ์การโจมตีดังกล่าวจะไม่เกิดขึ้นในโลกแห่งความเป็นจริง อนิจจาดังที่เราจะได้เห็นในเร็วๆ นี้ เป็นการดีกว่าที่จะไม่ยอมแพ้กับการเข้ารหัส
ช่องโหว่ของแบรนด์: อาชญากรรม, พุดเดิ้ล, จมน้ำตาย
ในที่สุด หลังจากศึกษาทฤษฎีโดยละเอียดแล้ว เราจะได้เห็นว่าเทคนิคเหล่านี้นำไปใช้ในการโจมตีด้วยการเข้ารหัสในชีวิตจริงได้อย่างไร
อาชญากรรม
หากการโจมตีมุ่งเป้าไปที่เบราว์เซอร์และเครือข่ายของเหยื่อ บางอย่างก็จะง่ายกว่าและบางอย่างก็จะยากกว่า ตัวอย่างเช่น เป็นเรื่องง่ายที่จะเห็นการจราจรของเหยื่อ เพียงแค่นั่งกับเขาในร้านกาแฟเดียวกันกับที่มี WiFi ด้วยเหตุนี้ ผู้ที่อาจตกเป็นเหยื่อ (เช่น ทุกคน) จึงมักได้รับคำแนะนำให้ใช้การเชื่อมต่อที่เข้ารหัส มันจะยากขึ้น แต่ก็ยังเป็นไปได้ในการส่งคำขอ HTTP ในนามของเหยื่อไปยังไซต์บุคคลที่สามบางแห่ง (เช่น Google) ผู้โจมตีจะต้องล่อเหยื่อไปยังหน้าเว็บที่เป็นอันตรายด้วยสคริปต์ที่ทำการร้องขอ เว็บเบราว์เซอร์จะจัดเตรียมคุกกี้เซสชันที่เหมาะสมโดยอัตโนมัติ
ดูเหมือนน่าทึ่ง ถ้าบ๊อบไป evil.com
สคริปต์บนไซต์นี้ขอให้ Google ส่งอีเมลรหัสผ่านของ Bob ไปที่ได้ไหม [email protected]
? ในทางทฤษฎีใช่ แต่ในความเป็นจริงไม่ใช่ สถานการณ์นี้เรียกว่าการโจมตีการปลอมแปลงคำขอข้ามไซต์ (evil.com
ลองใช้เคล็ดลับนี้ Google (หรือเว็บไซต์ที่เคารพตนเอง) มักจะตอบกลับว่า "เยี่ยมมาก แต่โทเค็น CSRF ของคุณสำหรับธุรกรรมนี้จะ... อืม... три триллиона и семь
. กรุณาทวนหมายเลขนี้อีกครั้ง" เบราว์เซอร์สมัยใหม่มีสิ่งที่เรียกว่า "นโยบายต้นกำเนิดเดียวกัน" โดยที่สคริปต์บนไซต์ A ไม่สามารถเข้าถึงข้อมูลที่ส่งโดยเว็บไซต์ B ดังนั้นสคริปต์บน evil.com
สามารถส่งคำขอไปที่ google.com
แต่ไม่สามารถอ่านคำตอบหรือทำธุรกรรมให้เสร็จสิ้นได้จริง
เราต้องเน้นย้ำว่าเว้นแต่ Bob จะใช้การเชื่อมต่อที่เข้ารหัส การป้องกันทั้งหมดนี้ก็ไม่มีความหมาย ผู้โจมตีสามารถอ่านการเข้าชมของ Bob และกู้คืนคุกกี้เซสชันของ Google ได้ ด้วยคุกกี้นี้ เขาจะเปิดแท็บ Google ใหม่โดยไม่ต้องออกจากเบราว์เซอร์ของตัวเอง และปลอมตัวเป็น Bob โดยไม่ต้องพบกับนโยบายที่มีต้นกำเนิดเดียวกันที่น่ารำคาญ แต่น่าเสียดายสำหรับหัวขโมย สิ่งนี้เริ่มพบเห็นได้น้อยลงเรื่อยๆ อินเทอร์เน็ตโดยรวมได้ประกาศสงครามกับการเชื่อมต่อที่ไม่ได้เข้ารหัสมานานแล้ว และการรับส่งข้อมูลขาออกของ Bob อาจถูกเข้ารหัส ไม่ว่าเขาจะชอบหรือไม่ก็ตาม นอกจากนี้ ตั้งแต่เริ่มต้นการใช้งานโปรโตคอล การรับส่งข้อมูลก็เช่นกัน หดตัว ก่อนการเข้ารหัส นี่เป็นวิธีปฏิบัติทั่วไปในการลดเวลาแฝง
นี่คือที่ที่มันเข้ามาเล่น
ที่นี่ผู้โจมตีจะควบคุมคำขอและสามารถเข้าถึงการดมกลิ่นการรับส่งข้อมูล รวมถึงขนาดแพ็กเก็ตด้วย สถานการณ์สมมติของ Kelsey มีชีวิตขึ้นมา
เมื่อเข้าใจทฤษฎีนี้ ผู้เขียน CRIME ได้สร้างช่องโหว่ที่สามารถขโมยคุกกี้เซสชันสำหรับไซต์ต่างๆ มากมาย รวมถึง Gmail, Twitter, Dropbox และ Github ช่องโหว่ดังกล่าวส่งผลกระทบต่อเว็บเบราว์เซอร์สมัยใหม่ส่วนใหญ่ ส่งผลให้มีการเผยแพร่แพตช์ที่ฝังคุณลักษณะการบีบอัดข้อมูลใน SSL อย่างเงียบๆ เพื่อไม่ให้ใช้งานเลย สิ่งเดียวที่ได้รับการปกป้องจากช่องโหว่คือ Internet Explorer ซึ่งไม่เคยใช้การบีบอัด SSL เลย
สุนัขพูเดล
ในเดือนตุลาคม 2014 ทีมรักษาความปลอดภัยของ Google ได้สร้างกระแสในชุมชนความปลอดภัย พวกเขาสามารถใช้ประโยชน์จากช่องโหว่ในโปรโตคอล SSL ที่ได้รับการแพตช์เมื่อสิบกว่าปีที่แล้ว
ปรากฎว่าในขณะที่เซิร์ฟเวอร์ใช้งาน TLSv1.2 ใหม่ เซิร์ฟเวอร์จำนวนมากได้ทิ้งการสนับสนุน SSLv3 รุ่นเก่าสำหรับความเข้ากันได้แบบย้อนหลังกับ Internet Explorer 6 เราได้พูดคุยเกี่ยวกับการโจมตีแบบดาวน์เกรดแล้ว ดังนั้นคุณคงจินตนาการได้ว่าเกิดอะไรขึ้น การบ่อนทำลายโปรโตคอลแฮนด์เชคที่ได้รับการจัดการอย่างดีและเซิร์ฟเวอร์ก็พร้อมที่จะกลับไปใช้ SSLv3 แบบเก่าที่ดี ซึ่งถือเป็นการเลิกล้มการวิจัยด้านความปลอดภัยตลอด 15 ปีที่ผ่านมา
สำหรับบริบททางประวัติศาสตร์
Transport Layer Security (TLS) เป็นโปรโตคอลความปลอดภัยที่สำคัญที่สุดบนอินเทอร์เน็ต [..] เกือบทุกธุรกรรมที่คุณทำบนอินเทอร์เน็ตขึ้นอยู่กับ TLS [..] แต่ TLS ก็ไม่ใช่ TLS เสมอไป โปรโตคอลเริ่มต้นชีวิตใน
เน็ตสเคป คอมมิวนิเคชั่นส์ เรียกว่า "Secure Sockets Layer" หรือ SSL มีข่าวลือว่า SSL เวอร์ชันแรกนั้นแย่มากจนนักพัฒนารวบรวมโค้ดที่พิมพ์ออกมาทั้งหมดและฝังไว้ในหลุมฝังกลบลับในนิวเม็กซิโก ด้วยเหตุนี้ SSL เวอร์ชันแรกที่เปิดเผยต่อสาธารณะจึงเกิดขึ้นจริงเวอร์ชัน SSL2 . มันค่อนข้างน่ากลัว และ [..] มันเป็นผลงานของช่วงกลางทศวรรษที่ 90 ซึ่งนักเข้ารหัสยุคใหม่มองว่า "ยุคมืดของการเข้ารหัส " การโจมตีด้วยการเข้ารหัสลับที่ชั่วร้ายที่สุดหลายครั้งที่เรารู้จักในปัจจุบันยังไม่ถูกค้นพบ เป็นผลให้นักพัฒนาโปรโตคอล SSLv2 ถูกทิ้งให้คลำหาทางในความมืด และพวกเขาต้องเผชิญกับสัตว์ประหลาดที่น่ากลัวมากมาย - เพื่อความผิดหวังและผลประโยชน์ของเรา เนื่องจากการโจมตี SSLv2 ได้ทิ้งบทเรียนอันล้ำค่าไว้ให้กับโปรโตคอลรุ่นต่อไป
หลังจากเหตุการณ์เหล่านี้ ในปี 1996 Netscape ที่ผิดหวังได้ออกแบบโปรโตคอล SSL ใหม่ตั้งแต่ต้น ผลลัพธ์ที่ได้คือ SSL เวอร์ชัน 3 ซึ่ง
โชคดีสำหรับหัวขโมย "ไม่กี่" ไม่ได้หมายถึง "ทั้งหมด" โดยรวมแล้ว SSLv3 มอบองค์ประกอบที่จำเป็นทั้งหมดเพื่อเริ่มการโจมตี Vodene โปรโตคอลใช้รหัสบล็อกโหมด CBC และรูปแบบการขยายที่ไม่ปลอดภัย (ซึ่งได้รับการแก้ไขใน TLS ดังนั้นจึงจำเป็นต้องลดระดับการโจมตี) หากคุณจำรูปแบบการเสริมในคำอธิบายดั้งเดิมของเราเกี่ยวกับการโจมตี Vaudenay ได้ รูปแบบ SSLv3 จะคล้ายกันมาก
แต่น่าเสียดายสำหรับหัวขโมย "คล้ายกัน" ไม่ได้หมายความว่า "เหมือนกัน" รูปแบบการเติม SSLv3 คือ "ไบต์สุ่ม N ตามด้วยหมายเลข N" ลองภายใต้เงื่อนไขเหล่านี้เพื่อเลือกบล็อกไซเฟอร์เท็กซ์จินตภาพและทำตามขั้นตอนทั้งหมดของรูปแบบดั้งเดิมของ Vaudene: คุณจะพบว่าการโจมตีสามารถแยกไบต์สุดท้ายออกจากบล็อกข้อความธรรมดาที่เกี่ยวข้องได้สำเร็จ แต่จะไม่ไปไกลกว่านี้ การถอดรหัสทุก ๆ ไบต์ที่ 16 ของไซเฟอร์เท็กซ์เป็นกลอุบายที่ดี แต่ก็ไม่ใช่ชัยชนะ
เมื่อต้องเผชิญกับความล้มเหลว ทีมงาน Google จึงใช้วิธีสุดท้าย: พวกเขาเปลี่ยนมาใช้รูปแบบภัยคุกคามที่มีประสิทธิภาพมากขึ้น ซึ่งเป็นรูปแบบที่ใช้ในอาชญากรรม สมมติว่าผู้โจมตีเป็นสคริปต์ที่ทำงานในแท็บเบราว์เซอร์ของเหยื่อและสามารถแยกคุกกี้เซสชันได้ การโจมตียังคงน่าประทับใจ แม้ว่าโมเดลภัยคุกคามในวงกว้างจะดูสมจริงน้อยกว่า แต่เราได้เห็นแล้วในส่วนที่แล้วว่าโมเดลเฉพาะนี้เป็นไปได้
ด้วยความสามารถของผู้โจมตีที่ทรงพลังยิ่งขึ้น การโจมตีจึงสามารถดำเนินต่อไปได้ โปรดทราบว่าผู้โจมตีรู้ว่าคุกกี้เซสชันที่เข้ารหัสปรากฏที่ใดในส่วนหัวและควบคุมความยาวของคำขอ HTTP ที่อยู่ก่อนหน้า ดังนั้นจึงสามารถจัดการคำขอ HTTP เพื่อให้ไบต์สุดท้ายของคุกกี้สอดคล้องกับจุดสิ้นสุดของบล็อก ตอนนี้ไบต์นี้เหมาะสำหรับการถอดรหัส คุณสามารถเพิ่มอักขระหนึ่งตัวลงในคำขอได้ และไบต์สุดท้ายของคุกกี้จะยังคงอยู่ในตำแหน่งเดิมและเหมาะสำหรับการเลือกโดยใช้วิธีการเดียวกัน การโจมตีจะดำเนินต่อไปในลักษณะนี้จนกว่าไฟล์คุกกี้จะได้รับการกู้คืนอย่างสมบูรณ์ เรียกว่า POODLE: Padding Oracle บน Downgraded Legacy Encryption
จมน้ำตาย
ดังที่เราได้กล่าวไปแล้ว SSLv3 มีข้อบกพร่อง แต่โดยพื้นฐานแล้วมันแตกต่างไปจากรุ่นก่อน เนื่องจาก SSLv2 ที่รั่วนั้นเป็นผลผลิตของยุคที่แตกต่างกัน คุณสามารถขัดจังหวะข้อความตรงกลางได้: соглашусь на это только через мой труп
กลายเป็น соглашусь на это
; ลูกค้าและเซิร์ฟเวอร์สามารถพบปะกันทางออนไลน์ สร้างความไว้วางใจ และแลกเปลี่ยนความลับต่อหน้าผู้โจมตี ซึ่งสามารถปลอมตัวเป็นทั้งสองอย่างได้อย่างง่ายดาย นอกจากนี้ยังมีปัญหาเกี่ยวกับการเข้ารหัสการส่งออก ซึ่งเราได้กล่าวถึงเมื่อพิจารณา FREAK สิ่งเหล่านี้คือเมืองโสโดมและโกโมราห์ที่เข้ารหัส
ในเดือนมีนาคม 2016 ทีมนักวิจัยจากสาขาเทคนิคต่างๆ มารวมตัวกันและค้นพบที่น่าตกใจ: ยังคงใช้ SSLv2 ในระบบรักษาความปลอดภัย ใช่ ผู้โจมตีไม่สามารถดาวน์เกรดเซสชัน TLS สมัยใหม่เป็น SSLv2 ได้อีกต่อไป เนื่องจากช่องโหว่นั้นถูกปิดหลังจาก FREAK และ POODLE แต่พวกเขายังคงสามารถเชื่อมต่อกับเซิร์ฟเวอร์และเริ่มเซสชัน SSLv2 ได้ด้วยตนเอง
คุณอาจถามว่าทำไมเราถึงสนใจสิ่งที่พวกเขาทำที่นั่น? พวกเขามีเซสชันที่มีช่องโหว่ แต่ไม่ควรส่งผลกระทบต่อเซสชันอื่นหรือความปลอดภัยของเซิร์ฟเวอร์ใช่ไหม ก็ไม่เชิง ใช่แล้ว ในทางทฤษฎีมันควรจะเป็นอย่างนั้น แต่ไม่ - เนื่องจากการสร้างใบรับรอง SSL ทำให้เกิดภาระบางอย่าง ส่งผลให้เซิร์ฟเวอร์จำนวนมากใช้ใบรับรองเดียวกัน และด้วยเหตุนี้ จึงมีคีย์ RSA เดียวกันสำหรับการเชื่อมต่อ TLS และ SSLv2 ที่แย่ไปกว่านั้น เนื่องจากข้อบกพร่องของ OpenSSL ตัวเลือก "ปิดใช้งาน SSLv2" ในการใช้งาน SSL ยอดนิยมนี้จึงใช้งานไม่ได้จริง
สิ่งนี้ทำให้เกิดการโจมตีข้ามโปรโตคอลบน TLS ที่เรียกว่า
แต่ในการถอดรหัส คุณต้องมีการโจมตีที่ใช้งานได้กับ SSLv2 ซึ่งช่วยให้คุณสามารถกู้คืนไม่เพียงแต่การรับส่งข้อมูลเฉพาะเท่านั้น แต่ยังรวมถึงรหัสเซิร์ฟเวอร์ RSA ที่เป็นความลับด้วย แม้ว่านี่จะเป็นการตั้งค่าที่ซับซ้อน แต่นักวิจัยสามารถเลือกช่องโหว่ใดๆ ที่ถูกปิดโดยสิ้นเชิงหลังจาก SSLv2 ในที่สุดพวกเขาก็พบตัวเลือกที่เหมาะสม: การโจมตี Bleichenbacher ซึ่งเราได้กล่าวถึงไปแล้วและเราจะอธิบายรายละเอียดในบทความถัดไป SSL และ TLS ได้รับการปกป้องจากการโจมตีนี้ แต่ฟีเจอร์สุ่มบางอย่างของ SSL เมื่อรวมกับคีย์ลัดในการเข้ารหัสระดับส่งออก ทำให้เป็นไปได้
ในขณะที่เผยแพร่ 25% ของเว็บไซต์อันดับต้น ๆ ของอินเทอร์เน็ตได้รับผลกระทบจากช่องโหว่ DROWN และการโจมตีสามารถทำได้โดยใช้ทรัพยากรเพียงเล็กน้อยสำหรับแฮ็กเกอร์ตัวคนเดียวที่ซุกซน การดึงคีย์ RSA ของเซิร์ฟเวอร์ต้องใช้เวลาในการคำนวณแปดชั่วโมงและมีค่าใช้จ่าย 440 ดอลลาร์ และ SSLv2 เปลี่ยนจากล้าสมัยไปเป็นกัมมันตภาพรังสี
เดี๋ยว แล้ว Heartbleed ล่ะ?
นี่ไม่ใช่การโจมตีด้วยการเข้ารหัสในแง่ที่อธิบายไว้ข้างต้น นี่คือบัฟเฟอร์ล้น
เรามาพักกันเถอะ
เราเริ่มต้นด้วยเทคนิคพื้นฐานบางอย่าง: การบังคับเดรัจฉาน การแก้ไข การลดระดับ ข้ามโปรโตคอล และการคำนวณล่วงหน้า จากนั้นเรามาดูเทคนิคขั้นสูงหนึ่งซึ่งอาจเป็นองค์ประกอบหลักของการโจมตีด้วยการเข้ารหัสสมัยใหม่: การโจมตีของ Oracle เราใช้เวลาพอสมควรในการหาคำตอบ และไม่เพียงแต่เข้าใจหลักการพื้นฐานเท่านั้น แต่ยังรวมถึงรายละเอียดทางเทคนิคของการใช้งานเฉพาะสองรายการด้วย: การโจมตี Vaudenay ในโหมดการเข้ารหัส CBC และการโจมตี Kelsey บนโปรโตคอลการเข้ารหัสก่อนการบีบอัด
ในการตรวจสอบการโจมตีแบบดาวน์เกรดและการคำนวณล่วงหน้า เราได้สรุปการโจมตี FREAK ไว้โดยย่อ ซึ่งใช้ทั้งสองวิธีโดยให้ไซต์เป้าหมายดาวน์เกรดเป็นคีย์ที่ไม่รัดกุม จากนั้นจึงนำคีย์เดิมกลับมาใช้ใหม่ สำหรับบทความถัดไป เราจะบันทึกการโจมตี Logjam (ที่คล้ายกันมาก) ซึ่งกำหนดเป้าหมายอัลกอริธึมคีย์สาธารณะ
จากนั้นเราดูตัวอย่างการประยุกต์ใช้หลักการเหล่านี้อีกสามตัวอย่าง ประการแรก อาชญากรรมและพุดเดิ้ล: การโจมตีสองครั้งที่อาศัยความสามารถของผู้โจมตีในการแทรกข้อความธรรมดาถัดจากข้อความธรรมดาเป้าหมาย จากนั้นตรวจสอบการตอบสนองของเซิร์ฟเวอร์และ แล้วก็โดยใช้วิธีการโจมตีของ Oracle ใช้ประโยชน์จากข้อมูลที่กระจัดกระจายนี้เพื่อกู้คืนข้อความธรรมดาบางส่วน CRIME มุ่งหน้าสู่การโจมตีของ Kelsey ในการบีบอัด SSL ในขณะที่ POODLE ใช้รูปแบบการโจมตี CBC ของ Vaudenay แทนโดยให้ผลแบบเดียวกัน
จากนั้นเราหันความสนใจไปที่การโจมตี DROWN ข้ามโปรโตคอล ซึ่งสร้างการเชื่อมต่อกับเซิร์ฟเวอร์โดยใช้โปรโตคอล SSLv2 ดั้งเดิม จากนั้นกู้คืนคีย์ลับของเซิร์ฟเวอร์โดยใช้การโจมตี Bleichenbacher เราได้ข้ามรายละเอียดทางเทคนิคของการโจมตีนี้ไปแล้ว เช่นเดียวกับ Logjam จะต้องรอจนกว่าเราจะมีความเข้าใจที่ดีเกี่ยวกับระบบการเข้ารหัสคีย์สาธารณะและช่องโหว่ของระบบดังกล่าว
ในบทความถัดไป เราจะพูดถึงการโจมตีขั้นสูง เช่น การโจมตีแบบพบปะตรงกลาง การเข้ารหัสเชิงอนุพันธ์ และการโจมตีวันเกิด เรามาโจมตีการโจมตีช่องทางด้านข้างอย่างรวดเร็ว จากนั้นไปยังส่วนที่สนุก: ระบบเข้ารหัสคีย์สาธารณะ
ที่มา: will.com