Adăugarea ( eng. padding ) în criptografie - adăugarea de date fără sens la informațiile criptate, care vizează creșterea puterii criptografice . În criptografia clasică au fost folosite diverse tehnici de umplutură , tehnicile de umplutură au fost utilizate pe scară largă în sistemele de criptare computerizate.
Mesajele formale încep și se termină adesea în moduri previzibile, cum ar fi „ Cu respect,... ”. Scopul principal al aplicării adăugării la cifrurile clasice este de a priva criptoanalistul de posibilitatea de a folosi o astfel de predictibilitate atunci când criptoanalizează un text cunoscut [1] . Lungimea de umplutură aleatorie împiedică, de asemenea, criptoanalistul să cunoască lungimea exactă a mesajului.
Multe cifruri clasice folosesc modele specifice (de exemplu, pătrate, dreptunghiuri și așa mai departe) ca text simplu. Dacă mesajul trimis nu se potrivește șablonului, atunci deseori trebuie să fie completat pentru a completa șablonul. Utilizarea caracterelor fără sens ca o completare în acest caz complică și munca criptoanalistului.
Cele mai multe funcții hash criptografice moderne procesează mesajele în blocuri cu lungime fixă și aproape toate folosesc umplutură într-o anumită măsură.
Multe scheme de umplutură se bazează pe adăugarea anumitor date la ultimul bloc. De exemplu, umplutura poate fi derivată din lungimea totală a mesajului. Acest tip de umplutură este de obicei aplicat algoritmilor hash bazați pe structura Merkle-Damgor .
Electronic codebook (ECB) și cipher-block-chaining (CBC) sunt exemple de moduri de criptare . Modurile de criptare pentru algoritmii cu cheie simetrică necesită ca lungimea mesajului să fie un multiplu al mărimii blocului, așa că este posibil ca mesajul să fie completat pentru a-l face o lungime adecvată.
Dezavantajul padding-ului este că face textul vulnerabil la atacurile Oracle . Acest atac permite unui atacator să obțină cunoștințe despre mesajul transmis fără a ataca primitiv cifrul bloc; acest atac poate fi evitat asigurându-vă că atacatorul nu poate obține cunoștințe despre eliminarea octeților adăugați. Acest lucru poate fi realizat prin verificarea unui cod de autentificare a mesajelor (MAC) sau a semnăturii digitale înainte de a elimina octeții de completare.
Umplutură de bițiUmplutura de biți poate fi aplicată unui mesaj de orice lungime. Mesajul este completat cu un bit de 1 („1”) și un număr de biți zero („0”). Numărul de biți zero adăugați depinde de limita blocului la care trebuie să fie completat mesajul. În termeni de biți, acesta este „1000...0000”. Această metodă poate fi folosită pentru a completa mesaje cu orice număr de biți, nu este absolut necesar ca acestea să fie un număr întreg de octeți. De exemplu, un mesaj de 23 de biți este umplut cu 9 biți pentru a umple un bloc de 32 de biți:
… | 1011 1001 1101 0100 0010 011 1 0000 0000 |
Această umplutură este primul pas într-o schemă de umplutură în două etape utilizată în multe funcții hash, inclusiv MD5 și SHA .
Byte paddingPadding byte poate fi aplicat mesajelor care pot fi codificate ca un număr întreg de octeți.
ANSI X.923În ANSI X.923, octeții sunt completați cu zerouri, iar ultimul octet specifică limita de umplutură sau numărul de octeți adăugați.
Exemplu: În exemplul următor, blocul are o dimensiune de 8 octeți și este necesară o umplutură de 4 octeți.
... | DD DD DD DD DD DD DD DD | DD DD DD DD 00 00 00 04 | ISO 10126În ISO 10126 [2] [3] umplutura trebuie să fie completată cu octeți aleatori, iar ultimul octet trebuie să indice numărul de octeți adăugați.
Exemplu: În exemplul următor, blocul are o dimensiune de 8 octeți și este necesară o umplutură de 4 octeți.
... | DD DD DD DD DD DD DD DD | DD DD DD DD 81 A6 23 04 | PKCS7PKCS#7 este descris în RFC 5652 .
Umplutură în octeți întregi. Valoarea fiecărui octet este egală cu numărul de octeți adăugați, adică N octeți sunt adăugați cu o valoare de N. Numărul de octeți adăugați depinde de limita blocului la care trebuie extins mesajul. Adăugarea va fi una dintre:
01 02 02 03 03 03 04 04 04 04 05 05 05 05 05 etc.Această metodă de umplutură (precum și cele două anterioare) este bine definită numai dacă N este mai mic de 256.
Exemplu: În exemplul următor, blocul are o dimensiune de 8 octeți și este necesară o umplutură de 4 octeți
... | DD DD DD DD DD DD DD DD | DD DD DD DD 04 04 04 04 | ISO/IEC 7816-4ISO/IEC 7816 -4:2005 [4] este identică cu schema de completare a biților aplicată textului de N octeți. În practică, aceasta înseamnă că primul octet suplimentar este în mod necesar „80”, urmat de 0 până la N-1 octeți „00”, dacă este necesar, până când este atinsă granița unui bloc. ISO/IEC 7816-4 este un standard de comunicare pentru carduri inteligente și nu conține în sine nicio specificație criptografică.
Exemplu: În exemplul următor, blocul are o dimensiune de 8 octeți și este necesară o umplutură de 4 octeți
... | DD DD DD DD DD DD DD DD | DD DD DD DD 80 00 00 00 |Următorul exemplu arată umplutura cu un singur octet:
... | DD DD DD DD DD DD DD DD | DD DD DD DD DD DD DD 80 |Toți octeții care trebuie completați sunt umpluți cu zerouri. Schema zero-padding nu este recunoscută de standard, deși este descrisă ca o metodă de 1-s-padding pentru funcții hash și MAC-uri în ISO/IEC 10118-1 [5] și ISO/IEC 9797-1 . [6]
Exemplu: În exemplul următor, blocul are o dimensiune de 8 octeți și este necesară o umplutură de 4 octeți
... | DD DD DD DD DD DD DD DD | DD DD DD DD 00 00 00 00 |Zero-padding poate fi ireversibilă dacă mesajul original sa încheiat cu unul sau mai mulți octeți nuli, ceea ce face imposibilă distingerea octeților de text simplu de octeții de completare.
În criptografia cu cheie publică, umplutura este modul în care un mesaj este pregătit pentru criptare sau semnare cu următoarele scheme: PKCS#1 , OAEP , PSS , PSSR, IEEE P1363 EMSA2 și EMSA5. Forma modernă de umplutură pentru primitivele asimetrice este aplicată algoritmului RSA atunci când este utilizată pentru a cripta un număr limitat de octeți.
Operația se numește „Adăugare” deoarece inițial material aleatoriu este pur și simplu adăugat la mesaj. Această formă de adăugare nu este sigură și, prin urmare, nu mai este utilizată.
Chiar dacă sunt folosite proceduri criptografice perfecte, un atacator poate obține cunoștințe despre cantitatea de trafic care a fost generată. Atacatorul nu poate ști în mod specific ce transmiteau Alice și Bob , dar poate ști că mesajul a fost transmis și cât timp a durat. În unele situații, acest lucru poate fi foarte rău. De exemplu, atunci când țările organizează un atac secret asupra unei alte țări: acest lucru poate fi suficient pentru a alerta acea țară, anunțându-i că există o mulțime de activități clandestine în desfășurare.
Ca un alt exemplu, atunci când criptați fluxurile Voice Over IP care utilizează codificare cu rată de biți variabilă, numărul de biți pe unitatea de timp nu este ascuns, iar acest lucru poate servi pentru a ghici fraza vocală. [7]
Adăugarea unui mesaj ajută la îngreunarea analizei traficului. De obicei, biți aleatori sunt adăugați la sfârșitul mesajului, indicând câți astfel de biți sunt în total.
Criptosisteme simetrice | |
---|---|
Cifruri în flux | |
Rețeaua Feistel | |
Rețeaua SP | |
Alte |
Funcții hash | |
---|---|
scop general | |
Criptografic | |
Funcții de generare a cheilor | |
Numărul de verificare ( comparație ) | |
Hashes |
|