Puncte:1

Sunt cunoscute sau chiar posibile astfel de găuri de vierme de verificare?

drapel in

1. Scenariu

Să presupunem că avem o sursă care generează o valoare aleatorie pe, de exemplu, minut. Deci avem valoare aleatorie $x_1$ în $1$primul minut, $x_2$ în $2$al doilea minut, $\ldots$, $x_n$ în $n$al-lea minut și așa mai departe.

Distribuția valorilor $x_1, x_2, \ldots$ nu este aleatoriu în întregime uniform, dar urmează următoarea regulă: pentru oricare $i \ge 1$, $x_i = (y_i, y_{i+1})$, Unde, $y_i$ este identificatorul unic al $x_i$, și $y_{i+1}$ este identificatorul unic al viitorului $x_{i+1}$ care va sosi în minutul următor.

Cu alte cuvinte, în orice moment $i$al-lea minut, curentul $x_i$, și următorul $x_{i+}$ sunt cunoscute, dar cea de după $x_{i+2}$ este absolut necunoscut sau aleatoriu. Mai jos este un exemplu:

Minutul 1: x_1 = (334234 , 234829129 )
Minutul 2: x_2 = (234829129, 983220 )
Minutul 3: x_3 = (983220 , 831231236347)
...
Minutul n: x_n = (643532754, 3534611 )

O modalitate de a le distruge $n$ valorile, în ordine, este să trimiți fiecare valoare pe măsură ce ajunge, de ex. $h_1 = f(x_1)$, apoi înlănțuiește-l cu următorul nou sosit, de ex. $h_2 = f(x_2 \parallel h_1)$.

Cu alte cuvinte, hash-ul listei ordonate de intrare, în $n$al-lea minut este definit recursiv ca $h_n = f(x_n \parallel h_{n-1})$, cu cazul de bază fiind $h_1 = f(x_1)$.

Avantajul acestei abordări este că, pentru cine rulează acest proces de la început, în fiecare minut, atât timpul de rulare, cât și timpul spațiu-timp sunt în $O(1)$, deoarece poate stoca în cache hash-ul din minutul anterior.

Dezavantajul acestei abordări este că, pentru cineva care nu a urmat procesul și dorește să verifice dacă $h_n$ este într-adevăr hash-ul întregii secvențe, va trebui să o ia de la început cu $h_1$și repetați întregul lanț până când $h_n$. În mod efectiv, acest proces de verificare va dura $O(n)$ spaţiu şi $O(n)$ timp.

2. Gaură de vierme

Ar fi bine dacă este posibil ca, la fiecare $n$ multe lanțuri hashed, putem descoperi a gaură de vierme $w_n$ care are următoarele proprietăți:

  • Odata ce $n$hașul, $h_n$, este în mod legitim calculat off $h_1$ urmând recursiunea completă mai devreme, abia apoi gaura de vierme $w_n$ devine descoperit. Altfel, găsirea $w_n$ este practic imposibil.
  • Pentru un dat $h'_n$ haș care se pretinde a fi $h_n$, gaura de vierme poate scurta verificarea după cum urmează:

$$ w_n(h_1, h'_n) = \begin{cases} 1 & \text{dacă $h'_n = h_n$}\ 0 & \text{else}\ \end{cazuri} $$

  • Cel mai prost timp de rulare asimptotic, precum și cel mai prost spațiu asimptotic pentru calcul $w_n(h_1, h'_n)$ nu este mai rău decât $O(\log n)$. Dacă este posibil să ajungi $O(1)$, asta e chiar mai bine desigur.

Notă. Aceasta este diferită de pre-imagine atacul funcțiilor de hashing. Diferența fiind următoarea:

  • Atacurile pre-imagine permit atacatorului să falsifice un arbitrar intrare care oferă un hash țintă dorit.

  • Această gaură de vierme $w_n$ nu permite falsificarea vreunei intrări arbitrare, ci mai degrabă dezvăluie o cale de scurtătură ascunsă care funcționează numai pentru conectarea unei anumite intrări care permite conectarea $h_n$ înapoi la $h_1$și că singura modalitate de a descoperi o astfel de gaură de vierme este calculând în mod legitim $h_n$ primul.

  • Poate că putem numi o astfel de gaură de vierme a fi un atac condiționat înainte de imagine care nu aduce beneficii adversarului.

3. Întrebare

Sunt cunoscute sau chiar posibile astfel de găuri de vierme de verificare?

fgrieu avatar
drapel ng
Cred că trebuie să existe o intrare suplimentară lângă $n$, $h_1$ și $h'_n$ la algoritmul de calcul $w_n(h_1, h'_n)$. În special, ceea ce face ar trebui să depindă de la $x_1$ la $x_n$, nu? Prin urmare, de ce să scoateți în evidență $h_1$ și ce _în declarația problemei_ împiedică să facă $h_n$ acea intrare suplimentară, care permite o implementare trivială a $w_n(h_1, h'_n)$? Se presupune că $x_1$ până la $x_n$ sunt intrări implicite ale algoritmului menționat?
knaccc avatar
drapel es
Valorile aleatoare trebuie să fie cu adevărat aleatorii și în afara controlului sursei, sau valorile trebuie să fie indistinse doar de aleatoriu pentru un observator?
caveman avatar
drapel in
@fgrieu - Corect, depinde de $x_1, x_2, \ldots$. Cu toate acestea, mă întreb, putem transmite informații despre o astfel de dependență în hashurile de ieșire $h_1, h_2, \ldots$? Cu alte cuvinte, se poate ca $h_2 = f(x_2, h_1)$ să transmită efectiv informații aferente în $x_1$ în $h_2$? Ulterior, pe măsură ce lanțul continuă, $h_n$ poate avea în mod efectiv informații înrudite de la $x_n, x_{n-1}, \ldots, x_1$, aceasta este suficientă pentru a crea o gaură de vierme de verificare $w_n(h_1, h'_n)$ ?
caveman avatar
drapel in
@fgrieu - În ceea ce privește întrebarea dvs. despre declarația problemei care împiedică soluțiile triviale, dacă vă înțeleg corect, este cerința ca complexitatea spațiului pentru „utilizatorul găurii de vierme” să fie constrânsă în $O(\log n)$. Dar, „descoperitorul găurii de vierme” trebuie să facă procesul $O(n)$.
caveman avatar
drapel in
@knaccc - Corect. Valorile sunt aleatorii. De exemplu. persoana care calculează $h_i = f(x_i, h_{i-1})$ nu are absolut nicio idee despre următoarea valoare $x_{i+1}$.
knaccc avatar
drapel es
Da, persoana care calculează hash-ul presupun că o face doar pentru a putea apoi să renunțe la valorile $x_i$ anterioare, dar totuși să poată verifica dacă cineva le furnizează apoi copia corectă a acestor valori în viitor. . Dar întrebarea mea este: faceți valorile aleatoare (de ex.$x_i$) trebuie să fie cu adevărat aleatoare și în afara controlului sursei, sau valorile trebuie să fie indistinse doar de aleatoriu pentru un observator?
caveman avatar
drapel in
@knaccc - Da, cu adevărat aleatoriu, nici măcar sursa nu știe care va fi următoarea valoare. Informațiile despre valorile aleatoare anterioare trec la următoarele din hashes. De exemplu. $h_{i}$ primește informații despre valoarea anterioară $x_{i-1}$ pe măsură ce primește hash $h_{i-1}$.
knaccc avatar
drapel es
Presupun că sursa nu poate fi de încredere pentru a afirma ceva despre valori? Pentru că, dacă sursa este de încredere, sursa poate elibera un „punct de control” la fiecare n$$ oară, unde este anunțat un mesaj semnat care conține cel mai recent hash. Dacă sursa nu poate fi de încredere pentru a afirma ceva, cum poate fi de încredere sursa pentru a introduce o gaură de vierme care atestă valoarea corectă a hash-ului?
fgrieu avatar
drapel ng
Cu alte cuvinte: la întrebarea menționată se răspunde folosind orice hash standard pentru $f$; făcând ca „descoperitorul găurii de vierme” să calculeze $h_n$ (care necesită timp $O(n)$, care este optim); apoi făcând ca gaura de vierme să scoată $1$ dacă al doilea argument se potrivește cu $h_n$. Am concluzionat că întrebarea trebuie rafinată pentru a preveni soluții la fel de plictisitoare. Cum ar fi: vrem ca „descoperitorul găurilor de vierme” să fie la fel de rapid ca un hash standard. De asemenea, avem nevoie de un scop pentru primul parametru al găurii de vierme și nu văd asta în întrebare.
caveman avatar
drapel in
@fgrieu - Corect. Am dat un răspuns greșit despre distribuția $x_1, x_2, \ldots$. Nu este în întregime întâmplător. Funcționează după cum urmează: $x_i = (y_i, y_{i+1})$, unde $y_i$ este identificatorul unic al lui $x_i$ și $y_{i+1}$ este identitatea unică a următorului viitor valoarea $x_{i+1}$. Deci, când $x_1$ este generat în minutul 1, sursa știe care este următorul $y_2$, dar nu știe $y_3$. Deci, are aleatoriu în el, dar nu în întregime. Cât despre încredere: avem încredere doar în $h_1$ pentru a avea dreptate. - Am actualizat postarea cu această clarificare.
Hhan avatar
drapel jp
Cred că noțiunea de gaură de vierme care vă interesează este strâns legată de obiectul recent numit funcție de întârziere verificabilă, vezi de ex. https://eprint.iacr.org/2018/712
Puncte:0
drapel pl

Editați | ×: Răspuns de clarificare folosind un arbore Merkle ca exemplu.

Pentru o listă de valori $x_1,\ldots,x_n$, puteți calcula un arbore Merkle cu rădăcina $h_n$. Pentru un dat $h_n'$ pretins a fi $h_n$, puteți scurta verificarea prin dezvăluirea cale de autentificare de lungime $log_2(n)-1$ între orice hash de frunze cunoscut $f(x_i)$ iar cel revendicat $h_n'$.

Prin definirea găurii de vierme $w_{i,n}$ ca cale de autentificare între $f(x_i)$ și $h_n$, puteți verifica asta $h_n' = h_n$ în $log_2(n)$ apeluri la $f$. Ca pseudo-cod:

def verify(f_x_i, w, h_n):
    h_i = f_x_i
    pentru h_j în w:
        h_i = f(h_i + h_j)
    returnează h_i == h_n

Apoi puteți suna verifica (f(x_i), w_i_n, h_n'). Mai exact, pentru a verifica $h_n'$ nu necesită toate hashingurile anterioare, ci doar un subset de dimensiune logaritmică numit cale de autentificare.


Dezavantajul folosirii unui arbore Merkle aici este că trebuie să presupunem că este perfect echilibrat, adică că $n = 2^k$ pentru unii $k$, iar adăugarea necesită reconstruirea copacului, deci nu există câștig. Adăugând dvs $h_i$ la a Lanțul Munților Merkle în schimb, există ceva similar cu o cale de autentificare pentru a arăta că trăiește sub un set de culmi mai degrabă decât sub o singură rădăcină.

caveman avatar
drapel in
Cum s-ar conecta acele digerări de vârf de hash la $h_1$?

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.