VMPC ( Variably Modified Permutation Composition ) este un stream cipher [1] utilizat în unele sisteme de securitate a informațiilor din rețelele de calculatoare. Cifrul a fost dezvoltat de criptograful Bartosz Zultak ( poloneză: Bartosz Żółtak , engleză: Bartosz Zoltak ) ca o versiune îmbunătățită a popularului cifr RC4 . Algoritmul VMPC este construit ca orice cifru de flux bazat pe un generator de biți pseudo-aleatoriu parametrizați cu cheie. Principalele avantaje ale cifrului, precum RC4, sunt viteza mare, dimensiunea variabilă a cheii și vectorul de inițializare (de la 128 la 512 biți inclusiv), ușurința de implementare (literal câteva zeci de linii de cod). [2]
Baza cifrului este un generator de numere pseudo-aleatoare [3] , care se bazează pe o funcție ireversibilă unidirecțională VMPC ( Variably Modified Permutation Composition ):
Algoritm de conversie a cheii [2] și (opțional) a vectorului de inițializare într-o permutare de 256 de elemente P. Inițializarea variabilei globale s.
C: lungimea cheii în octeți
K: Cheie
z : Lungimea vectorului de inițializare în octeți
V : Vector de inițializare
i : variabilă pe 8 biți
j : variabilă pe 16 biți
s : variabilă globală de 8 biți
P : tabel de 256 de octeți pentru stocarea permutărilor
1.s = 0 2. pentru i = 0 până la 255: P[i] = i 3. pentru j = 0 până la 767 // executați pași. 4-6: 4. i = j mod 256 5. s = P[(s + P[i] + K[j mod c]) mod 256] 6. Temp = P[i] P[i] = P[s] P[s] = Temp 7. Dacă se utilizează transformarea vectorului de inițializare pentru j = 0 până la 767 // executați pași. 8-10: 8. i = j mod 256 9. s = P[(s + P[i] + V[j mod z]) mod 256] 10. Temp = P[i] P[i] = P[s] P[s] = TempGenerarea secvenței de taste de ieșire [2] .
Pentru a genera L octeți ai fluxului de chei de ieșire, sunt efectuate următoarele operații:
L : lungimea secvenței de taste în octeți
1. i = 0 2. Repetați paragrafele. 3-6 L ori: 3. s = P[(s + P[i]) mod 256] 4. Ieșire = P[(P[P[s]] + 1) mod 256] 5. Temp = P[i] P[i] = P[s] P[s] = Temp 6. i = (i + 1) mod 256Funcția VMPC [2] de gradul k < n peste o mulțime de n elemente x∈A, A = {0,1,…n-1}:
pentru x = 0 la n-1: Q k (x) = VMPC k (P(x)) = P(P k (P k-1 (…(P 1 (P(x)))…)))Unde P: A → O permutare unu-la-unu cu n elemente
Pi (x) permutare cu n elemente,
P i = f i ( P(x)), P i (x) ≠ P(x) ≠ P j (x) , i≠j i,j∈{1,2…k}
f i (x) = (x + i) mod n ,
Funcția VMPC 1 de gradul Q 1 (x)= VMPC 1 (P(x) )=P(P(P(x))+1)
Funcția VMPC 2 puteri ale lui Q 2 (x)= VMPC 2 (P(x))=P(P(P(P(x))+1)+2)
Funcția VMPC 3 puteri ale lui Q 3 (x)= VMPC 3 (P(x))=P(P(P(P(P(x))+1)+2)+3)
P(x) este una dintre variantele [2] ale permutației {0,1,2,3,4}
X | 0 | unu | 2 | 3 | patru |
P(x) | 3 | 0 | patru | unu | 2 |
VMPC 1 (P(x)) | patru | 2 | unu | 0 | 3 |
VMPC 1 (P(x))=P(P(P(x)) + 1)
x=0
P(0) = 3
P(P(0)) = 1
P(P(0)) + 1 = 2
P(P(P(0) + 1)) = 4
VMPC 1 (P(0)) = 4
Găsirea reciprocă a funcției VMPC este dificilă din punct de vedere computațional [2] .
De exemplu, pentru n = 256, pentru a calcula valoarea inversă a funcției VMPC 1 , sunt necesare operații , pentru VMPC 2 - , pentru VMPC 3 - .
Recuperarea permutării n - elementului P corespunzătoare valorii Q(X)= VMPC k (P(X)).
X, Y sunt variabile temporare
Pentru elementul P(x) = y se introduce următoarea notație:
X − argument: bază sau parametru
Y − valoare: parametru sau respectiv bază
Exemplu: pentru elementul P(0) = 3: dacă argumentul 0 este parametrul , atunci valoarea 3 este baza .
Algoritm:
Găsirea tuturor elementelor posibile ale permutației P dat Q și elementele deja găsite ale permutației P.
D, C sunt variabile temporare
Denumiri:
afirmația y este o secvență y de k + 2 elemente ale permutației P utilizate pentru a calcula Q( y ).
cuvântul x al secvenței y este elementul secvenței y cu număr x .
Algoritm:
Alegerea unui astfel de nou element de permutare P, al cărui calcul va permite găsirea numărului maxim de elemente P la etapele ulterioare ale algoritmului pentru găsirea valorii inverse a funcției VMPC k. Ca rezultat al algoritmului de selecție, baza noului element este determinată și valoarea parametrului acestuia este aleasă în mod arbitrar . Acest algoritm este potrivit pentru cazul k<4.
B, R sunt variabile temporare
T a , T v − tablouri temporare
W[j] − matrice de numere
Algoritm:
Probabilitatea de a obține două rezultate identice consecutive atunci când se generează o secvență de cheie folosind cifrul VMPC este egală cu probabilitatea corespunzătoare a unui generator de secvență aleatoare ideală [2] . - numărul de biți ai stării interne a generatorului de secvențe pseudoaleatoare, de obicei egal cu . În 2005, A. Maksimov a arătat că, pe baza biților de ieșire, este posibil să se distingă secvența generatorului VMPC de un flux aleator [4]
Experimentele efectuate de B. Zhultak au arătat că nu există o abatere semnificativă statistic în probabilitatea de apariție în secvența de ieșire:
Se susține că cifrul stream, datorită modificării semnificative a RC4 original , ținând cont de vulnerabilitățile sale, este mai rezistent la atacurile existente asupra cifrurilor stream și la atacurile asupra cifrului RC4 [2] . În același timp, securitatea majorității criptelor de flux este practic redusă la zero atunci când se folosește aceeași cheie pentru a cripta diferite texte clare. Într-un astfel de caz, cifrul de flux nu mai este un generator de tampon unic (un flux de biți aleatori pentru a cripta textul simplu). Această problemă este oarecum rezolvată de cifrul VMPC prin utilizarea unui vector de inițializare unic pentru fiecare flux criptat.
Se susține că complexitatea atacului asupra cifrului este operațiunile [2] . Cu toate acestea, există o metodă care protejează algoritmul de posibile vulnerabilități. Această abordare constă în repetarea de două ori a permutației dependente de cheie: înainte și după permutarea dependentă de vector de inițializare. Acest program cheie este denumit KSA3.
Criptosisteme simetrice | |
---|---|
Cifruri în flux | |
Rețeaua Feistel | |
Rețeaua SP | |
Alte |