Puncte:0

Enumerarea valorilor dintr-un generator liniar congruențial java Random()

drapel mx

În timpul cercetării mele asupra unei aplicații java, am descoperit că nextInt(64) funcția de java.Random() clasa este folosită pentru a genera cheia de criptare.

Mărimea cheii este 16 octeți. Știu că acest generator nu este recomandat pentru că este vulnerabil. Mai ales în acest caz, valoarea fiecărui octet al cheii este selectată dintr-un interval scurt de la 0x0 la 0x40.

M-am familiarizat deja cu faptul că este posibil prezice următoarele valori ââale generatorului folosind valorile anterioare. Dar, în cazul meu, meyan nu are date despre valorile anterioare (cheia este criptată și nu am acces la valorile sale), așa că aici vorbim despre iterarea peste valorile cheii. Nu înțeleg cum pot folosi datele că fiecare valoare următoare depinde de cea anterioară (parametrul oldseed)?

protected int next(int bits) {
        sămânță veche lungă, sămânță următoare;
        Sămânță AtomicLong = this.seed;
        face {
            oldseed = samanta.get();
            nextseed = (vechi semințe * multiplicator + adunator) & masca;
        } while (!seed.compareAndSet(oldseed, nextseed));
        return (int)(nextseed >>> (48 - biti));
}

Cum se reduce numărul de enumerare pentru o astfel de cheie de 16 octeți?

fgrieu avatar
drapel ng
Cei 16 octeți obținuți cu următorul (6) înseamnă că utilizați „de la 0x0 la 0x40” pentru a însemna în [0, 0x40-1]? Apoi indiciu: presupuneți un singur fir în timpul generării cheilor și simplificați în consecință ceea ce face acest cod. Apoi găsiți ce biți ai semințelor au o influență asupra cheii de 16 octeți.Concluzionați câte astfel de chei de 16 octeți pot exista și cum să le enumerați. Poate, investigați cum este aleasă sămânța, ceea ce poate permite enumerarea cheii reale mult mai rapid.
Sergey Unk avatar
drapel mx
@fgrieu nu există next(6) - se folosește nextInt(64). Aceasta înseamnă că fiecare octet al tastei cu 16 cifre este un număr în intervalul [0;63] (sistem zecimal)
fgrieu avatar
drapel ng
Acest lucru este mai clar, iar octeții cheie sunt de la 0x0 la 0x3F incluși. Sfaturi revizuite în lumina celor de mai sus: înțelegeți cum `nextInt(64)` folosește `next(31)` și de ce `nextInt(64)` este exact echivalent cu `next(6)`. Apoi presupuneți un singur fir în timpul generării cheii și simplificați codul întrebării în consecință. Găsiți ce biți ai semințelor au influență asupra cheii de 16 octeți. Concluzionați câte astfel de chei de 16 octeți pot exista și cum să le enumerați pe toate la un cost fezabil. Poate, investigați cum este aleasă sămânța, ceea ce poate permite enumerarea cheii reale mult mai rapid.

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.