cum construiesc un IV valid, având în vedere un nonce? Ce legătură are asta cu un contor?
Poate că nu vă așteptați la asta, dar depinde; mai multe scheme sunt la fel de sigure (de exemplu, big endian vs little endian). În general, valoarea contorului este un întreg big endian fără semn pe 128 de biți. Nonce este partea cea mai semnificativă (cea mai din stânga) a acelui număr întreg.
În plus, partea inițială inferioară a contorului ar începe de la (toate) zero - nici un ca in exemplul tau.
Deci ai avea:
NNNNNNNN NNNNNNNN NNNNNNNN 00000000
ca valoare de pornire (ca hexazecimale, unde N reprezintă o cifră hexagonală a nonce), unde stânga este partea cea mai semnificativă. Desigur, acesta este cazul unui nonce pe 96 de biți și al unui contor de 32 de biți. Această valoare de pornire este denumită în mod obișnuit IV.
Deoarece dimensiunea nonce poate varia în multe biblioteci, de obicei creșterea contorului se face pe modul $2^{128}$, cu dezavantajul că un overflow în cei mai mici 32 de biți va afecta nonce. De obicei, depinde de utilizatorul bibliotecii AES să testeze acest lucru (dar ai avea nevoie $2^{32} * 16 = 64 \text{GiB}$ sau aproape $69 \text{GB}$ a ajunge acolo).
dar aceeași „hello world” este criptată în ceva diferit de fiecare dată
Da, deci cel mai probabil nonce se schimbă de fiecare dată. Ori asta sau cheia se schimbă, sau chiar atât cheia, cât și nonce.