ต่อไปนี้เป็นปัญหาในโลกแห่งความเป็นจริง
ในโปรโตคอลมาตรฐาน ไคลเอนต์สามารถเชื่อมต่อกับเซิร์ฟเวอร์โดยใช้การยืนยันตัวตน 4 รอบร่วมกันบนช่อง TCP ที่ไม่ปลอดภัย:
- pass-1: ลูกค้าส่ง Challenge C แบบสุ่มไปยังเซิร์ฟเวอร์
- pass-2: เซิร์ฟเวอร์ตอบโดยการส่งคำท้า S แบบสุ่มไปยังไคลเอนต์
- pass-3: ลูกค้าเตรียม res(S, K) และส่งไปยัง S
- pass-4: เซิร์ฟเวอร์ตอบกลับลูกค้าด้วย res(C, K)
res(.) คือแท็ก GCM-GMAC ที่ขึ้นอยู่กับคีย์สมมาตร K (อันที่จริง AES128 แต่อาจไม่เกี่ยวข้องที่นี่)
เมื่อการรับรองความถูกต้องร่วมกันสำเร็จ ลูกค้าและเซิร์ฟเวอร์สามารถสื่อสารต่อไปได้ภายใต้สิ่งที่เรียกว่า "การเชื่อมโยง" เช่น ลูกค้าสามารถขอข้อมูลบางอย่างจากเซิร์ฟเวอร์
อย่างไรก็ตาม จะเกิดอะไรขึ้นหากผู้โจมตี (ไม่มีคีย์) กำลังดักฟังเครือข่ายและเริ่มการทำงานแบบคนกลางเช่นเดียวกับไคลเอนต์ที่เป็นอันตราย (สีแดง)
เมื่อไคลเอนต์จริงเริ่ม pass-1 และส่ง C1 ไปยังเซิร์ฟเวอร์ ในขณะเดียวกันไคลเอ็นต์ที่ไม่ดีก็ส่ง C2 เซิร์ฟเวอร์ตอบสนองต่อคำขอทั้งสอง แต่ MitM จัดการฉีด S2 เพื่อส่งไปยังไคลเอ็นต์ที่ดี ซึ่งเตรียม res (S2) และส่งไปยังเซิร์ฟเวอร์ แต่ MitM จับ res(S2) และฉีดเป็น pass-3 เพื่อส่งไปยังเซิร์ฟเวอร์ ตอนนี้เซิร์ฟเวอร์ตรวจสอบไคลเอ็นต์ที่ไม่ดีและส่งกลับ res (C2) ซึ่งไคลเอนต์ที่ไม่ดีจะละเว้น ดังนั้นการเชื่อมต่อระหว่างไคลเอนต์และเซิร์ฟเวอร์ที่ดูเหมือนจะตรวจสอบความถูกต้องร่วมกันจึงถูกสร้างขึ้น
ฉันสงสัยว่าการตรวจสอบร่วมกันแบบนี้มีประสิทธิภาพจริงหรือไม่