Semnături de apel sunt similare cu semnăturile de grup, dar nu au manageri de grup. O altă diferență esențială este că se poate forma un „ring” la momentul semnării cu cheile oricui vă plac – nu aveți un „grup” fix ca într-o semnătură de grup.
Semnăturile nu pot fi „legate” decât dacă utilizați în mod specific un conectabil schema de semnătură de inel. Mai mult, identitatea semnatarului este ascunsă în ring și nu poate fi identificată, prin design, la fel ca într-o semnătură de grup.Majoritatea schemelor au că verificarea poate fi făcută de oricine (verificabilă public). Și semnatarii pot crea inelul și pot semna singuri, fără participarea nimănui altcuiva. Deci, aceasta îndeplinește toate cerințele dumneavoastră, ignorând ultimele (că se bazează pe curbe eliptice).
Prima construcție a semnăturii inelului a fost cea de Rivest, Shamir și Tauman. Schema lor folosește chei RSA. Abe, Ohkubo și Suzuki a dat o schemă în care este capabil să utilizeze un amestec de chei de tip RSA și DL. Anexa A a lucrării lor arată cum puteți construi o semnătură inelă doar cu chei publice de semnătură schnorr, care pot fi adaptate la setarea curbei eliptice (și utilizați EC-schnorr).
Mai exact, să presupunem că fiecare parte din ring are o cheie publică $Y_i = [x_i]G$, și participant $k$ vrea să genereze o semnătură în numele tuturor. Lasă ordinea de $G$ fi $p$, si lasa $H$ fie o funcție hash al cărei codomeniu este $\mathbb{Z}/p\mathbb{Z}$. Semnatarul va alege o valoare aleatorie $\alpha$, și valori aleatorii $c_i$ pentru toți ceilalți membri ai inelului. Semnatarul va crea apoi o „cheie agregată”
$$
K = [\alpha]G + \sum_{i \neq k} [c_i]Y_i \, .
$$
Apoi, semnatarul va calcula hash-ul $c = H(Y_0, Y_1, \ldots, Y_n, M, K)$ pentru mesaj $M$. Calcula
$$
c_k = c - \sum_{i \neq k} c_i \pmod{p},
$$
astfel încât toate $c_i$ inclusiv $c_k$ suma la $c$ (hașul).
În cele din urmă, lasă $s = \alpha - c_k \cdot x_k \bmod{p}$. Semnătura este $(s, c_0, \ldots, c_n)$. Pentru a verifica, pur și simplu recalculați cheia agregată și hash-ul după cum urmează:
$$
K' = [s]G + \sum_i [c_i]Y_i\
c' = H(Y_0, Y_1, \ldots, Y_n, M, K')
$$
si verifica asta $c' = \sum_i c_i \pmod{p}$.
Puteți vedea că efectuarea sinceră a protocolului va permite $K' = K$ deoarece
$$
K' = [s]G + \sum_i [c_i]Y_i \
= [\alpha]G - [c_k \cdot x_k]G + \sum_i [c_i]Y_i\
= [\alpha]G - [c_k]Y_k + \sum_i [c_i]Y_i\
= [\alpha]G + \sum_{i \neq k} [c_i]Y_i = K.
$$
Apoi verificarea funcționează indiferent de care $k$ a fost semnatarul, după cum este necesar, și oricine poate verifica semnătura având în vedere setul de chei publice $Y_i$, mesajul $M$, semnatura $(s, c_i)$, și parametrii publici $(G, p, E, \ldots)$.