Кольцевые подписи похожи на групповые подписи, но не имеют групповых менеджеров. Еще одно ключевое отличие заключается в том, что во время подписания может быть сформировано «кольцо» с любыми ключами, которые вам нравятся — у вас нет фиксированной «группы», как в групповой подписи.
Подписи не могут быть «связаны», если вы специально не используете связываемый схема кольцевой подписи. Более того, личность подписавшего скрыта в кольце и не может быть идентифицирована по замыслу, как в групповой подписи.В большинстве схем верификация может быть выполнена любым (публично проверяемым). А подписавшие могут создать кольцо и подписать самостоятельно, без чьего-либо участия. Так что это соответствует всем вашим требованиям, игнорируя последнее (что они основаны на эллиптических кривых).
Первая кольцевая подпись была построена Ривест, Шамир и Тауман. В их схеме используются ключи RSA. Абэ, Окубо и Судзуки дал схему, в которой можно использовать смесь ключей типа RSA и DL. Приложение A к их статье показывает, как вы можете создать кольцевую подпись, используя только открытые ключи подписи Шнорра, которые можно адаптировать к настройке эллиптической кривой (и использовать EC-schnorr).
В частности, предположим, что у каждой стороны в кольце есть открытый ключ. $Y_i = [x_i]G$, и участник $к$ хочет создать подпись от их имени. Пусть порядок $G$ быть $р$, и разреши $Ч$ быть хэш-функцией, кодовый домен которой $\mathbb{Z}/p\mathbb{Z}$. Подписавший выберет случайное значение $\альфа$и случайные значения $c_i$ для всех остальных членов кольца. Затем подписывающая сторона создаст «агрегированный ключ».
$$
K = [\alpha]G + \sum_{i \neq k} [c_i]Y_i \, .
$$
Затем подписывающая сторона вычислит хэш $c = H(Y_0, Y_1, \ldots, Y_n, M, K)$ для сообщения $ млн $. Вычислить
$$
c_k = c - \sum_{i \neq k} c_i \pmod{p},
$$
так что все $c_i$ в том числе $c_k$ сумма к $с$ (хэш).
Наконец, пусть $s = \alpha - c_k \cdot x_k \bmod{p}$. Подпись $(s, c_0, \ldots, c_n)$. Для проверки просто пересчитайте совокупный ключ и хэш следующим образом:
$$
K' = [s]G + \sum_i [c_i]Y_i\
c' = H(Y_0, Y_1, \ldots, Y_n, M, K')
$$
и проверьте это $c' = \sum_i c_i \pmod{p}$.
Вы можете видеть, что честное выполнение протокола позволит $К' = К$ так как
$$
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.
$$
Тогда проверка работает вне зависимости от того, какой $к$ был подписантом, как и требовалось, и любой может проверить подпись с помощью набора открытых ключей $Y_i$, сообщение $ млн $, подпись $(s, c_i)$, а общедоступные параметры $(G, p, E, \ldots)$.