Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Тема 5: Web2-ID Nullifiers с использованием vOPRF

Тема 5: Web2-ID Nullifiers с использованием vOPRF

Применение vOPRF (verifiable Oblivious PseudoRandom Function) для создания псевдонимных систем с Web2-ID's и возможное использование в Identity кошельках с глобальными анонимными реестрами (включая EIP-7812).

Расул Ибрагимов, R&D @ Privacy & Scaling Explorations

DeFrens community

April 09, 2025
Tweet

More Decks by DeFrens community

Other Decks in Programming

Transcript

  1. О чем пойдет речь? • Использование vOPRF для создания псевдонимных

    систем с Web2-IDs • Псевдонимная система — это система, сохраняющая приватность, в которой действия пользователей привязаны к уникальным идентификаторам (псевдонимам), но не к их реальной личности: Semaphore, RLN, Plume и др.
  2. Зачем? • Нет способа создавать ‘nullifier’ы, основываясь на публичных данных.

    Это ведет к “Great Trilemma” problem описанной Rarimo: невозможно достичь три свойства одновременно. Но можно приблизиться идеалу
  3. Что такое vOPRF? • vOPRFs (verifiable Oblivious PseudoRandom Functions) -

    это протоколы, позволяющие клиенту генерировать детерминированное случайное значение на основе его входных данных, сохраняя их в приватности и одновременно предоставляя криптографический доказательство корректности • Создается с помощью MPC • Можно использовать vOPRF для генерации nullifier’ов
  4. Как это работает? Участвующие стороны: • Клиент с Web2 ID,

    для которой можно создать ZK Email Proof (Proof Of Account ownership) • OPRF: MPC, но для простоты объясняется как единая сторона, со своей парой ключей – (s, s * H) • Ethereum (или др. децентрализованная смарт-контракт платформа) – для верификации zk-пруфов и хранения публичного ключа OPRF
  5. Как это работает? 1. Клиент отправляет commitment к его UserID

    стороне OPRF с zk пруфом (пруф аутентификации), который доказывает: ZK Email Account Ownership commitment_1 = hash(UserID, salt) G = hashToCurve(UserID) commitment_2 = r * G
  6. Как это работает? 2. OPRF отвечает: oprf_response = s *

    commitment_2 = s * r * G and DLEQ (Chaum-Pedersen) пруф данного умножения: (H, public_key) ~ (commitment_2, oprf_response) 3. Клиент создает новый zk пруф: • верифицирует прошлые вычисления (включая верификацию DLEQ) • вычисляет nullifier = oprf_response * r^(-1) = s * hashToCurve(UserID)
  7. Добавляем MPC 1. N of N MPC: • Каждая нода

    отвечает клиенту индивидуально • В финальном zk пруфе происходит проверка всех отдельных ответов нод и вычисляется их линейная комбинация 2. M of N MPC: идентично с N of N, но требуется только M ответов 3. M of N MPC: используя BLS
  8. Global Semaphore for Web2-IDs и EIP-7812 • Ввести “разделитель” AppID:

    nullifier = hash(s * G, AppID) • Создать “global registry” app (AppID = 0) с деревом Меркла: 1. pseudonym = hash(s * G, 0) 2. записать pubkey = hash(pseudonym, commitment_1) в листьях • Для выполнения действия, предоставляем zk пруф принадлежности к дереву Меркла приложения, так и к глобальному Merkle-дереву, проверяя согласованность между ними.: ◦ nullifier = hash(s * G, AppID)
  9. Возможные применения • Анонимные голосования внутри организации с корпоративной почтой

    • Анонимные голосования с проверкой паспорта (используя OpenPassport, zkPassport и тд.) • Анонимные клэймы эирдропа напрямую с github login • Получение приватных ключей из данных с низкой энтропией • Псевдонимные форумы и псевдонимные кошельки
  10. Открытые вопросы • Антиспам для vOPRF: сделать ли сервис стать

    платным? • Пороговые параметры MPC? • Стоит ли целиться в крупные сценарии использования, такие как национальные выборы? • Другие применения?