În primul rând, să abordăm partea bonus: când rezolvi acest tip de problemă, de obicei ajungeți cu un fel de protocol care să dovedească că utilizatorul de forum revendicat face parte din setul actual de utilizatori ai forumului. Când se modifică setul de utilizatori actuali ai forumului, ar trebui să puteți doar să rulați din nou acest protocol pentru a verifica dacă utilizatorul în cauză este încă autorizat.Acest lucru funcționează și mai bine dacă aveți un fel de identificator pseudo-aleatoriu determinist pentru fiecare utilizator de forum.
Pentru partea de demonstrare reală, există două opțiuni pe care le văd: Folosirea unei dovezi de zero cunoștințe cu un hash și o dovadă de apartenență la grup sau utilizarea unui protocol de calcul cu două părți cu un PRF și un predicat de apartenență la grup. Fără partea de pseudonimizare, acesta ar fi un caz standard pentru semnătura de inel sau o semnătură de grup care dovedește că puteți produce o semnătură valabilă sub o cheie publică dintr-un grup. Ca o alternativă, dacă puteți convinge operațiunea forumului să colaboreze, ar fi utilizarea de acreditări anonime / jetoane orbite, cum ar fi Pass de confidențialitate.
Partea dificilă este că trebuie ca furnizorul de servicii să învețe un identificator pentru utilizator care nu poate fi (re)ales în mod arbitrar de către utilizator și, în același timp, nu permite unui atacator plin de resurse să identifice utilizatorul exact din identificator. . Cea mai bună soluție cu care aș putea găsi pentru aceasta este să hașez / PRF cheia privată, care oricum nu ar trebui să fie forțată în mod brut și, astfel, nu scurge identitatea, împiedicând în același timp alți utilizatori să se prezinte unul pe celălalt prin partea AND a dovezii / protocol.
Concret, presupunând că aveți un protocol generic de dovezi cu zero cunoștințe, doriți să demonstrați că utilizatorul își cunoaște cheia privată $x$ astfel încât $H=\operatorname{Hash}(x)\land \exists i: \operatorname{is-public-key-of}(\text{pk}_i,x)$ ține unde $\{\text{pk}_i\}$ este setul de chei publice actuale ale utilizatorilor de forum și modelează funcția hash ca un oracol aleatoriu pentru a nu fi una dintre acele funcții hash „prostie” care scurg intrarea. O formulare alternativă a afirmației de mai sus care trebuie dovedită ar fi $H=\operatorname{Hash}(x)\land (\bigvee_i \operatorname{is-public-key-of}(\text{pk}_i,x))$ pentru a sublinia natura „SAU” a celei de-a doua părți. Această hârtie se pare că ar putea ajuta cu această abordare.
Alternativ, același lucru ar trebui, de asemenea, să fie realizabil în baza unor ipoteze diferite, folosind calcule multi-partide securizate. În special, aici ați defini o funcționalitate care preia de la utilizatorul forumului cheia privată $x$, de la furnizorul de servicii o cheie aleatorie simetrică statică $k$ și apoi ca intrare publică lista curentă de chei publice de forum. Funcționalitatea ar ieși apoi puțin $b$ indicând dacă $\bigvee_i \operatorname{este-cheia-publică-de}(\text{pk}_i,x)$ ține și un șir aleatoriu $I=\operatorname{PRF}(k,x)$ ca identificator de utilizator al forumului. Deși cred că ambele aceste sub-operațiuni tind să aibă protocoale specializate eficiente în mod individual, din păcate, nu gândi există în general o modalitate bună de a „lega” intrările la aceste protocoale împreună, astfel încât utilizatorul să nu folosească o intrare diferită pentru un sub-protocol. Pentru aceasta, un cadru 2PC cu protocol mixt ar fi probabil cea mai bună opțiune, de ex. ABY, MIŞCARE, sau ABY 2.0 deoarece vă permit să faceți verificarea relației cheii private-publice cu operații aritmetice și verificarea hash / evaluarea PRF cu cele binare.