Deci, xChaCha20 are o dimensiune nonce suficient de mare pentru a utiliza în siguranță un nonce aleatoriu cu aceeași cheie. Poly1305 utilizează în general primul bloc al ieșirii cifrului pentru a-și genera nonce. Pentru xChaCha20 ar fi blocul zero pentru cheia poly1305/nonce, iar restul datelor ar fi criptate cu blocul 1 și mai sus. Deci, dacă cineva ar trimite un mesaj, ați primi ceva în acest sens (ordinea poate fi diferită în funcție de protocol):
$$\text{Msg} = \{ \text{Etichetă Poly1305}\} \mathbin\| \{\text{24 Bytes Nonce} \} \mathbin\| \{ \text{Date asociate} \}\mathbin\| \{\text{Text cifrat} \}$$
Acum, cu acest aspect, pare puțin irositor trimiterea și generarea de noi nonce cu fiecare mesaj, de ex. Overhead de pachet/mesaj de 24 de octeți și timp CPU care generează non-uri aleatorii. Mai ales că xChaCha20 poate trimite $2^{64}$ blocuri cu o cheie și pereche nonce. S-ar putea trimite pur și simplu nonce o dată și apoi începe să-și trimită fluxul de date, iar la ultimul mesaj trimite eticheta poly1305. Cu toate acestea, dacă a fost o mulțime de date, a trebuit să aștepte ca toate acestea să fie trimise înainte de a verifica eticheta poly1305 are propria sa serie de probleme. Pare mai practic să generați etichete Poly1305 pe măsură ce mergeți.
Cu toate acestea, aproape toate construcțiile pe care le văd folosesc doar blocul 0 pentru cheia Poly1305/nu mi se pare perfect rezonabil să folosesc alte contoare de bloc pentru cheia Poly1305. De exemplu, să presupunem că cineva dorește să trimită un flux lung de date. Pentru scopuri ilustrative, să luăm în considerare o construcție brută care trimite 7 blocuri xChaCha20 la un moment dat:
Acum, întrebarea mea este de ce nu am văzut o construcție în acest sens? Există ceva ce trec cu vederea sau xChaCha20 este prea nou sau este o preocupare destul de de nișă sau nu m-am uitat suficient de bine? Deoarece unele construcții de-a lungul acestor linii permit verificarea datelor pe măsură ce le primesc și, de asemenea, evită generarea de multe non-uri noi și nevoia de a le trimite în mod repetat, adăugând mesaje.
Editați | ×:
Probabil că ar fi trebuit să fie mai clar aici poly1305_tag(block_x) ar trebui să includă atât text cifrat, cât și datele asociate. Imaginea de mai sus era deja cam largă pentru ceva de genul
$$poly1305_{tag}(block_x, \text{date asociate} \mathbin\| ciphertext).$$
Similar așa cum este menționat în nota de mai jos, xChaCha20_x() include cheia și nonce. În principal, aceasta este întrebarea despre utilizarea altor contoare de blocuri, altele decât zero, pentru a fi o cheie pentru poly1305 pentru a genera mai multe etichete pentru un flux de date mai lung.