Acesta este ceva la care am lucrat.
Aș dori ca „mic” de mai jos să fie mult mai mic decât cel care urmează. Dar acest lucru ar funcționa în scopurile dvs. pentru un set de șiruri binare $S$, hash criptografic $H(x)$, și cheie pre-partajată $k$.
$H(S)=\text{sortare} \{H(x) | x \în S\}$. Numiți asta martorul public pentru $S$. Puteți ascunde dimensiunea setului incluzând hashuri aleatorii la un anumit modul de lungime. Acesta ar fi un martor public fără integritate, dar dă ideea de bază.
Presupunând dimensiunea de $x$ este în general mult mai mare decât $H(x)$, reprezentarea martorului $H(S)$ pentru $S$ este mic comparativ cu reprezentarea pt $S$.
Dacă doriți să restricționați acest lucru la cei cu o cheie simetrică pre-partajată k: (folosesc $+$ pentru adăugare pentru a distinge de setul „astfel încât”)
$H^2(k+S)=\text{sort} \{H(k+H(k+x)) | x \în S\}$. Adăugați o sumă de control cu cheie pentru o verificare a integrității.
$\text{martor pentru S}: H^2(k+S) + H(k+H^2(k+S))$
Din nou, pentru a ascunde dimensiunea $S$ ai putea întotdeauna să adaugi hashe-uri aleatorii la o dimensiune maximă sau (imperfect) la un modul de dimensiune.
Se verifică calitatea de membru: trimite $(n,H(k+n) \bigoplus H(k+x))$ Unde $n$ este un număr crescător (poate fi implicat, cum ar fi un marcaj de timp). Destinatarul poate descoperi $H(k+x)$ si apoi calculeaza $H(k+H(k+x))$ pentru a vedea dacă este în setul de martori.