Citesc Înțelegerea criptografiei de Christof Paar și Jan Pelzl. În capitolul 2 (Cifuri de flux). Există o secțiune care vorbește despre „Culding Key Streams from PRNGs”.
Ei presupun un PRNG bazat pe generatorul liniar congruențial:
$$S_0 = sămânță $$
$$S_{i+1} \equiv AS_i + B\mod m, i=0,1,...$$
unde alegem ca m să fie lung de 100 de biți și $ S_i,A,B \in \{0,1,...,m-1\}. $ Rețineți că aceasta
PRNG poate avea proprietăți statistice excelente dacă alegem parametrii cu atenție.
Modulul m face parte din schema de criptare și este cunoscut public. Secretul
cheia cuprinde valorile (A,B) și eventual sămânța S0, fiecare cu o lungime de 100.
Aceasta ne oferă o lungime a cheii de 200 de biți, care este mai mult decât suficientă pentru a vă proteja
un atac cu forță brută. Deoarece acesta este un cifru de flux, Alice poate cripta:
$$y_i \equiv x_i + s_i \mod 2 $$
Unde $s_i$ sunt biții reprezentării binare a PRNG simboluri de ieșire $S_j$
Dar Oscar poate lansa cu ușurință un atac. Să presupunem că știe primii 300 de biți din
text simplu (acesta este doar 300/8=37,5 octeți), de exemplu, informații despre antetul fișierului sau el ghicește
parte a textului simplu. Deoarece el cunoaște cu siguranță textul cifrat, acum poate calcula
primii 300 de biți ai fluxului de chei ca:
$$s_i \equiv y_i + x_i \mod m , i = 1,2,...,300$$
Acești 300 de biți dau imediat primii trei simboluri de ieșire din PRNG:$S_1 = (s_1,...,s_{100}), S_2 = (s_{101},...,s_{200})$ și $S_3 = (s_{201},...,s_{300}).$
(sublinierea mea)
Întrebările mele sunt:
- Ce este un simbol de ieșire?
- cum determinăm simbolurile de ieșire (număr de biți etc.)