Puncte:2

Criptare cu AES128 (ECB) și validare cheie

drapel cn

Î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

introduceți descrierea imaginii aici

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”.

kelalaka avatar
drapel in
Cu toate acestea, Mac-then-encrypt, se pare că vă limitați la 16 octeți, prin urmare, nu este posibil până la ultimul strat.
drapel cn
@kelalaka multumesc! Care este minimul de care am nevoie (în octeți) pentru a include MAC în fiecare strat?
kelalaka avatar
drapel in
Depinde de ce fel de probabilitate vrei. 8 biți 1/64 ....
drapel cn
Înțeles, pot ajunge până la 64b pe strat. Există vreun tip MAC specific pe care ar trebui să-l aleg?
Paul Uszak avatar
drapel cn
Utilizați termenii WiFi și radio în mod interschimbabil. ASTA E PERICULOS. Transmisia radio criptată este ilegală în Marea Britanie și SUA și în majoritatea altor țări. Cetăţenii nu au dreptul la intimitate pe valuri de aer :-(
drapel cn
@PaulUszak - Ok, pentru a fi clar, este WiFi - nu folosesc altceva decât un standard WiFi și „Onion” este difuzat cu un cadru de baliză 802.11.
kelalaka avatar
drapel in
La fel de rapid, folosești hash BLAKE2? Nu ai nevoie de autentificare, nu? Doar integritatea va fi suficientă.
drapel cn
@kelalaka este corect, tot ce am nevoie este integritate! Vă mulțumesc foarte mult pentru contribuție
Puncte:2
drapel in

Deoarece aveți nevoie doar de validare, puteți utiliza pur și simplu o funcție hash rapidă precum BLAKE2 pentru scopul dvs.

$$ c_0 = E_{k_1}(m_0) $$ apoi adăugați hash-ul BLAKE2 pe 64 de biți (sau mai mult) al textului cifrat

$$m_1 = c_0\mathbin\|BLAKE2(c_0)\mid_{64}$$

$$ c_1 = E_{k_2}(m_1) $$ apoi adăugați hash-ul BLAKE2 pe 64 de biți (sau mai mult) al textului cifrat

$$m_2 = c_1\mathbin\|BLAKE2(c_1)\mid_{64}$$

$$ c_3 = E_{k_3}(m_2) $$

Acum, eliberează $c_3$. Când este decriptat, clientul poate verifica hash-ul. Pentru o cheie aleatorie va avea $1/2^{64}$ probabilitatea de a se potrivi hashului atașat. Rețineți că atunci când $m_2$ nu este corectă, hashul adăugat nu va fi valoarea corectă, ci doar o valoare aleatorie.

Dacă utilizați modul CBC pentru criptare (deși se pare că ECB este în regulă pentru scopul dvs.), atunci puteți beneficia și de umplutură (de asemenea, ECB va avea nevoie). Modul CBC necesită întotdeauna umplutură PKCS#7.Dacă mesajul nu este decriptat corect, atunci padding-ul va eșua (acest lucru este folosit în atacurile de padding oracle). Există și false pozitive. Ca și cu probabilitatea de 1/256, umplutura va fi corectă pentru o cheie incorectă. Deci integritatea este mai bine să te apropii pentru a merge.


Pe lângă hash, se poate folosi și adăugarea unui șir individual pe strat.

$$ c_0 = E_{k_1}(m_0) $$ apoi anexează $\texttt{Layer1}$ şir. Asta este cel mai rapid.

$$m_1 = c_0\mathbin\|\texttt{Layer1}$$

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.