Modul CTR a fost conceput inițial pentru PRF-uri.
Orice PRF* poate fi transformat într-un stream cipher cu modul CTR.Cu toate acestea, nu este de preferat să folosiți o funcție grea construită pentru ca MAC să o utilizeze ca un cifru de flux. Utilizați ChaCha pentru cifrul de flux construit din PRF sau utilizați cifrul de flux direct precum Trivium.
Dacă doriți cu adevărat să utilizați, atunci utilizați intrarea ca $$F_k(\text{nonce_block}\mathbin\|\text{counter_block})$$ ca modul CTR și criptați ca
$$c_i = m_i \oplus F_k(\text{nonce_block}\mathbin\|\text{counter_i})$$
Asigura-te ca
- $\text{counter_i}$ nu depășește niciodată dimensiunea $\text{counter_block}$,
- nu reveni niciodată la starea inițială dacă contorul atinge maximul $2^{\text{counter_block_size}}-1$
- nu vă complicați cu reluarea contorului pentru o altă criptare.
- Sub mai sus, mai nou, an $(IV,cheie)$ apar din nou unde $IV = (\text{nonce_block}\mathbin\|\text{counter_i})$
* De fapt, orice nu este suficient pentru criptografie, dimensiunea cheii și dimensiunea de intrare și de ieșire sunt importante. Astăzi preferăm xChaCha20, deoarece permite nonce-urile de 192 de biți pentru a evita coliziunea nonce sub aceeași cheie și are dimensiuni de intrare/ieșire de 512 biți. Securitatea pe 128 de biți a lui Chaskey este suficientă pentru criptografia ușoară, cu toate acestea, pentru alte scopuri, nu este suficient de sigură.