Wrocław University of Science and TechnologyDepartment of Fundamentals of Computer Science

Kryptografia II stopień

Od definicji bezpieczeństwa do konstrukcji, redukcji i publikacji naukowych.

W11. Anonimowość i zaprzeczalność

Podpis pierścieniowy przekonuje, że podpisał ktoś ze zbioru kluczy. Podpis grupowy może mieć zarządcę i kontrolowane otwarcie tożsamości. Podpis progowy wymaga współpracy określonej liczby podmiotów. To różne funkcjonalności.

Interfejs podpisu pierścieniowego

Rozszerzamy znany interfejs podpisu, a nie zastępujemy go anonimową „czarną skrzynką”. Schemat Πring=(Setup,KeyGen,RingSign,RingVerify)\Pi_{\mathrm{ring}}=(\mathsf{Setup},\mathsf{KeyGen},\mathsf{RingSign},\mathsf{RingVerify}) tworzy parametry i klucze użytkowników. Jawny pierścień jest uporządkowaną listą kluczy L=(pk1,…,pkn)L=(pk_1,\ldots,pk_n). Podpisujący zna tylko własny skjsk_j, zgodny z pkjpk_j na tej liście.

σ←RingSign(pp,L,j,skj,m),b=RingVerify(pp,L,m,σ).\sigma\leftarrow\mathsf{RingSign}(pp,L,j,sk_j,m),\qquad b=\mathsf{RingVerify}(pp,L,m,\sigma).

Indeks jj jest lokalnym wejściem podpisującego, nie argumentem weryfikatora. Wynik b=1b=1 oznacza akceptację względem wiadomości i wskazanego pierścienia. Poprawność wymaga akceptacji uczciwego podpisu. Niepodrabialność i anonimowość są odrębnymi wymaganiami. Ich definicje ustalają m.in. dopuszczalne klucze, dostęp do podpisywania i ujawnienia sekretów. Najpierw poznamy mechanizm dowodu „znam jeden ze świadków”, a potem dokładną konstrukcję Herranza–Sáeza.

W grze anonimowości przeciwnik wskazuje dwóch uprawnionych podpisujących i wiadomość. Otrzymuje podpis jednego z nich, wybranego losowo. Trzeba określić dostęp do kluczy i losowości. Anonimowość bez ujawnień nie implikuje anonimowości po ujawnieniu losowości.

Najpierw algebra dowodu OR

OR
or. Lub, czyli alternatywa logiczna. To angielskie słowo, nie akronim. Dowód OR dotyczy spełnienia co najmniej jednej z podanych relacji.

Dowodzimy znajomości logarytmu A0=ga0A_0=g^{a_0} lub A1=ga1A_1=g^{a_1}.

Interaktywny dowód OR: algorytmy i przepływ

Dowodzący zna jeden z sekretów a_j dla j∈{0,1}. Drugi indeks oznaczamy k=1−j. Setup i KeyGen są takie jak w Schnorrze. Wszystkie poniższe losowania i sumy skalarne odbywają się w ℤ_q.

Π=(Setup,KeyGen,Commit,Challenge,Respond,Check)\Pi=(\mathsf{Setup},\mathsf{KeyGen},\mathsf{Commit},\mathsf{Challenge},\mathsf{Respond},\mathsf{Check})
Setup(1λ)\mathsf{Setup}(1^\lambda)⟶pp\longrightarrow pp
pp=(G,q,g)pp=(G,q,g)
∣G∣=q,G=⟨g⟩|G|=q,\quad G=\langle g\rangle

Rząd q jest liczbą pierwszą. Ustal kodowania i działania grupy. Dodatkowe funkcje wskazano przy konstrukcji.

KeyGen(pp)\mathsf{KeyGen}(pp)⟶(A,a)\longrightarrow (A,a)
a←$Zq∗,A=gaa\overset{\$}{\leftarrow}\mathbb Z_q^*,\quad A=g^a

Sekret a pozostaje u właściciela. Odbiorca uwierzytelnia publiczny A.

Commit(pp,A0,A1,j)\mathsf{Commit}(pp,A_0,A_1,j)⟶((X0,X1),stP)\longrightarrow ((X_0,X_1),st_P)
uj,ck,sk←$Zqu_j,c_k,s_k\overset{\$}{\leftarrow}\mathbb Z_q
Xj=guj,Xk=gsk⋅Ak−ckX_j=g^{u_j},\quad X_k=g^{s_k}\cdot A_k^{-c_k}

Stan zachowuje j, u_j, c_k, s_k.

Challenge(pp,X0,X1)\mathsf{Challenge}(pp,X_0,X_1)⟶c\longrightarrow c
c←$Zqc\overset{\$}{\leftarrow}\mathbb Z_q
Respond(pp,aj,stP,c)\mathsf{Respond}(pp,a_j,st_P,c)⟶(c0,c1,s0,s1)\longrightarrow (c_0,c_1,s_0,s_1)
cj=c−ck,sj=uj+cj⋅ajc_j=c-c_k,\quad s_j=u_j+c_j\cdot a_j

Zużyj stan sesji.

Check(pp,A0,A1,X0,X1,c,c0,c1,s0,s1)\mathsf{Check}(pp,A_0,A_1,X_0,X_1,c,c_0,c_1,s_0,s_1)⟶b\longrightarrow b
b=[c0+c1=c]∧[gs0=X0⋅A0c0]b=[c_0+c_1=c]\land[g^{s_0}=X_0\cdot A_0^{c_0}]
b=∧[gs1=X1⋅A1c1]\phantom{b=}\land[g^{s_1}=X_1\cdot A_1^{c_1}]

Sprawdź grupy, zakresy i oba równania.

Interaktywny dowód OR: czynności i komunikatyDowodzącyWeryfikatorCommit: gałąź znana i symulowanaBez wskazania znanej gałęziChallengeJedno globalne wyzwanieRespondOdpowiedzi obu gałęziCheck

Interaktywny dowód OR

Dowodzący: pp,A0,A1,j,ajpp,A_0,A_1,j,a_j

Weryfikator: pp,A0,A1pp,A_0,A_1

  1. Dowodzący, Commit: gałąź znana i symulowana: Xj=gujX_j=g^{u_j} Xk=gsk⋅Ak−ckX_k=g^{s_k}\cdot A_k^{-c_k}
  2. Dowodzący → Weryfikator: (X0,X1)(X_0,X_1) Bez wskazania znanej gałęzi
  3. Weryfikator, Challenge: c←$Zqc\overset{\$}{\leftarrow}\mathbb Z_q
  4. Weryfikator → Dowodzący: cc Jedno globalne wyzwanie
  5. Dowodzący, Respond: cj=c−ckc_j=c-c_k sj=uj+cj⋅ajs_j=u_j+c_j\cdot a_j
  6. Dowodzący → Weryfikator: (c0,c1,s0,s1)(c_0,c_1,s_0,s_1) Odpowiedzi obu gałęzi
  7. Weryfikator, Check: c0+c1=?cc_0+c_1\stackrel{?}{=}c gsi=?Xi⋅Aici(i=0,1)g^{s_i}\stackrel{?}{=}X_i\cdot A_i^{c_i}\quad(i=0,1)
Gałąź symulowana jest przygotowana przed wyzwaniem. Gałąź z prawdziwym sekretem dopasowuje sumę. To interaktywny OR, nie podpis Herranza–Sáeza.

Znając a0a_0, losujemy u0u_0 i wyznaczamy X0=gu0X_0=g^{u_0}. Gałąź 1 symulujemy przez c1,s1c_1,s_1 i X1=gs1⋅A1−c1X_1=g^{s_1}\cdot A_1^{-c_1}. Po globalnym wyzwaniu cc ustalamy c0=c−c1c_0=c-c_1 oraz s0=u0+c0⋅a0s_0=u_0+c_0\cdot a_0.

Weryfikator sprawdza oba równania i sumę c0+c1=cc_0+c_1=c. Dla ustalonego cc wyzwania są jednostajne w zbiorze o tej sumie. Odpowiedzi są przesunięciami jednostajnej losowości. Rozkład transkryptu nie wskazuje rzeczywistej gałęzi. To argument dla tego protokołu i rozkładu, nie dowód każdej ring signature.

Po Fiat–Shamir globalne wyzwanie musi wiązać uporządkowany pierścień, zobowiązania i wiadomość. Rewinding przy wielu zapytaniach wymaga kontroli ich wzorca. Herranz–Sáez analizują określone konstrukcje, nie dowolne sklejenie podpisów.

Więcej gałęzi i rachunek anonimowości

Rozszerzenie dowodu OR do wielu kluczy: dla wszystkich gałęzi poza rzeczywistą losujemy ci,sic_i,s_i i wyznaczamy Xi=gsi⋅Ai−ciX_i=g^{s_i}\cdot A_i^{-c_i}. W rzeczywistej gałęzi jj wysyłamy Xj=guX_j=g^u. Po wyzwaniu globalnym ustalamy cj=c−∑i≠jcic_j=c-\sum_{i\ne j}c_i i sj=u+aj⋅cjs_j=u+a_j\cdot c_j. Weryfikacja obejmuje każde równanie i sumę wyzwań. Podpis pierścieniowy musi dodatkowo określić kodowanie listy, dopuszczalne klucze i model bezpieczeństwa.

Pogłębienie: anonimowość przez liczenie. Dla ustalonego cc wektor wyzwań o sumie cc jest jednostajny. Każdy ma prawdopodobieństwo q−(n−1)q^{-(n-1)}. Wektor odpowiedzi jest jednostajny na Zqn\mathbb Z_q^n, gdy rzeczywisty nonce losujemy z całego ciała. Zobowiązania są jednoznacznie wyznaczone przez klucze, wyzwania i odpowiedzi. Warunkowe prawdopodobieństwo takiego akceptującego transkryptu przy ustalonym cc wynosi q−(2n−1)q^{-(2n-1)} niezależnie od indeksu rzeczywistej gałęzi. Jeśli liczymy także niezależne, jednostajne losowanie globalnego cc, prawdopodobieństwo konkretnego pełnego transkryptu wynosi q−2nq^{-2n}. Jest to argument dla uczciwego interaktywnego wyzwania. Przeniesienie do wersji nieinteraktywnej musi uwzględnić wyrocznię i ewentualne ujawnienia.

Odbiorca a osoba trzecia

Jeśli odbiorca może sam stworzyć transkrypt o tym samym rozkładzie, pokazanie go osobie trzeciej nie dowodzi samo w sobie udziału nadawcy. Dodatkowe logi lub ujawniony stan mogą zmienić sytuację. HVZK nie rozwiązuje wszystkich modeli zaprzeczalności.

Powiązania: C9: anonimowość, C10: zaprzeczalność, hierarchiczne podpisy pierścieniowe.

Podpis pierścieniowy Herranza–Sáeza: jeden sekret, wspólne równanie

Cel: odbiorca ma wiedzieć, że podpisał posiadacz jednego z kluczy wskazanego pierścienia. Nie powinien dowiedzieć się, którego. Nie ma zarządcy otwierającego tożsamość. Pozostali użytkownicy w pierścieniu nie muszą uczestniczyć w podpisywaniu ani wyrażać zgody na każdy podpis.

Poniższa konstrukcja pochodzi z pracy Javiera Herranza i Germána Sáeza, Forking Lemmas in the Ring Signatures' Scenario, §4.2–4.4. Nie jest poprzednim dowodem OR z wyzwaniami sumującymi się do jednej wartości. Tutaj każdy element zobowiązania ma własny hasz, a podpis zawiera jedną odpowiedź skalarną. Publikacja oryginalna.

Parametry i oznaczenia. Grupa G=⟨g⟩G=\langle g\rangle ma pierwszy rząd qq. Ustalony, uporządkowany pierścień to L=(A1,…,An)L=(A_1,\ldots,A_n), gdzie Ai=gai≠1GA_i=g^{a_i}\ne1_G. Przyjmujemy różne klucze i 1≤n<q1\le n<q. Sekret aia_i jest niezerowym skalarem. Wiadomość oznaczamy mm, zobowiązania RiR_i, wyzwania cic_i, a łączną odpowiedź zz. Podpis to σ=(R1,…,Rn,z)\sigma=(R_1,\ldots,R_n,z).

Stosujemy ℋ(m,R)∈Zq\mathcal H(m,R)\in\mathbb Z_q, z jednoznacznym kodowaniem pary. W publikacji sekrety oznaczono xix_i, klucze yiy_i, wyzwania hih_i, a odpowiedź symbolem σ\sigma. Nasza zmiana liter nie zmienia równań. Publikacja zapisuje też wyzwania w podpisie. Tutaj je odtwarzamy i zawsze sprawdzamy równanie z rzeczywistymi wartościami hasza.

Podpis pierścieniowy Herranza–Sáeza: algorytmy i przepływ

Parametry i ograniczenia pierścienia L są podane wyżej. Jeden podpisujący zna sekret swojego klucza. Pozostali użytkownicy w pierścieniu nie wykonują kroków podpisywania.

Π=(Setup,KeyGen,RingSign,RingVerify)\Pi=(\mathsf{Setup},\mathsf{KeyGen},\mathsf{RingSign},\mathsf{RingVerify})
Setup(1λ)\mathsf{Setup}(1^\lambda)⟶pp\longrightarrow pp
pp=(G,q,g)pp=(G,q,g)
∣G∣=q,G=⟨g⟩|G|=q,\quad G=\langle g\rangle

Rząd q jest liczbą pierwszą. Ustal kodowania i działania grupy. Dodatkowe funkcje wskazano przy konstrukcji.

KeyGen(pp)\mathsf{KeyGen}(pp)⟶(A,a)\longrightarrow (A,a)
a←$Zq∗,A=gaa\overset{\$}{\leftarrow}\mathbb Z_q^*,\quad A=g^a

Sekret a pozostaje u właściciela. Odbiorca uwierzytelnia publiczny A.

RingSign(pp,L,j,aj,m)\mathsf{RingSign}(pp,L,j,a_j,m)⟶σ=(R1,…,Rn,z)\longrightarrow \sigma=(R_1,\ldots,R_n,z)
i≠j:Ri=gui,ci=ℋ(m,Ri)i\ne j:\quad R_i=g^{u_i},\quad c_i=\mathcal H(m,R_i)
Rj=gu⋅∏i≠jAi−ciR_j=g^u\cdot\prod_{i\ne j}A_i^{-c_i}
cj=ℋ(m,Rj)c_j=\mathcal H(m,R_j)
z=u+∑i≠jui+aj⋅cj(modq)z=u+\sum_{i\ne j}u_i+a_j\cdot c_j\pmod q

Losuj różne niezerowe nonce dla pozostałych miejsc. Własny nonce losuj z całego ciała i ponawiaj, aż wszystkie zobowiązania będą różne i niejednostkowe.

RingVerify(pp,L,m,σ)\mathsf{RingVerify}(pp,L,m,\sigma)⟶b∈{0,1}\longrightarrow b\in\{0,1\}
ci=ℋ(m,Ri)(1≤i≤n)c_i=\mathcal H(m,R_i)\quad(1\le i\le n)
b=[gz=∏iRi⋅∏iAici]b=[g^z=\prod_i R_i\cdot\prod_i A_i^{c_i}]

Sprawdź pierścień, typy, zakres z oraz różność i niejednostkowość R_i. Setup obejmuje ℋ i kodowanie pary.

Podpis pierścieniowy Herranza–Sáeza: czynności i komunikatyPodpisującyWeryfikatorRingSign: pozostałe miejscaRingSign: własne miejsce
Ponawiaj u przy niedozwolonym R_j.
RingSign: jedna odpowiedźBez indeksu j i bez losowościRingVerify

Podpis pierścieniowy Herranza–Sáeza

Podpisujący: pp,L,j,aj,mpp,L,j,a_j,m

Weryfikator: pp,Lpp,L

  1. Podpisujący, RingSign: pozostałe miejsca: Ri=gui,ci=ℋ(m,Ri)R_i=g^{u_i},\quad c_i=\mathcal H(m,R_i) i≠ji\ne j
  2. Podpisujący, RingSign: własne miejsce: Rj=gu⋅∏i≠jAi−ciR_j=g^u\cdot\prod_{i\ne j}A_i^{-c_i} cj=ℋ(m,Rj)c_j=\mathcal H(m,R_j) Ponawiaj u przy niedozwolonym R_j.
  3. Podpisujący, RingSign: jedna odpowiedź: z=u+∑i≠jui+aj⋅cjz=u+\sum_{i\ne j}u_i+a_j\cdot c_j
  4. Podpisujący → Weryfikator: (L,m,σ)(L,m,\sigma) Bez indeksu j i bez losowości
  5. Weryfikator, RingVerify: ci=ℋ(m,Ri)c_i=\mathcal H(m,R_i) gz=?∏iRi⋅∏iAicig^z\stackrel{?}{=}\prod_i R_i\cdot\prod_i A_i^{c_i}
To nie protokół, w którym wszyscy użytkownicy w pierścieniu odsyłają części podpisu. Jest jeden wykonawca RingSign i jeden publiczny test. Herranz–Sáez, §4.

Podpisywanie krok po kroku

Podpisujący ma indeks jj i zna tylko swój sekret aja_j.

  1. Pozostałe miejsca. Dla i≠ji\ne j kolejno losuje ui←$Zq∗∖Uu_i\overset{\$}{\leftarrow}\mathbb Z_q^*\setminus U, gdzie UU jest zbiorem już wybranych skalarów. Początkowo U=∅U=\varnothing. Po każdym losowaniu dodaje uiu_i do UU. To losowanie bez zwracania, nie niezależne losowania z całego zbioru. Oblicza Ri=guiR_i=g^{u_i} i ci=ℋ(m,Ri)c_i=\mathcal H(m,R_i).
  2. Zamknięcie równania. Losuje u←$Zqu\overset{\$}{\leftarrow}\mathbb Z_q i oblicza
Rj=gu⋅∏i≠jAi−ci.R_j=g^u\cdot\prod_{i\ne j}A_i^{-c_i}.
  1. Jeżeli Rj=1GR_j=1_G albo Rj=RiR_j=R_i dla któregoś i≠ji\ne j, ponownie losuje tylko uu. Zachowuje pozostałe zobowiązania.
  2. Oblicza cj=ℋ(m,Rj)c_j=\mathcal H(m,R_j) oraz
z=u+∑i≠jui+aj⋅cj(modq).z=u+\sum_{i\ne j}u_i+a_j\cdot c_j\pmod q.
  1. Zwraca σ\sigma. Indeks jj i losowość nie są elementami publicznego podpisu.

Dlaczego to możliwe? Do przygotowania RjR_j wystarczają cudze klucze publiczne. Własny sekret jest potrzebny dopiero przy obliczaniu zz. Podpisujący dopasowuje jedną pozycję tak, aby wszystkie składniki złożyły się w równanie weryfikacyjne.

Weryfikacja i dowód poprawności

Sprawdzamy typy i przynależność do grupy, zakres skalaru oraz różność i niezerowość zobowiązań. Te ostatnie ograniczenia są częścią rozpatrywanego profilu generycznych podpisów w raporcie. Następnie odtwarzamy wszystkie cic_i i akceptujemy dokładnie wtedy, gdy

gz=(∏i=1nRi)⋅(∏i=1nAici).g^z=\left(\prod_{i=1}^{n}R_i\right)\cdot\left(\prod_{i=1}^{n}A_i^{c_i}\right).

Po podstawieniu RjR_j czynniki Ai−ciA_i^{-c_i} dla i≠ji\ne j skracają się z AiciA_i^{c_i}. Pozostaje

gu⋅(∏i≠jgui)⋅Ajcj=gu+∑i≠jui+aj⋅cj=gz.g^u\cdot\left(\prod_{i\ne j}g^{u_i}\right)\cdot A_j^{c_j} =g^{u+\sum_{i\ne j}u_i+a_j\cdot c_j}=g^z.

To dowód poprawności. Nie dowodzi jeszcze ani anonimowości, ani niepodrabialności. Każda z tych własności wymaga osobnego argumentu.

Herranz–Sáez · ten sam podpis, dwa możliwe źródła

Mała, niebezpieczna grupa p=47, q=23, g=2p=47,\ q=23,\ g=2. Tabela przykładu ma ℋ(m,8)=4, ℋ(m,16)=6\mathcal H(m,8)=4,\ \mathcal H(m,16)=6. To rachunek dydaktyczny, nie implementacja bezpiecznego hasza.

Podpisuje użytkownik o indeksie jj. Druga pozycja ma indeks i≠ji\ne j. Do jej przygotowania wystarcza klucz publiczny AiA_i. Własny sekret aja_j jest potrzebny w odpowiedzi zz.

Symulowana pozycja
Ri=gui, ci=ℋ(m,Ri)R_i=g^{u_i},\ c_i=\mathcal H(m,R_i)
Domknięcie
Rj=gu⋅Ai−ciR_j=g^u\cdot A_i^{-c_i}
Odpowiedź
z=u+ui+aj⋅cjz=u+u_i+a_j\cdot c_j
Weryfikacja
gz=R1⋅R2⋅A1c1⋅A2c2g^z=R_1\cdot R_2\cdot A_1^{c_1}\cdot A_2^{c_2}

Dwa prywatne przebiegi, jeden wynik publiczny

Dobrano dwie różne taśmy losowe, czyli konkretne wartości uiu_i i uu, aby oba przebiegi dały ten sam podpis. Niezależne losowania zwykle dają różne podpisy. Anonimowość dotyczy równości rozkładów, nie identyczności dowolnych dwóch wykonań.

Podpisuje użytkownik 1

a1=7,A1=34a_1=7,\quad A_1=34. Nie korzysta z sekretu a2a_2.

  1. Symuluje pozycję użytkownika 2u2=4u_2=4R2=24mod47=16R_2=2^{4}\bmod47=16c2=ℋ(m,16)=6c_2=\mathcal H(m,16)=6
  2. Domyka własną pozycję 1u=10u=10R1=210⋅32−6mod47=8R_1=2^{10}\cdot32^{-6}\bmod47=8c1=ℋ(m,8)=4c_1=\mathcal H(m,8)=4
  3. Używa własnego sekretu w odpowiedziz=u+u2+a1⋅c1(mod23)z=u+u_2+a_1\cdot c_1\pmod{23}z=(10+4+7⋅4)mod23=19z=(10+4+7\cdot4)\bmod23=19

Podpisuje użytkownik 2

a2=5,A2=32a_2=5,\quad A_2=32. Nie korzysta z sekretu a1a_1.

  1. Symuluje pozycję użytkownika 1u1=3u_1=3R1=23mod47=8R_1=2^{3}\bmod47=8c1=ℋ(m,8)=4c_1=\mathcal H(m,8)=4
  2. Domyka własną pozycję 2u=9u=9R2=29⋅34−4mod47=16R_2=2^{9}\cdot34^{-4}\bmod47=16c2=ℋ(m,16)=6c_2=\mathcal H(m,16)=6
  3. Używa własnego sekretu w odpowiedziz=u+u1+a2⋅c2(mod23)z=u+u_1+a_2\cdot c_2\pmod{23}z=(9+3+5⋅6)mod23=19z=(9+3+5\cdot6)\bmod23=19

Podpis publiczny w obu przypadkach

σ=(R1,R2,z)=(8,16,19)\sigma=(R_1,R_2,z)=(8,16,19)

Indeks podpisującego, sekrety i losowość nie są częścią podpisu. Wyzwania c1=4, c2=6c_1=4,\ c_2=6 weryfikator odtwarza z wiadomości i zobowiązań.

To samo sprawdzenie

219mod47=32^{19}\bmod47=38⋅16⋅344⋅326mod47=38\cdot16\cdot34^{4}\cdot32^{6}\bmod47=3

Oba równania są spełnione. Publiczny podpis jest identyczny.

Każdy użytkownik w pierścieniu ma 22 możliwe pozostałe zobowiązania i 21 możliwych domknięć.

Dwie różne gwarancje i granice modelu

Własność Co wolno przeciwnikowi Jaki jest cel i podstawa argumentu
Anonimowość transkryptu Zna pierścień, wiadomość i podpis. Może nawet znać długoterminowe sekrety Nie rozróżnia dwóch kandydatów na podpisującego. Dowód porównuje dokładne rozkłady
Niepodrabialność w ROM Zna ustalony pierścień uczciwych kluczy. Pyta o hasze i podpisy wybranych wiadomości, bez ujawniania sekretów Nie tworzy podpisu nowej wiadomości. Redukcja rozwiązuje DL

Anonimowość nie ukrywa adresu sieciowego, czasu działania ani ujawnionych wyborów losowych. Niepodrabialność nie zabrania użytkownikowi w pierścieniu podpisywania. Taka osoba właśnie ma do tego uprawnienie. Sam napis „hash odporny na kolizje” nie zastępuje założenia ROM w poniższym dowodzie niepodrabialności.

Dowód dotyczy ustalonego pierścienia. Nie przenosimy go automatycznie na adaptacyjnie rejestrowane złośliwe klucze, przejmowanie sekretów użytkowników czy dowolne zmiany pierścienia. W aplikacji o zmiennych pierścieniach trzeba określić ich kodowanie i związanie z podpisem oraz osobno przeanalizować model.

Pełne dowody: anonimowość przez liczenie, symulacja wyroczni i redukcja DL, fork wielu zapytań i stałe.