Panama [1] este o primitivă criptografică care poate fi folosită fie ca funcție hash criptografică, fie ca cifră de flux. A fost dezvoltat în 1998 de Joan Dymen și Craig Klep pentru a îmbunătăți eficiența software-ului pentru arhitecturi pe 32 de biți. Este unul dintre progenitorii algoritmului de hashing Keccak , care a devenit câștigătorul competiției de primitive criptografice de la Institutul Național de Standarde și Tehnologie din SUA [2] . Se bazează în mare măsură pe modulul hash de streaming StepRightUp. [3]
Potrivit dezvoltatorilor, „Panama” la momentul dezvoltării avea un nivel ridicat de securitate, dar acest lucru a fost realizat cu prețul unei sarcini de calcul uriașe. Prin urmare, după cum s-a dovedit, „Panama” ca funcție hash s-a dovedit a fi mai puțin potrivită pentru hashing mesaje decât rivalii săi. Dacă vorbim despre „Panama” ca un cifru de flux, atunci o procedură lungă de inițializare s-a dovedit a fi o trăsătură distinctivă a utilizării sale. Prin urmare, atunci când îl utilizați în sarcini care necesită viteze mari, este necesar să se asigure toate condițiile care vor avea drept scop reducerea numărului de desincronizări. [patru]
S-a presupus că „Panama” va fi folosit în criptarea sau decriptarea videoclipurilor pentru a accesa unele aplicații, în special „TV-ul cu plată”. [5] Logica dezvoltatorilor a fost că set-top box-urile și televizoarele digitale vor folosi procesoare de mare viteză, iar Panama nu ar încărca prea mult aceste procesoare în timpul decriptării.
„Panama” se bazează pe o mașină cu stări finite, constând din două blocuri mari: 544 de biți de stare și un buffer de 8192 de biți, funcționând pe principiul unui registru cu deplasare cu feedback . Feedback-ul asigură că biții de intrare trec prin mai multe iterații după intrare, ceea ce la rândul său asigură difuzia pe biți. Trebuie să spun că un buffer similar este folosit în funcția de compresie SHA. [6] Obiectul de lucru Panama este un cuvânt de 32 de biți și starea constă din 17 astfel de cuvinte, în timp ce bufferul are 32 de celule, fiecare dintre ele conține 8 astfel de cuvinte. [7]
Panama poate actualiza tamponul și statele prin iterare. Iar pentru funcția iterativă sunt implementate trei moduri: „Reset”, „Push” și „Pull”. În modul „Push”, aparatul primește o anumită intrare, dar nu scoate nimic. În modul „Pull”, dimpotrivă, se formează datele de ieșire, dar nimic nu este luat ca intrare. De asemenea, o „iterație Pull goală” înseamnă că rezultatul din acea iterație este aruncat. În modul „Resetare”, starea și tamponul sunt resetate la zero. [opt]
Schimbarea stării este caracterizată de difuzie ridicată și neliniaritate distribuită. [9] Aceasta înseamnă că un număr mic de iterații este suficient pentru a obține o dispersie bună. Acest lucru se face folosind 4 blocuri, fiecare își rezolvă propria sarcină.
Dacă considerăm „Panama” ca o funcție hash, atunci algoritmul pentru funcționarea sa este următorul. Inițial, funcția hash acceptă toate blocurile de mesaje. După aceea, sunt efectuate mai multe iterații „Push”, ceea ce permite ca ultimele blocuri de mesaje primite să fie împrăștiate în interiorul tamponului și al stării. După aceea, se efectuează ultima iterație „Pull”, care vă permite să obțineți rezultatul hash. Schema de criptare în flux este inițializată după cum urmează: în primul rând, trec două iterații „Push” pentru a obține cheia și parametrul de diversificare. După aceea, apar o serie de iterații „Pull” pentru a dispersa cheia și parametrul în interiorul bufferului și stărilor. Aceasta finalizează inițializarea și Panama este gata să creeze biți din secvența de ieșire prin efectuarea iterațiilor „Pull”. [3]
Puteți desemna starea ca , iar cele 17 cuvinte care definesc stările pot fi desemnate ca . Buffer-ul este notat ca , celula sa - ca și unul dintre cuvintele care se află în interiorul acestei celule - ca . Inițial, atât starea, cât și memoria tampon sunt umplute doar cu zerouri. În modul „Push”, „Panama” primește un cuvânt de 8 biți ca intrare, în modul „Pull”, un cuvânt de 8 biți este format ca ieșire. [7]
Dacă desemnăm funcția care actualizează tamponul ca , atunci, dacă acceptăm că , putem obține următoarele reguli pentru actualizarea tamponului:
la , , pentruunde în modul „Push” există un bloc de intrare , iar în modul „Pull” este o parte a stării , adică 8 dintre componentele sale, definite ca
pentruStarea este actualizată conform următoarei reguli , care este o suprapunere a 4 transformări diferite:
unde este o transformare liniară inversă, este, din nou, o transformare liniară inversă, este o combinație de rotație a biților de cuvânt și amestecare a poziției cuvântului, iar transformarea este o adăugare pe biți a memoriei tampon și a cuvântului de intrare.
În acest caz, se va determina suma operațiilor, unde se efectuează prima cea din dreapta.
Acum putem lua în considerare fiecare dintre aceste operațiuni. este definită după cum urmează:
pentru ,unde toți indicii sunt luați modulo . Rețineți că reversibilitatea acestei transformări rezultă din faptul că este coprim cu .
poate fi definit ca:
pentru ,unde toți indicii sunt luați modulo .
Dacă pentru conversie se determină că există un offset în poziții de la bitul cel mai puțin semnificativ la cel mai semnificativ, atunci:
,și , și
Dacă pentru transformare se va efectua aceea , atunci
, pentru , pentruÎn modul „Push” este mesajul de intrare , iar în modul „Pull” - .
Cuvântul de ieșire în modul „Pull” este definit după cum urmează:
. [unsprezece]„Panama” ca funcție hash mapează un rezultat hash de 256 de biți la un mesaj de lungime arbitrară. [11] În acest caz, hashingul are loc în 2 etape
Poate fi notat ca o succesiune de blocuri de intrare . Apoi, în momentul zero de timp, se generează modul Reset, apoi, în timpul ciclurilor, blocurile de intrare sunt încărcate. După aceea, sunt efectuate 32 de iterații „Pull” goale. Și apoi, la a 33-a iterație „Pull”, rezultatul hash este returnat .
Sarcina principală a dezvoltării funcției hash Panama a fost de a găsi o funcție hash „ermetică” [11] , adică o funcție pentru care (dacă rezultatul hash este format din biți):
În plus, nu este posibil să se detecteze corelații sistematice între orice combinație liniară de biți de intrare și orice combinație liniară de biți de rezultat hash. [unsprezece]
Această funcție hash a fost atacată cu succes de două ori. Deja în 2001, s-a demonstrat că această funcție hash nu este sigură criptografic, deoarece au fost găsite coliziuni pentru operațiuni. Mai mult, Joan Dymen a arătat că este posibil să se găsească coliziuni deja pentru operații, iar pentru a satisface parametrii de fiabilitate, este necesar ca coliziunile să fie localizate cel puțin pentru operații. [12]
Funcții hash | |
---|---|
scop general | |
Criptografic | |
Funcții de generare a cheilor | |
Numărul de verificare ( comparație ) | |
Hashes |
|