Cereale (cifrat)

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Cereale
General
Designeri Martin Hell , Thomas Johansson și Willi Meier
Prima publicație 2004
Detalii
Dimensiunea cheii 80 de biți
Dimensiunea vectorului de inițializare 64 de biți
Structura LFSR și NLFSR

Grain este un cod de flux propus pentru eSTREAM în 2004 de Martin Hell , Thomas Johansson și Willi Meier . A fost inclus în portofoliul final eSTREAM pentru profilul 2 , adică pentru implementări în hardware cu capacitate limitată. Algoritmul există în două versiuni: prima se numește Grain v1 și folosește o cheie de 80 de biți și un vector de inițializare (vector de inițializare sau IV) de 64 de biți, a doua se numește Grain-128 și folosește o cheie de 128 de biți și o VI de 80 de biți. [1]

Descriere

Funcția internă a Grain funcționează cu blocuri de date de 160 de biți constând dintr-un registru de deplasare a feedback-ului liniar ( LFSR ) de 80 de biți și un registru de deplasare a feedback - ului neliniar ( NLFSR ) întotdeauna la 80 de biți.

Algoritmul actualizează un bit LFSR și un bit NLFSR pentru fiecare bit de text criptat de o funcție de filtru neliniar. NLFSR pe 80 de biți este actualizat cu intrarea care provine din iterația dintre ieșirea generată de o funcție booleană neliniară 5-la-1 și 1-biți generată de LFSR. LFSR pe 80 de biți este actualizat cu o funcție liniară 6-la-1. În timpul execuției, ieșirea algoritmului este reutilizată ca intrare liniară pentru a actualiza atât intrarea NLFSR, cât și intrarea LFSR.

În versiunea originală a Grain, numită Grain Version 0.0 , 1 bit din NLFSR și 4 biți din LFSR au fost folosiți ca intrări ale unei funcții booleene neliniare 5 la 1 și ieșirea a fost combinată liniar cu 1 bit din NLFSR la generează ieșirea Grain.

În versiunea actualizată, denumită Grain Version 1.0 , 1 bit din NLFSR și 4 biți din LFSR sunt trecuți ca intrare în funcția booleană neliniară 5-la-1 (puternic modificată), iar ieșirea este combinată liniar cu 7 biți din NLFSR și apoi publicat ca rezultat final.

Inițializarea cerealelor

Inițializarea cifrului are loc prin încărcarea cheii pe 80 de biți direct în NLFSR și pe 64 de biți IV în LFSR. Restul de 16 biți din acesta din urmă sunt încărcați cu o secvență de 1 biți. Algoritmul este apoi executat de 160 de ori, timp în care ieșirea nu este publicată, dar este reutilizată ca intrare pentru a actualiza atât NLFSR, cât și LFSR.

În ceea ce privește difuzia biților operați prin procedura de inițializare, autorii Grain declară că „cu inițializarea efectuată cu 2 IV-uri diferite care diferă cu un singur bit, probabilitatea ca un bit al registrului de rotație să fie același în ambele cazuri este egală cu 0,5. Simulațiile arată că această valoare se obține după 160 de rotații. "

Performanţă

Algoritmul este proiectat pentru a putea realiza până la 16 pași în paralel, permițând implementări foarte rapide la prețul unei utilizări crescute a resurselor hardware.

Siguranță

Grain 0.0 a fost criptat în 2006 [2] : 2 38 de biți de keystream au fost necesari pentru a recupera cheia de 80 de biți pentru o complexitate de 2 43 de calcule.

Grain 1.0 pare mai robust: până în prezent, niciun atac mai eficient decât forța brută (cu prețul unei complexități de 2 80 de calcule) pare să fie capabil să forțeze algoritmul. Cu toate acestea, în septembrie 2006 Ozgul Kucuk a publicat o lucrare în care a raportat că pentru fiecare pereche (cheie, IV) există o pereche (cheia ', IV') astfel încât are o probabilitate de 1/2 2 că generează o schimbare keystream de 1 bit. Chiar dacă, prin admiterea aceluiași autor, acest fapt nu este exploatabil pentru a efectua un atac real, acesta indică cu siguranță o slăbiciune a algoritmului care trebuie studiat mai mult [3]

Drepturi de autor

Cerealele sunt brevetate, iar drepturile de autor sunt deținute de autorii codului. Posibilitatea utilizării, copierii, modificării sau distribuirii algoritmului este acordată atâta timp cât cerealele nu sunt incluse în produsele acoperite de un brevet.

Cereale-128a

Criptanaliza versiunii pe 128 de biți a arătat un spațiu de îmbunătățire a algoritmului care i-a determinat pe autori să dezvolte o nouă versiune a Grain-128 numită Grain-128a . Această versiune integrează, de asemenea, un algoritm de autentificare a mesajelor . [4] Comparativ cu Grain v1 pe 80 de biți, implementarea acestei noi versiuni necesită mai multe resurse și funcționează la jumătate din viteză: datorită acestui fapt, Grain-128a nu a fost inclus în portofoliul eSTREAM . [1]

Notă

linkuri externe