Un PRP este Permutarea pseudo-aleatorie și vrem să nu se distingă de permutările aleatorii. AES și toate cifrurile bloc ar trebui să fie PRP. Permutarea înseamnă că există un invers și sunt proiectați să aibă unul și într-adevăr să aibă unul eficient.
Avem nevoie de un mod de operare pentru cifrurile bloc și am părăsit CBC din cauza numeroaselor atacuri care au avut loc deși are Ind-CPA securizat.În prezent, toate cifrurile TLS 1.3 utilizează în mod intern modul CTR securizat Ind-CPA (suitele de criptare TLS 1.3 sunt mai mult decât atât, toate sunt moduri de criptare autentificată cu date autentificate)
O astfel de relaxare ne-ar câștiga ceva?
Ne oferă o mulțime de oportunități. Nu trebuie să ne limităm la PRP în modul CTR - a fost deja conceput pentru Funcții pseudo-aleatorie (PRF); Modul CTR nu are nevoie de inversul funcției. Cu PRF putem folosi o gamă largă de funcții care nu trebuie să aibă inverse (Există $2^n!$ PRP-uri și $(2^n)^{2^n}$ PRF pentru cifrurile bloc de n biți. Chiar și noi putem lua o funcție hash și o convertim în criptare CTR ca în Salsa. Putem proiecta și un program cheie la costuri aproape zero.
Utilizarea PRP în modul CTR poate cauza deosebitorul mesajului lung și putem elimina acest lucru folosind un PRF. Dacă folosim PRP în modul CTR, atunci trebuie să restricționăm numărul de blocuri de criptare din cauza lemei de comutare PRP-PRF.
Modul CTR, de asemenea, nu necesită umplutură, așa că sunt imuni la atacurile oracolului de umplutură.
ChaCha20 și Salsa20 sunt exemple binecunoscute care au costuri zero ale programului cheie, design ARX cu CPU prietenos. Au modul CTR încorporat și sunt foarte rapide în software.