Împrumut de text cifrat

Furtul de text cifrat ( CTS) în criptografie este o  metodă comună de utilizare a modului de criptare bloc care vă permite să procesați mesaje de lungime arbitrară în detrimentul unei ușoare creșteri a complexității implementării. Spre deosebire de padding , textul cifrat rezultat nu devine un multiplu al mărimii blocului cifrului utilizat, ci rămâne egal cu lungimea textului simplu original . [unu]

Istorie

Ideea din spatele metodei de împrumut a textului cifrat nu este nouă. În 1982, a fost propus un algoritm pentru procesarea textului simplu de lungime arbitrară în modul de feedback al textului cifrat (CBC) [2] , numit mai târziu CBC-CSX, care a fost utilizat activ de la începutul anilor 1980 în IMB CUSP (Programul de suport al unității criptografice). ) arhitectura.. În 2012, s-a dovedit că această metodă este vulnerabilă la un atac simplu în text simplu . [3]

În 2010, Institutul Național de Standarde și Tehnologie (NIST) a lansat un document care descria 3 opțiuni pentru utilizarea metodei de împrumut împreună cu modul de criptare CBC. [1] Ele sunt denumite CBC-CS1, CBC-CS2 și CBC-CS3 și diferă unul de celălalt doar prin modul în care sunt ordonați biții de text cifrat. Modul CBC-CS2 era cunoscut înainte [4] , precum și modul CBC-CS3 - specificat în comentariile la protocolul Kerberos 5 [5]

Caracteristici generale

Recomandarea NIST SP800-38A [6] afirmă că una dintre restricțiile privind utilizarea modurilor de criptare bloc este necesitatea de a avea un bloc text simplu care să aibă aceeași lungime cu blocul cifrului utilizat. Pentru a rezolva această problemă, puteți utiliza metoda de umplere a textului cifrat . Cu toate acestea, în acest caz, lungimea textului cifrat în comparație cu mesajul inițial este mărită cu numărul de biți utilizați pentru a completa blocul de cifrat.

Împrumutul de text cifrat nu are acest dezavantaj prin schimbarea modului în care sunt procesate ultimele două blocuri ale mesajului. [5] Procesarea tuturor blocurilor, cu excepția ultimelor două, rămâne neschimbată, dar o parte din penultimul bloc de text cifrat este „împrumutat” pentru a-l completa pe ultimul. Ultimul bloc captusit este apoi criptat normal. Textul cifrat final pentru ultimele două blocuri constă din penultimul bloc (cu partea „împrumutată” omisă) și ultimul bloc complet.

Decriptarea necesită mai întâi decriptarea ultimului bloc și apoi returnarea textului cifrat „împrumutat” la penultimul bloc, care poate fi apoi decriptat ca de obicei.

În principiu, orice mod de criptare bloc [7] poate fi utilizat , dar modurile care funcționează ca cifrurile stream pot fi deja aplicate mesajelor de lungime arbitrară fără a fi nevoie de padding, deci nu beneficiază de această metodă. Modurile populare care utilizează împrumutul de text cifrat sunt modul Electronic Codebook ( ECB) și modul de feedback Cipher Block Chaining (CBC) . [5]

Utilizarea metodei de împrumut a textului cifrat pentru modul ECB necesită ca textul simplu să fie mai lung de un bloc [5] . O posibilă soluție este utilizarea modurilor de criptare bloc cu proprietăți asemănătoare streamcipher (de exemplu CTR , CFB sau OFB ) sau metoda de umplutură [7] în situațiile în care dimensiunea textului simplu este de un bloc sau mai puțin.

Folosirea metodei de împrumut a textului cifrat în modul CBC nu impune o condiție obligatorie ca textul simplu să fie mai lung de un bloc [8] . În cazul în care textul este mai mic sau egal cu dimensiunea blocului, vectorul de inițializare (IV) poate acționa ca bloc de text cifrat precedent. Într-un astfel de caz, IV-ul modificat trebuie trimis și destinatarului. Această abordare poate să nu fie posibilă în situațiile în care IV-ul nu poate fi ales în mod liber de către expeditor împreună cu textul cifrat transmis [8] (de exemplu, vectorul de inițializare este calculat din numărul sectorului de hard disk, dintr-un marcaj temporal sau este un valoare), atunci împrumutarea textului cifrat pentru modul CBC- poate avea loc numai pentru texte clare mai lungi de un bloc.

Reprezentare ciphertext

CS1

Cel mai simplu mod de a ordona textul cifrat este să trimiteți mai întâi penultimul bloc scurt și apoi ultimul bloc complet. Dezavantajele acestei abordări sunt următoarele:

  1. În orice caz, ultimul bloc trebuie decriptat înaintea penultimului;
  2. Când este transmis, ultimul bloc nu este aliniat la o graniță naturală, ceea ce complică implementarea hardware;

Avantajul este că, dacă ultimul bloc de text simplu este un multiplu al mărimii blocului de cifrat, textul cifrat este identic cu cel obținut în funcționarea normală fără împrumut.

CS2

Este mai convenabil să schimbați ultimele două blocuri, astfel încât textul cifrat să se încheie cu un ultimul bloc complet, urmat de unul penultimul incomplet. Ca rezultat, blocurile criptate sunt aliniate, ceea ce face mai ușor să lucrezi cu ele. [unu]

Pentru compatibilitate cu modurile de non-împrumut, CS2 efectuează această permutare numai dacă cantitatea de text cifrat împrumutat este diferită de zero, adică atunci când dimensiunea mesajului original nu era un multiplu al mărimii blocului. [unu]

Dezavantajul este că blocurile trebuie tratate diferit pentru mesajele aliniate și nealiniate.

CS3

Această variantă schimbă întotdeauna ultimele două blocuri de text cifrat fără nicio condiție. El este cel care este folosit în descrierile următoare.

Cum funcționează

Pentru criptare și decriptare pe toate blocurile, cu excepția ultimelor două, se utilizează modul standard de funcționare al cifrului bloc.

Următorii pași descriu cum să se ocupe de ultimele blocuri ale textului simplu [7] , notate cu și , unde lungimea este dimensiunea blocului de cifrat în biți și lungimea ultimului bloc  este de biți; - cheia folosită pentru criptare. se află în intervalul de la 1 la inclusiv, deci teoretic poate fi un bloc complet. Descrierea modului în care funcționează modul CBC utilizează, de asemenea, blocul de text cifrat care îl precede pe cel luat în considerare. Dacă textul simplu se încadrează în doar două blocuri, atunci puteți lua în schimb vectorul de inițializare ( ).

Descrierea folosește următoarele funcții și operatori:

BCE

Criptare
  1. . Echivalent cu comportamentul modului standard ECB.
  2. . Cei mai semnificativi biți sunt luați pentru a crea ultimul bloc al textului cifrat . În toate cazurile, ultimele două blocuri sunt transmise în ordinea inversă a blocurilor lor de text simplu corespunzătoare.
  3. . captusit cu biti joase din .
  4. . criptat pentru a crea . Pentru ultimii biți, aceasta este a doua oară când au fost criptați cu cheia (prima oară când s-a întâmplat acest lucru în timpul creării la pasul 1).
Decriptare
  1. . decriptat pentru a obține .
  2. . este completată cu valoarea biților de la capăt extrași în pasul 3 de criptare.
  3. .
  4. .
Propagarea erorilor

O eroare pe un bit la transmiterea acestuia pe un canal de comunicație va duce la deteriorarea completă a blocurilor și . O eroare pe un singur bit va deteriora complet blocul . Aceasta este o schimbare semnificativă față de propagarea erorilor standard în criptarea ECB, unde o eroare într-un bloc de text cifrat corup doar blocul de text simplu corespunzător. [opt]

CBC

Criptare
  1. ; Blocul 3 de la sfârșitul textului cifrat este adăugat la penultimul bloc al textului simplu. Echivalent cu comportamentul modului CBC standard.
  2. .
  3. . Pentru a crea , se iau cei mai semnificativi biți din textul cifrat „intermediar” . În toate cazurile, ultimele două blocuri sunt transmise în ordinea inversă a blocurilor lor de text simplu corespunzătoare.
  4. . Ultimul text simplu este completat cu zerouri la o lungime de biți egală cu lățimea intrării cifrului bloc. Umplutura zero este importantă pentru pasul 5.
  5. . Pentru primii biți ai blocului, acest lucru este echivalent cu modul CBC normal. Completarea textului simplu cu zerouri a fost importantă deoarece operația pe ultimii biți devine echivalentul copierii lor până la sfârșit . Aceștia sunt aceiași biți care nu au fost folosiți la crearea fișierului .
  6. . criptat pentru a crea . Pentru ultimii biți, aceasta este a doua oară când au fost criptați cu cheia (prima oară când s-a întâmplat când au fost creați la pasul 2).
Decriptare
  1. .
  2. .
  3. .
  4. .
Propagarea erorilor

În modul CBC, există deja interacțiune în procesarea diferitelor blocuri adiacente, astfel încât împrumutul de text cifrat are un impact conceptual mai mic. [3] O eroare într-un bit la transmiterea acestuia pe un canal de comunicație va duce la deteriorarea completă a blocurilor și . O eroare într-un bit va schimba bitul corespunzător și va deteriora complet fișierul .

Securitate

În 2010, modul CBC-CSX s-a dovedit a fi nefiabil. [3]

Un exemplu de atac de discriminare a mesajelor [9] folosind textul simplu selectat:

  1. Criptanalistul creează două texte clare identice: și , care sunt criptate folosind vectori de inițializare diferiți ( )
  2. Oracle returnează texte cifrateși. Undeșisunt vectori de inițializare selectați aleatoriu și lungimi.
  3. Dacă analistul returnează 1, în caz contrar 0. Probabilitatea unui meci este de cel puțin 1/2 și astfel se obține un atac banal, dar eficient [3]

Modurile CBC-CS1-3 s-au dovedit a fi fiabile în următoarele condiții: [3]

  1. Cifrul bloc utilizat este o permutare pseudo-aleatoare bună, adică într-un atac de text simplu ales, textul cifrat rezultat nu poate fi distins de un set aleatoriu de biți.
  2. Vectorul de inițializare ( ) este ales aleatoriu și nu poate fi prezis în avans [3]

XTS-AES

Metoda de împrumut a textului cifrat este utilizată în multe sisteme moderne de criptare și decriptare a discurilor. De exemplu, la 27 ianuarie 2010, NIST a publicat versiunea finală a publicației 800-38E, [10] care recomandă utilizarea modului XTS-AES (modul tweaked-codebook bazat pe XEX cu furt de text cifrat și cifru AES), standardizat de IEEE în 2007 [11] , în module criptografice. Acest mod este utilizat pentru criptarea sector cu sector a discurilor sau fișierelor și este considerat cea mai sigură modalitate de stocare a datelor. [unsprezece]

Este suportat de majoritatea aplicațiilor moderne precum BestCrypt [12] , Botan, dm-crypt, FreeOTFE, TrueCrypt, VeraCrypt [13] , DiskCryptor [14] , Mac OS X Lion's FileVault 2 și Windows 10 BitLocker. [cincisprezece]

Note

  1. ↑ 1 2 3 4 M. Dworkin, 2010
  2. Meyer, Carl H., 1982 p. 77-78
  3. ↑ 1 2 3 4 5 6 Phillip Rogaway, Mark Wooding, Haibin Zhang. Securitatea furtului de text cifrat (2012). Data accesului: 7 decembrie 2017. Arhivat din original pe 23 decembrie 2018.
  4. Schneier, Bruce, 1963-. Criptografia aplicată: protocoale, algoritmi și cod sursă în C . — Ed. a II-a. - New York: Wiley, 1996. - xxiii, 758 pagini p. — ISBN 0471128457 .
  5. ↑ 1 2 3 4 Raeburn K., 2005
  6. M. Dworkin, 2001
  7. ↑ 1 2 3 Baldwin, R. și R. Rivest. Algoritmii RC5, RC5-CBC, RC5-CBC-Pad și RC5-CTS . RFC 2040 (octombrie 1996). Preluat la 24 decembrie 2017. Arhivat din original la 7 septembrie 2017.
  8. ↑ 1 2 3 Schneier, Bruce, „Applied Cryptography”, Ediția a doua, John Wiley and Sons, New York, 1996.
  9. Gabidulin E. M., Kshevetsky A. S., Kolybelnikov A. I. Information security: a textbook. - Moscova: MIPT, 2011. - S. 22-23. — 262 p. — ISBN 978-5-7417-0377-9 .
  10. Morris Dworkin. Recomandare pentru modurile de operare Block Cipher: Modul XTS-AES pentru confidențialitate pe dispozitivele de stocare  (engleză)  : jurnal. - National Institute of Standards and Technology , 2010. - Ianuarie ( vol. NIST Special Publication 800-38E ).
  11. ↑ 1 2 Standard pentru protecția criptografică a datelor pe dispozitivele de stocare orientate pe blocuri  (engleză)  : jurnal. - Biblioteca digitală IEEE Xplore, 2008. - 18 aprilie. - ISBN 978-0-7381-5363-6 . - doi : 10.1109/IEEEESTD.2008.4493450 .
  12. Site-ul web BestCrypt Volume Encryption, secțiunea Moduri de criptare . Preluat la 24 decembrie 2017. Arhivat din original la 26 decembrie 2017.
  13. Moduri de operare . Documentația VeraCrypt . IDRIX. Consultat la 13 octombrie 2017. Arhivat din original la 5 iulie 2017.
  14. Changelog Build 757.115 din 2013-01-03 .
  15. Ce este nou în BitLocker? (12 noiembrie 2015). Consultat la 15 noiembrie 2015. Arhivat din original pe 17 noiembrie 2015.

Literatură