Если вы заботитесь только об ослеплении обязательства (для предотвращения грубой силы) и не нуждаетесь в аддитивно гомоморфных обязательствах, вы можете сделать следующее:
У доказывающего есть ключевая пара $(х, Х=xG)$, и публикует открытый ключ $Х$.
Для каждого члена набора доказывающая сторона публикует:
$C_i=H_p(m_i) + r_iG$, куда $H_p(m_i)$ значит хешировать $m_i$ и интерпретировать результат как допустимую точку EC.
$D_i=xH_p(m_i)$
$E_i=xC_i$
DLEQ доказательство того, что $Х$ и $E_i$ использовать один и тот же закрытый ключ $х$ по пунктам $G$ и $C_i$
Подпись для открытого ключа $(E_i-D_i)$ на генераторе $G$.
Обратите внимание, что $E_i-D_i==xH_p(m_i)+xr_iG-xH_p(m_i)==xr_iG$.
Доказательство DLEQ (пункт 4) докажет, что $E_i$ был рассчитан правильно. Здесь мы используем проверяемую псевдослучайную функцию (VPRF), которую может запросить только доказывающий, но которую может проверить любой наблюдатель.
Подпись (пункт 5) будет возможна только в том случае, если $D_i$ также был рассчитан правильно, так как подпись будет возможна только на генераторе $G$ если нет $H_p()$ компонент остался (поскольку дискретный журнал EC w.r.t. $G$ неизвестен ни для какого вывода $H_p()$).
Конечным результатом является то, что мы создали выход VPRF. $D_i$ за каждое сообщение $m_i$, и доказали, что каждый выход VPRF был объявлен правильно.
Теперь будет сразу видно, есть ли какие-либо обязательства по отношению к одному и тому же сообщению, поскольку они будут иметь одинаковые $D_i$ ценности.