Puncte:1

Schema ZK bazată pe Schnorr

drapel cn

TL;DR: Acest lucru ABSOLUT nu funcționează și prezintă un risc uriaș de securitate.Postează-l oricum în cazul în care există alte amenințări pe care le-am omis sau pentru a descuraja orice altă persoană care vine cu această idee.

Bună! Sunt cam nou în criptografie. Încep să mă aventurez în scheme ZK. Pentru un mic proiect de-al meu cu care intenționez să pun în practică ceea ce am învățat până acum, am venit cu un protocol și mi-ar plăcea să știu dacă este bun (adică sigur, cu adevărat non-interactiv și ZK). , etc). Este aproape reutilizarea protocolului de construcție și verificare a semnăturii Schnorr.

Înființat

  • Jucătorii sunt Alice, Bob si Mulțime.
  • Toți jucătorii sunt de acord cu utilizarea unui subgrup ciclic sigur din punct de vedere criptografic al unei anumite curbe eliptice, cu generator $G$.
  • Bob are o pereche de chei publice/private ($b$,$B=bG$).

Obiectiv

Alice are un secret $s$, la care se angajează public prin anunț $S$ (construit ca $S=sG$).

Bob vrea să demonstreze oricărui membru al mulțimii că știe $s$, dar fără a dezvălui nimic despre $s$ (ZK). În plus, dorește ca dovada lui să fie neinteractivă și reutilizabilă de către orice membru sceptic al mulțimii.

Protocol

  1. anunță public Alice $S$.
  2. Bob pretinde că știe $s$ și depune o dovadă $p=s-b$.
  3. Mulțimea o ia ca pe o dovadă validă, dacă $pG+B=S$.

Motivație

  1. Pentru ca Bob să poată construi un valid $p=s-b$ după bunul plac, i se cere să știe $s$. El știe că verificarea implică eliminarea $-b$ parte, deci neștiind $s$ înseamnă a nu putea ajunge cu $S$ în cele din urmă.
  2. Bob nu oferă nicio informație despre $s$ deoarece este mascat prin adaosul cu $-b$. Din moment ce nimeni altcineva nu știe $b$, în esență, randomizează în mod uniform valorile.
  3. Mulțimea știe că Bob știe de fapt, deoarece generarea dovezii implică cunoașterea $b$ precum și $s$ pentru un principiu similar cu primul punct. Dacă cineva ar ști $s$ dar nu $b$, nu au putut scădea suma corectă $-b$ care este restaurat în timpul procesului de verificare și rezultatul final al acestuia nu ar fi $S$.

Întrebări

  • Este aceasta o schemă ZK non-interactivă validă?
  • Este unul bun dacă da?
  • Există avantaje ale utilizării zkSNARK-urilor față de o astfel de schemă, funcția dovedită este, de exemplu, că utilizatorul cunoaște hash-ul cuvântului și hash-ul cuvântului concatenat cu propria sa cheie publică?

Avertizare

Acest lucru absolut nu funcționează. Este extrem de riscant, deoarece oricărui probator (Bob în acest caz) i-ar putea fi scursă cheia privată: orice alt jucător știe $s$ (Alice în acest caz și orice altă persoană care a pus mâna pe $s$ prin orice mijloace) ar putea face $b = s - p$. În schema de semnătură Schnorr, există un factor care însoțește $b$. Dar acest factor este cunoscut public, deoarece este folosit în protocolul de verificare și, prin urmare, nu protejează $b$ în acest caz. Principala concluzie, pe care mă bucur că o pot lua ca o lecție, este că, în protocolul Schnorr, este esențial să se păstreze $k$ sigur.

knaccc avatar
drapel es
Presupun că în partea zkSNARKs a întrebării dvs., „cuvântul” este secretul $s$? Dacă este un cuvânt, atunci s-ar putea să nu se califice ca fiind entropie ridicată. Nu sunt sigur cum vă ajută să dovediți nu doar cunoașterea unui hash de $s$, ci și a hashului de $s$ concatenat cu cheia publică a lui Bob $B$. zkSNARK-urile sunt mult mai complicate, așa că această parte a întrebării dvs. ar merita probabil o altă întrebare crypto.stackexchange dacă doriți să o explorați mai detaliat.
drapel cn
Da, nu este un cuvânt, este un secret de entropie ridicată (ar putea fi un cuvânt, dar amestecat cu un nonce de entropie suficient de mare). Motivul pentru care îl implic pe B în demonstrație este că vreau ca dovada să fie unică pentru Bob, astfel încât niciun terț Charlie nu poate pretinde că știe răspunsul cu aceeași dovadă. Dar sigur, mă voi gândi mai mult și îi voi pune întrebarea independentă pe care o merită :)
knaccc avatar
drapel es
Dacă vă înțeleg corect cazul dvs. de utilizare, atunci în cazul în care nu este evident: Bob ar putea pur și simplu să furnizeze orice fel de semnătură obișnuită pentru cheia publică $S$ pe un mesaj care include identitatea lui Bob sau cheia publică. Acest lucru ar împiedica reutilizarea semnăturii de către o altă parte care dorea să pretindă și ea cunoașterea $s$.
drapel cn
Nu știu dacă am înțeles pe deplin modul în care spui că poți evita reutilizarea dovezilor. Cu toate acestea, încerc și să reduc la minimum dimensiunea dovezii complete. Ideea este să aveți acest lucru pe un blockchain, astfel încât verificarea unei dovezi zkSNARK corecte este mai ieftină decât dovada zkSNARK + semnătură. Nu mă deranjează să adaug complexitate funcției zkSNARK care se dovedește.
knaccc avatar
drapel es
Tipul de dovadă pe care l-ați specificat în întrebarea dvs. inițială va lega dovada la cheia publică a lui Bob. Cu toate acestea, pentru metoda menționată în comentariul pe care tocmai l-am făcut, semnătura obișnuită nu ar lega dovada de Bob ca autor decât dacă includeți și identitatea lui Bob ca parte a mesajului care este semnat.Prin urmare, spun că puteți evita să creați orice fel de mecanism de semnătură personalizat și, în schimb, utilizați semnături obișnuite pentru cheia publică S și includeți identitatea lui Bob în mesaj pentru a preveni copierea și lipirea semnăturii de către altcineva ca dovadă. stiu si ei $s$.
drapel cn
Nu înțeleg cum îi propuneți lui Bob să demonstreze cunoașterea $s$ într-un mod obligatoriu pentru cheia sa publică doar prin semnarea a ceva care implică $S$. Înțeleg că scheme precum semnăturile Schnorr leagă semnătura de Bob în acest caz, deoarece protocolul de dovezi și verificare utilizează H(m|B). Totuși, în acest caz, ce semnează Bob exact pentru a arăta că știe secretul? Îmi pare rău dacă este de bază și îmi lipsește
knaccc avatar
drapel es
Să presupunem că Bob semnează un mesaj gol folosind cunoașterea $s$. Eve poate doar copia și lipi acea semnătură și susține că ea a fost cea care a demonstrat cunoașterea $s$. Dar dacă Bob semnează mesajul „Acesta este Bob, cheia mea publică este 01234....” folosind cheia privată $s$, atunci Eve nu o poate revendica ca provenind de la ea. Scopul unei semnături este că mesajul nu este maleabil.
drapel cn
Aha, înțeleg. Înțeleg, pur și simplu nu pot să mă gândesc la un conținut de mesaj pe care să îl semnez care să arate cunoștințele despre $s$ fără a scurge informații despre acesta.
knaccc avatar
drapel es
Așa e, nu poți pune $s$ în mesaj. În schimb, creați o semnătură obișnuită și semnați ca și cum ați fi o persoană a cărei cheie publică era $S$ și asta dovedește cunoașterea $s$. Dar apoi, în interiorul mesajului, includeți identitatea dvs. reală $B$.
drapel cn
Super, acum am inteles! Utilizați semnătura Schnorr cu S ca semnatar (Bob știe $s$) și B ca mesaj (fără reutilizare, leagă dovada de Bob). E curat! Mulțumiri
Puncte:0
drapel es

Luați în considerare o variantă echivalentă a unei semnături obișnuite Schnorr care semnează un mesaj $m$. presupun $s$ este un secret de entropie suficient de mare și astfel încât, prin urmare $S$ nu poate fi forțat brutal.

Semnătura ar fi perechea $(B=bG,\ p=c\cdot s-b)$. Ar fi verificat verificând asta $B\overset{?}{=}cS-pG$, Unde $c = H(B \mathbin\| m)$.

Îndepărtezi provocarea $c$, deci primul dezavantaj este că nu mai poți semna un mesaj. Poți doar dovedi că știi $s$.

Prin urmare, aveți perechea $(B=bG,\ p=s-b)$, iar verificarea este $pG\overset{?}{=}S-B$.

Provocarea a făcut, de asemenea, parte dintr-o euristică Fiat-Shamir care a împiedicat $B$ de a fi calculate după provocarea $c$ a fost ales. Prin urmare, există o problemă dacă Bob este capabil să-și declare cheia publică $B$ după $S$ a fost anunțat. Bob ar putea alege pur și simplu o aleatorie $p$ valoare, determina $B=S-pG$și susțin că cheia lui publică este $B$. Acest lucru ar putea fi rezolvat în două moduri: 1. Bob trebuie să declare $B$ înaintea $S$ fiind declarată. 2. Bob trebuie să furnizeze o semnătură care să ateste cunoștințele $b$ astfel încât $B\overset{?}{=}bG$.

Presupunând că cheia publică a lui Bob a fost declarată înainte de $S$ fiind declarat, deci aveți un mod valid de a dovedi cunoștințele despre $s$. După cum ați subliniat, Alice ar putea afla în mod banal cheia privată a lui Bob $b$. Prin urmare, aceasta nu îndeplinește definiția cunoștințelor zero, care necesită „fără a dezvălui informațiile în sine sau orice informație suplimentară".

Prin urmare, construcția dvs. este similară în definiție cu un "semnătura adaptorului„, deoarece „o schemă de semnătură a adaptorului poate autentifica mesajele, dar în același timp scurge un secret anumitor părți”. Schema dvs. nu semnează mesaje, dar dovedește cunoștințele despre $s$ în timp ce se verifică scurgeri $b$ lui Alice.

Rețineți că pot exista și probleme cu schema dvs. în cazul în care există un al doilea secret $s'$, și din anumite motive $s'-s$ devine cunoscut.

drapel cn
A fost foarte amănunțit, mulțumesc! 1) În paragraful 2, semnătura ar trebui să fie (B, p=c.s-b) în schimb? Oricum, în schema mea nu am inclus factorul pentru că mă interesează doar să dovedesc cunoștințele și nu să semnez. 2) Mi-a plăcut al doilea vector de atac cu declarația lui B după S.În cazul meu, asta nu ar fi o problemă, deoarece jucătorii interacționează într-un mod care necesită să-și cunoască cheile private. Dar mi s-a părut foarte inteligent! 3) Mulțumesc pentru informațiile despre semnătura adaptorului, cu siguranță voi arunca o privire!
knaccc avatar
drapel es
@GastonMaffei oops, da, mulțumesc, am uitat $c$. Am modificat raspunsul.

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.