Fundal. Toți algoritmii MKDF (KDF cu memorie cu memorie) pe care îi cunosc (Scrypt, Argon2, Balloon) nu necesită cu adevărat toată memoria în fiecare moment în timpul de rulare a implementării algoritmului, ci necesită o penalizare de calcul considerabilă atunci când este utilizată mai puțină memorie. .
Aproximativ, utilizarea memoriei în raport cu graficul de timp arată astfel (desigur, MKDF-urile mai bune vor avea mai multe vârfuri adiacente):
(Imagine de la Acolo)
Cred că această limitare (nu are nevoie de memorie în fiecare moment) se datorează modului în care funcționează computerele de uz general (de exemplu, CPU, RAM).
Întrebare. Dacă lasăm ipoteza despre hardware (de exemplu, permitem hardware specializat), putem defini un algoritm MKDF care necesită toată memoria sa în fiecare moment? De exemplu. putem face astfel încât graficul să arate o linie dreaptă?
Gândurile mele până acum. Imaginați-vă dacă avem un plan de memorie mecanic, în care starea fiecărui bit de memorie este conectată la starea oricărui alt bit, astfel încât, dacă inversăm valoarea unui bit, acesta va determina inversarea fiecărui bit din întreaga memorie.
Cu acest plan de memorie mecanică, executăm o singură instrucțiune care inversează 1 bit și acea singură operație va inversa mecanic starea tuturor celorlalți biți.
Dacă relația dintre biți nu este previzibilă (de exemplu, asemănătoare cu modul în care o mică modificare într-un bloc de text clar are ca rezultat modificarea completă a textului cifrat), atunci cred că această memorie mecanică a devenit un MKDF care poate funcționa astfel:
- Utilizatorul inițializează memoria umplând-o cu biți aleatori care sunt generați din unele semințe. Acest lucru se face o singură dată.
- Utilizatorul își codifică parola în cei mai semnificativi biți din planul memoriei mecanice. Acest lucru se face evident de fiecare dată când utilizatorul dorește să obțină o cheie mai sigură din parola sa.
- Pe măsură ce utilizatorul își codifică parola în primii biți ai acelei foi de memorie mecanică, stările tuturor biților din foaia de memorie mecanică se vor răsturna într-un mod imprevizibil.
- În cele din urmă, când utilizatorul a terminat de codificarea parolei, el alege pur și simplu cei mai puțin semnificativi biți din acel plan de memorie mecanică ca cheie derivată.
Dacă un adversar încearcă să facă acest lucru cu un plan de memorie mecanic mai mic (cu mai puțini biți de memorie), atunci cheia lui derivată va fi total aleatorie.
Dacă presupunerile mele sunt corecte și că implementarea unui astfel de hardware este fezabilă, atunci:
- Aceasta este o platformă pentru algoritmi bazați pe hardware MKDF care mereu necesită aceeași cantitate de memorie, la fiecare moment de timp în timpul de rulare a funcției de derivare a cheii.
- Utilizatorul cumpără un singur plan de memorie mecanică pentru propriile autentificări, astfel încât utilizatorul își poate permite deoarece este o singură achiziție. Dar adversarul va trebui să cumpere multe dintre aceste foi pentru a le face în paralel. Deci, cred că este scalabil pentru utilizator, dar nu pentru adversar.
eu ghici putem implementa acest plan de memorie mecanic folosind:
- Cuantele încurcate este probabil un mod mai natural de a gândi despre asta.
- O placă mecanică mare, cu multă grăsime, pentru a nu se bloca roțile.
- Electronică pentru o alternativă mai mică și mai puțin grasă.