Luați în considerare următorul scenariu:
Avem doi agenți, A și B.
B trebuie să demonstreze că cunosc un secret A, fără a împărtăși secretul real.
de exemplu.: A are nevoie de o modalitate de a deduplica secretele de la care primesc B, dar nu trebuie să cunoască secretele reale. (și B nu vrea ca ei sa stie)
Gândește-te la asta ca și cum ai împărtăși un hash din acel secret, cu exceptia: este o sursă foarte mică, cu entropie scăzută (există aproximativ 1 miliard de valori posibile). Aceasta înseamnă că un simplu hash ar fi vulnerabil la un atac de dicționar.
Acum, B ar putea adăuga o „sare” ascunsă la fiecare secret pe care îl împărtășesc și apoi să-l hacheze, iar asta ar îngreuna A a face un atac de dicționar. Din câte îmi dau seama, asta ar „rezolva” problema pentru cazul 1-1.
Cu toate acestea, să introducem acum un al treilea agent, C. C trimite același tip de secrete către A. B și C nu-și pot împărtăși secretele între ei.
C poate ajunge să trimită „duplicate” de secrete care B are, chiar dacă ei nu știu ce B are la capătul lor.
A, desigur, acum trebuie să dedubleze nu numai secretele de la B, dar și din C.
Sarea ascunsă nu va mai funcționa pentru că acum C ar trebui să cunoască sarea pentru a putea genera aceleași hashes. In caz contrar A nu ar putea deduplica între chei de la B și C. A avea o sare comună înseamnă însă că C ar putea face un atac de dicționar asupra B sau vice versa.
Poate sa A, B și C ajunge la un acord unde B și C pot împărtăși „dovezile” lor A, într-un fel în care A le poate deduplica, dar nimeni nu poate dezvălui secretele celuilalt?
Dacă da, se poate generaliza acest lucru la un număr mare de consumatori/producători?
Fiind departe de a fi un expert în criptografie (cunosc doar elementele de bază), nu sunt sigur dacă folosesc termenii corespunzători aici. Anunță-mă dacă pot clarifica ceva. De asemenea, aceasta nu este temă sau ceva asemănător - deși a fost motivat de o problemă concretă pe care am citit-o recent, aceasta este în mare parte doar curiozitate. O explicație aproximativă despre motivul pentru care nu este posibil (în cazul în care nu este) ar fi cu siguranță suficientă pentru mine. Același lucru pentru o scurtă descriere a unui algoritm cunoscut, chiar dacă doar numele - cu direcția corectă, pot face eu unele cercetări.
(Doar pentru a fi clar dacă nu este deja: A, B și C nu aveți încredere unul în celălalt)
Exemplu (inventat).
Alice și Bob vor să vândă timbre unui colectionar de timbre. Gândiți-vă la o ștampilă ca fiind un șir de 7 caractere cu doar litere mici, iar colecționarul de ștampile nu poate să le fabrice singur.
Colecționarul de timbre va cumpăra orice ștampilă pe care nu o deține în prezent. Cu toate acestea, nu va cumpăra ștampila imediat: va aștepta să vadă câți vânzători o au, astfel încât să poată cumpăra ștampila la cel mai mic preț.
Așadar, înainte de a trimite ștampila propriu-zisă, Alice (sau Bob) trebuie să trimită o „licitație” colecționarului, astfel încât acesta să poată verifica dacă are deja ștampila sau dacă altcineva a oferit-o. Ei nu pot trimite ștampila reală cu acea ofertă, sau colecționarul ar avea-o gratuit, ceea ce nu este distractiv pentru nimeni. Colecționarul trebuie să știe „care” ștampilă este pentru oferta, chiar dacă nu cunoaște șirul real de 7 caractere - sau nu va putea compara ofertele.