În noul meu proiect-provocare, serverul meu transmite odată o „ceapă” formată din trei straturi criptate cu AES128 (ECB) - 16 octeți lungime prin WiFi.
Folosesc un cadru WiFi Beacon, pentru a transfera ceapa prin aer.
„Ceapa” arată mai mult sau mai puțin ca în imaginea de mai jos
Fiecare strat este criptat cu o cheie diferită.
Cheile fiecărui strat sunt cunoscute doar de server și de dispozitivele care urmează să le decripteze. Cheile sunt făcute din adresa MAC pentru simplitate.
- Primul strat este întotdeauna un șir lung aleatoriu de 16b, adică „Hello World”,
criptat cu cheia dispozitivului 1
- Al doilea strat este primul strat criptat cu cheia dispozitivului 2
- Al treilea strat este al doilea strat criptat cu cheia dispozitivului 3
Pentru a decripta corect ceapa, primul strat difuzat este 3, deoarece decriptăm înapoi.
Odată ce „Onion” este construit, serverul transmite stratul 3 prin WiFi Beacon Frame și oricine îl poate asculta poate încerca să decripteze datele, dar numai dispozitivele selectate le pot decripta corect, deoarece straturile sunt criptate cu cheile lor. .
Când fiecare dintre ele decriptează stratul:
- permite serverului să cunoască prin TCP/IP hash-ul valorii decriptate (confirmare)
- înlătură „stratul”
- transmite restul de ceapă înapoi prin WiFi (Construiește un cadru de baliză).
Odată ce toate straturile sunt decriptate, treaba este gata.
Problema este că dispozitivele nu au opțiune de a confirma dacă decriptarea (cheia folosită) este bună sau nu o dată decriptată, provocând astfel mult trafic inutil către server cu hashuri incorecte (din cauza decriptării greșite).
Întrebare
Ce ar trebui făcut pentru a permite dispozitivelor să valideze dacă datele decriptate sunt valide (deci cheia este corectă)?
Notă marginală:
ECB a fost folosit datorită simplității implementării, dispozitivele care iau parte la procesul de decriptare sunt senzori de putere redusă și aveau acest cifr gata de utilizat „direct din cutie”.