Puncte:2

Ce înseamnă contor în modul Counter (CTR)? Este la fel ca nonce?

drapel cn

Așa cum am întrebat mai sus, ce înseamnă exact „contor”? Este la fel ca nonce?

De asemenea, cartea Network Security Essentials (6ed.) de la William Stallings afirmă: „De obicei, contorul este inițializat la o anumită valoare și apoi incrementat cu 1 pentru fiecare bloc următor (modulo $2^b$, Unde $b$ este dimensiunea blocului)". Ce înseamnă exact această afirmație?

Puncte:2
drapel in

ce înseamnă mai exact „contor”?

Contor conform definiției Wikipedia;

În logica digitală și în calcul, un contor este un dispozitiv care stochează (și uneori afișează) de câte ori a avut loc un anumit eveniment sau proces.

În context CTR; este folosit pentru a produce diferite intrări pentru criptare, apoi rezultatul este x-ored cu textul simplu pentru a produce un text cifrat. De obicei, se realizează prin incrementare, deși se poate folosi și LFSR.

introduceți descrierea imaginii aici

Este la fel ca nonce

Nu, nu este același cu nonce (numărul folosit o dată)

Modul CTR combină nonce și counter, ca intrare la cifr. Intrarea este combinată din două părți;

  • parte nonce; de obicei, generate aleatoriu per sesiune de criptare sau prin utilizarea contor/LFSR.
  • echivalent; setată inițial la zero, apoi incrementată pentru fiecare criptare bloc

Cu acestea putem avea o criptare randomizată și fiecare bloc poate produce o ieșire diferită sub aceeași cheie dacă folosim un PRP precum AES (partea PRF este mai complexă și de fapt CTR este definit pentru PRF, deoarece nu este nevoie de inversul)

„De obicei, contorul este inițializat la o anumită valoare și apoi incrementat cu 1 pentru fiecare bloc următor (modulo $2^b$, Unde $b$ este dimensiunea blocului)". Ce înseamnă exact această afirmație?

Luați în considerare că avem nonce de 64 de biți și contor de 64 de biți;

 nonce counter
9237AF71A232BC82E4 00000000000000000

Primul bloc utilizări 9237AF71A232BC82E40000000000000000 ca intrare, apoi blocul următor folosește ca

 nonce counter
9237AF71A232BC82E4 0000000000000001
9237AF71A232BC82E4 0000000000000002
9237AF71A232BC82E4 0000000000000003
9237AF71A232BC82E4 0000000000000004
 ......
9237AF71A232BC82E4 EFFFFFFFFFFFFFFF
9237AF71A232BC82E4 FFFFFFFFFFFFFFFF
 ......
9237AF71A232BC82E5 0000000000000000 ???

Dacă poți cripta $2^{64}$ blocuri vei ajunge la capătul tejghelei, în funcție de caz acest lucru poate fi periculos.

  • Daca continui de la 0 counter 9237AF71A232BC82E40000000000000000 atunci veți avea o problemă de non-reutilizare (tampă de două ori) în modul CTR; se pierde confidențialitatea. Un observator poate executa un traseu manual chiar și unul automatizat

  • Dacă continuați să creșteți decât 9237AF71A232BC82E50000000000000000 este posibil să apăsați o altă intrare care se poate transforma și în pad-ul de două ori.

Opreste-te acolo; de fapt, oprește-te cu mult înainte dacă utilizați PRP în loc de PRF.


Note despre diferite utilizări ale termenului nonce IV;

  • Definiția NIST folosește contorul ca întreaga intrare pentru criptare.

  • Wikipedia face o distincție. Am preferat definiția Wikipedia, În cazul GCM, NIST folosește IV și contorul separat.

  • Lindell&Katz, în cartea lor, folosește IV ca 3n/4 USD parte din dimensiunea blocului și $1/4$ cât despre tejghea. Criptarea este definită ca $y_i := F_k (IV || \langle i \rangle)$ Ei arată că dacă IV este selectat uniform, atunci reutilizarea IV este un eveniment neglijabil. Prin urmare, modul CTR este securizat CPA.

Titanlord avatar
drapel tl
Știu că CTR este sigur CPA fără reutilizare IV. Este încă sigur CPA, dacă se ia în considerare reutilizarea IV? Aș spune că nu, dar nu sunt 100\% sigur.
kelalaka avatar
drapel in
@Titanlord Încă mai are unele ipoteze. Lindell și Katz se ocupă de acest lucru în cartea lor presupunând că IV este ales uniform aleatoriu, atunci evenimentul este neglijabil dacă dimensiunea IV este $3n/4$.
Maarten Bodewes avatar
drapel in
„IV” nu este definit pentru modul CTR din câte știu eu. Dacă există, atunci implementările înseamnă de obicei valoarea de pornire pentru nonce & counter, adică blocul complet utilizat ca intrare inițială în cifrul bloc. În acest caz, *nu* este echivalent cu nonce.
kelalaka avatar
drapel in
@MaartenBodewes Lindell&Katz îl numesc IV ca dimensiune $3n/4$ a mărimii blocului $n$ cu $y_i := F_k (IV || )$. Da, sunt bine conștient că NIST original nu îl numește IV, doar apelează întreaga intrare ca contor. Sunt gata să fiu mai consecvent. Lasa-ma sa incerc. Bănuiesc că fac asta pentru a arăta că coliziunea IV este neglijabilă prin selectarea aleatorie uniformă.
Maarten Bodewes avatar
drapel in
Cartea lui Lindell & Katz este, în opinia mea, o referință autorizată pentru termeni și definiții. Cartea confundă, de asemenea, cheile secrete cu cele private; *nu poți partaja un privat *.Desigur, puteți defini un „IV” 3n/4 de dimensiunea dimensiunii blocului, totuși *nu așa folosește altcineva termenul* - din câte știu oricum.
kelalaka avatar
drapel in
@MaartenBodewes Paar folosește același mod, de asemenea. Amussen în Serious Cryptography, Bruce și colab. în inginerie criptografie la fel ca Wikipedia. Unele alte utilizări la fel ca [hartia originală a lui Diffie-Hellman](https://ee.stanford.edu/~hellman/publications/32.pdf) totul este contrar așa cum a făcut NIST.
Maarten Bodewes avatar
drapel in
Ei bine, nu pot argumenta împotriva asta. Rețineți că majoritatea API-urilor Crypto folosesc IV ca intrare completă în API. Și din moment ce în general folosesc big endian modulo $2^n$ pentru contor, IV-ul este exact o dimensiune de bloc $n$; nu este separat de contor sau nonce. În acest fel, sunt compatibile cu majoritatea definițiilor modului de contor (cu excepția WinZip, așa cum este menționat în răspunsul meu, deoarece folosește Little Endian).
kelalaka avatar
drapel in
Ei bine, văd că nu este deloc un acord. Știu că știi mult mai bine decât mine despre API-uri. API-urile aproape urmează documentul original și NIST (contorul se întoarce la IV), nu este deloc ciudat. Într-adevăr, spunem întotdeauna că reutilizarea IV, în acest caz, a spune partea IV în loc de nonce are încă mult sens (voi clarifica asta mai târziu). De fapt, mă gândeam să șterg acest lucru, totuși, când ai notat-o, m-am uitat din nou la sursă. Acolo a rămas.
Puncte:1
drapel in

Nu, nonce și counter sunt cu siguranță termeni diferiți.

  • Nonce este o valoare unică pe mesaj.
  • Contorul este o valoare unică și secvențială pentru mai multe blocuri ale aceluiași mesaj.

Nonce poate fi calculat în orice mod atâta timp cât este unic. De obicei, este fie complet randomizat, fie este secvenţial, începând de la zero sau unu.


Deși contorul este adesea specificat ca separat de nonce în protocoale, implementările au de obicei un contor care are aceeași dimensiune cu dimensiunea blocului. În acest caz, nonce face parte din cei mai semnificativi biți ai contorului de pornire.

Acest lucru este reflectat de partea din carte pe care o citați:

De asemenea, cartea Network Security Essentials (6ed.) de la William Stallings afirmă:

„De obicei, contorul este inițializat la o anumită valoare și apoi incrementat cu 1 pentru fiecare bloc următor (modulo $2^b$, Unde $b$ este dimensiunea blocului)".

Ce înseamnă mai exact această afirmație?

Să presupunem un cifru bloc de 128 de biți, cum ar fi AES. Atunci să presupunem că fiecare octet este afișat printr-o literă, atunci aveți:

 CCCCCCCC_CCCCCCCC = NNNNNNNN_00000000

unde fiecare C este un octet în contorul de pornire și N este un octet în nonce. Contorul de start este adesea tratat ca „IV”. Acum implementările vor crește acest modul de valoare inițială $2^{128}$: adică când lovește $2^{128} - 1$ următoarea valoare va fi total-zero.

Cu toate acestea, asta înseamnă că după $2^{64}$ incrementează contorul tău va crește octetul cel mai din dreapta nonce, ceea ce poate duce la o valoare duplicată a contorului. Aceasta înseamnă că aplicația în sine trebuie să țină cont de câte blocuri au fost criptate. Motivul pentru aceasta este că nonce poate consta în orice cantitate de octeți, deci nu știe când este afectat nonce. Cu alte cuvinte, implementările nu știu când are loc un overflow în nonce sau când contoarele se ciocnesc.


Note:

  • În principiu, orice schemă este valabilă pentru CTR atâta timp cât contorul nu se repetă pentru aceeași cheie. Obținerea unei chei noi pentru fiecare mesaj vă oferă o cantitate aproape infinită de blocuri ($2^{128}$ blocuri de 16 octeți pentru AES).
  • Deși contorul nu este definit ca fiind nici big sau little endian, big endian counters par să prevaleze. Totuși, am întâlnit un protocol care folosea un mic contor endian - WinZip dacă memoria îmi servește bine.
  • Nonce poate să nu fie singurul element care face unic contorul (inițial), alte elemente de date pot fi incluse în valoarea contorului (inițială). Uneori este inclus un identificator pentru separarea domeniilor, cum ar fi un identificator pentru receptor.
  • NIST intră în detaliu despre cum să construiți blocuri de criptare în NIST SP 800-38a, apendicele B, observând la sfârșit că contoarele sunt practic specifice protocolului și că cerința de unicitate trebuie testată separat.
Puncte:0
drapel tl

Un nonce este un număr (aleatoriu/pseudoranator) folosit o singură dată. Și aceasta este singura limitare la care este supus. Astfel, nonce este doar un termen generic.

În modul CTR, fiecare valoare este diferită una de cealaltă și (în general) este folosită o singură dată. Prin urmare, vectorul de inițializare și numerele rezultate pot fi privite ca nonces.

(Notă: în unele cazuri, autorii pot face în mod explicit o distincție între valorile CTR și nonces. Dacă acesta este cazul, aceștia pot avea o definiție diferită sau mai multe restricții de luat în considerare)

drapel vn
Nonce nu trebuie să fie „aleatoare/pseudoratoare”, doar unice (în sfera unei singure chei). De fapt, este obișnuit să folosiți un contor de mesaje (â contor de blocuri) ca un nonce.

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.