ในโครงการท้าทายใหม่ของฉัน เซิร์ฟเวอร์ของฉันกาลครั้งหนึ่งกำลังออกอากาศ "หัวหอม" ที่ทำจากสามชั้นที่เข้ารหัสด้วย AES128 (ECB) - ยาว 16 ไบต์ผ่าน WiFi
ฉันใช้ WiFi Beacon Frame เพื่อถ่ายโอนหัวหอมไปในอากาศ
"หัวหอม" มีลักษณะไม่มากก็น้อยตามภาพด้านล่าง
แต่ละเลเยอร์จะถูกเข้ารหัสด้วยคีย์ที่แตกต่างกัน
คีย์ของแต่ละเลเยอร์จะทราบเฉพาะเซิร์ฟเวอร์และอุปกรณ์ที่จะถอดรหัสเท่านั้น คีย์ทำจากที่อยู่ MAC เพื่อความเรียบง่าย
- ชั้นแรกจะเป็นสตริงยาวสุ่ม 16b เช่น "Hello World"
เข้ารหัสด้วยรหัสอุปกรณ์ 1
- ชั้นที่สองคือชั้นแรกที่เข้ารหัสด้วยรหัสอุปกรณ์ 2
- ชั้นที่สามคือชั้นที่สองที่เข้ารหัสด้วยรหัสอุปกรณ์ 3
ในการถอดรหัสหัวหอมอย่างถูกต้อง เลเยอร์แรกที่ออกอากาศคือ 3 เนื่องจากเรากำลังถอดรหัสย้อนกลับ
เมื่อสร้าง "Onion" แล้ว เซิร์ฟเวอร์จะออกอากาศเลเยอร์ 3 ผ่าน WiFi Beacon Frame และใครก็ตามที่สามารถฟังได้สามารถลองถอดรหัสข้อมูลได้ แต่เฉพาะอุปกรณ์ที่เลือกเท่านั้นที่สามารถถอดรหัสได้อย่างถูกต้อง เนื่องจากเลเยอร์เหล่านี้ได้รับการเข้ารหัสด้วยกุญแจ .
เมื่อแต่ละคนถอดรหัสเลเยอร์นั้น:
- แจ้งให้เซิร์ฟเวอร์ทราบผ่าน TCP/IP ถึงแฮชของค่าที่ถอดรหัส (การยืนยัน)
- ถอด 'เลเยอร์'
- กระจายหัวหอมที่เหลือกลับไปทาง WiFi (สร้างกรอบสัญญาณ)
เมื่อถอดรหัสเลเยอร์ทั้งหมดแล้ว งานก็เสร็จสิ้น
ปัญหาคืออุปกรณ์ไม่มีตัวเลือกในการยืนยันว่าการถอดรหัส (คีย์ที่ใช้) นั้นดีหรือไม่ได้รับการถอดรหัสเพียงครั้งเดียว จึงทำให้มีการรับส่งข้อมูลโดยไม่จำเป็นจำนวนมากไปยังเซิร์ฟเวอร์ด้วยแฮชที่ไม่ถูกต้อง (เนื่องจากการถอดรหัสผิด)
คำถาม
ควรทำอย่างไรเพื่อให้อุปกรณ์ตรวจสอบว่าข้อมูลที่ถอดรหัสถูกต้องหรือไม่ (คีย์ถูกต้อง)
หมายเหตุด้านข้าง:
ECB ถูกนำมาใช้เนื่องจากความง่ายในการใช้งาน อุปกรณ์ที่มีส่วนร่วมในกระบวนการถอดรหัสคือเซ็นเซอร์ที่ใช้พลังงานต่ำ และมีการเข้ารหัสนี้พร้อมใช้งาน "ทันทีที่แกะกล่อง"