Aceasta este o petrecere a două ($P$, pregătitorul și $C$ alegătorul) protocol cu $4$ pași (și trei runde de comunicare, dacă ZKP-urile nu sunt interactive).
Cele două părți au ca informații comune cheia publică $pk$ iar perechile $(a_i, b_i)$.
Pregătitorul știe și cheia secretă $sk$.
În primul pas, pregătitorul $P$ aplicați o permutare aleatorie a perechilor și criptați (conform $pk$) fiecare pereche coordonează și trimite rezultatul la alegere și face un ZKP că acest rezultat a fost calculat cu onestitate.
În timpul celui de-al doilea pas, alegătorul alege un index $\ell$, și orbește textul cifrat $c_\ell$ (care este o criptare a unuia dintre $a$). Ei trimit acest text cifrat orb $e$, și face un ZKP care a fost generat sincer.
În timpul celui de-al treilea pas, pregătitorul calculează decriptarea $a$ de $e$ și ieșire (înseamnă că este rezultatul pentru el). Apoi a trimis lanțul de $b$ cu aleatorietatea în ordinea permutației pe care a ales-o anterior.
Și, în sfârșit, la ultimul pas, selecționerul preia elementul simplu al aceluiași index al $c$ a orbește anterior (poate, pentru că știe indexul pe care l-a ales), verifică că este cel bun recriptându-l (pentru că primește și aleatorietatea) și apoi scoate indexul corespunzător $b$.
La finalul protocolului $P$ cunoaste un $a$, și $C$ A $b$ care sunt corelate (corespund unei perechi $(a_i, b_i)$), Și nici unul $P$, nici $V$ poate forța o anumită pereche să fie aleasă (dacă doar una este sinceră, perechea va fi aleasă uniform la întâmplare).